Posso eliminare un'intera riga, tranne l'interruzione di linea?


33

Un'operazione abbastanza comune per me in vim, dato che sono ossessivo-compulsivo e mi piace mantenere i miei file liberi da spazi bianchi, è quello di eliminare il contenuto di un'intera linea, ma non la linea stessa (cioè non l'interruzione di riga).

C'è un modo vim integrato per farlo? Forse d<movement command>un'operazione?

Finora, il migliore che ho è (sulla linea in questione) 0d$. C'è un modo più veloce?


2
In alternativa al taglio manuale degli spazi bianchi, è possibile utilizzare un plug -in come vim-better-whitespace , che evidenzia gli spazi bianchi finali, fornisce un comando per rimuoverlo tutto in una volta e può anche farlo automaticamente al momento del salvataggio.
deltab,


3
Anche senza un plug-in, puoi eliminare globalmente gli spazi bianchi finali usando la ricerca e sostituzione, ad es.:%s/\s*$//
Kyle Strand

Risposte:


34

È possibile utilizzare 0Dquesto andrà al primo carattere della riga ed eliminerà fino alla fine della riga. Nota che puoi usare ^Dse vuoi lasciare solo uno spazio bianco precedente. Inoltre, queste operazioni non possono essere ripetute utilizzando .. Se si desidera un'operazione che può essere ripetuta con il .comando, fare riferimento alla risposta di David Lord.

Argomenti di aiuto:

  • :help 0
  • :help D
  • :help ^

4
Mentre questo è diretto, al punto e (probabilmente) il minor numero di tasti, non è ripetibile usando il .comando. Per questo motivo, penso cc<Esc>o S<Esc>sia più attraente se ti interessa ripetere.
Tommaso,

Questo è vero. Tuttavia, è possibile registrarlo come macro e ripetere tale utilizzo ..
EvergreenTree

In generale, le macro non possono essere ripetute con .. Funzionano come se quei tasti fossero stati inseriti in modo interattivo, quindi i singoli comandi venivano trattati separatamente. L'uso .ripeterà solo l'ultimo comando nella macro.
Tommaso,

L'ho provato e non è così che funziona per me. Se registri la macro, quindi usala usando @{reg}, puoi ripeterla con .dopo.
EvergreenTree

1
Stai solo ripetendo l'ultimo comando della macro, che è D. Dopo 0Dun'operazione, il cursore verrà lasciato nella colonna 0. Se il cursore si trova già all'inizio della riga (dopo essersi spostato su un'altra), sembrerà che la macro sia stata ripetuta correttamente. Prova a spostare il cursore in avanti nella riga e a digitare .: vedrai che si ripete solo D.
Tommaso,

20

cc <Esc>farà come chiedete, ma è più sequenze di tasti di 0D. Se vuoi mettere qualcosa in quella linea in seguito, ccpotrebbe essere la cosa migliore.


2
Se includi lo Shift è lo stesso e forse più facile.
Holloway,

4
Sebbene questa non sia la soluzione "più pulita", ha un vantaggio: è esattamente un'azione e quindi è ripetibile con il .comando. Al contrario, 0D(come suggerito nella risposta scelta) sono due azioni: il 0movimento e il Dcomando.
Tommaso,

@Trengot probabilmente è più facile che 0Dper me da quando ho jkmappato <Esc>nel mio vimrc, quindi le mie mani non dovrebbero nemmeno lasciare la fila in casa.
EvergreenTree

1
Vedi la risposta di @Nobilis: Sè documentato come "Sinonimo di cc"
Volker Siegel,

14

Se quindi Ctrl+Co Escsembra svolgere esattamente la stessa funzione.

Può quindi essere ripetuto con .in quanto costituisce una singola azione.


2
Stavo solo pensando di aggiungere questo come risposta e poi ho visto il tuo
sbell

7

0Dè probabilmente quello che vuoi. Si eliminerà dal cursore alla fine della riga lasciando la linea (e tutti i caratteri prima del cursore) in posizione.


Anche se questa risposta ha quasi un anno, vale la pena notare che 0Dcancellerà dall'inizio della riga , non dalla posizione del cursore
FliiFe

4

Io di solito uso ddO. ddper eliminare la riga corrente e O(che è una o maiuscola) per aggiungere una nuova riga.

Questo è anche 3 tasti, ma ddconta solo come 1 e mezzo, e trovo Opiù facile da digitare di $.

È diverso dalla 0Dsoluzione in quanto esegue il rientro automatico, ad esempio con questo codice (dove si !···trova una scheda e █ il cursore:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D ti lascerà con:

def asd():
!···if foo:
█
!···!···foobar()

E ddOti lascerà con:

def asd():
!···if foo:
!···!···█
!···!···foobar()

E se premi <Esc>subito dopo, Vim dovrebbe rimuovere il rientro automatico, quindi hai lo stesso di 0D.

Non esiste un modo "corretto", dipenderà esattamente da ciò che vorrai fare. Preferisco ddOperché è più flessibile e perché è "nelle mie dita" :-)


2
^Dlascerà da solo lo spazio bianco.
EvergreenTree

Poiché Oti lascia in modalità inserimento, questo equivale a cc, tranne senza rientro automatico .... a meno che la tua linea non sia già rientrata automaticamente.
Kyle Strand,

Ciò si comporterà in modo diverso sull'ultima riga del file.
Tommaso,

0

E per salvare quella preziosa sequenza di tasti che puoi usare, 0Cche cancellerà tutti i caratteri sulla riga corrente e ti metterà in modalità inserimento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.