Elimina gli spazi bianchi per un set di linee nell'editor Vim


12

Ho un testo come il seguente in un file:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Devo eliminare lo spazio vuoto prima di ciascuna delle righe. Per una riga quello che faccio è 0dw

Posso ripetere lo stesso comando usando. ma navigando manualmente alle righe successive.

Ma c'è un modo per applicare '0dw' a quel blocco di linee?

Suppongo che ci sia un modo per usare le macro, ma non le ho mai usate prima. Ma sono disposto a impararli se non c'è altra scelta.


+1 bella domanda, finisco per fare molto la stessa cosa. E benvenuti nel sito.
Sardathrion - contro l'abuso da SE del

Risposte:


10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Ulteriori informazioni qui su http://vim.wikia.com/wiki/Remove_unwanted_spaces

Se vuoi farlo per una particolare gamma di linee:

:19,25s/^\s\+//

A proposito, il modo migliore per iniziare a imparare vim è eseguire il vimtutorcomando, ti insegnerà come usare Vim nell'editor Vim.


1
: le è stato fantastico e grazie mille per le alternative e il link :)
saiy2k

3
+1 per la menzione di vimtutor e una buona risposta.
Sardathrion - contro l'abuso da SE del

1
Selezionare le linee pertinenti utilizzando Ve spostando il cursore per espandere la selezione della linea. Quindi premere :per accedere automaticamente '<,'>e da lì in poi è possibile utilizzare la regexp di Nikhil.
ZioZeiv,

1
un altro modo di fare un intervallo di linee (dato che dimentico sempre i numeri delle linee) è quello di segnare le 2 linee e operare sui segni. Esempio, vai alla riga 19 e premi 'ma', vai alla riga 25 e premi 'mb', quindi fai :'a,'bs/^\s\+//.
Patrick,

7

Un modo alternativo per farlo è utilizzare gli strumenti di rientro di VIM (generalmente associati a </ >). Per prima cosa hai bisogno di un modo per indicare quali linee saranno interessate. È possibile utilizzare la modalità di selezione visiva o qualsiasi altro mezzo per specificare un intervallo di righe da influenzare, quindi utilizzare un numero arbitrariamente alto o livelli di rientro da rimuovere. 9<di solito fa il trucco abbastanza bene per rimuovere almeno 9 livelli di rientro possibile (tabulazioni / spazi) dalle linee correnti.


3

Ho un approccio per farlo nei seguenti semplici passaggi:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Spiegazione del terzo passaggio:

0 passa all'inizio della riga.

dw cancella la parola (spazi vuoti).

normalapplica il comando 0dw.

'<,'> ripete il normale per tutte le linee selezionate in modalità visiva.


1

ctrl+vti permette di fare qualcosa di simile a quello che vuoi ma non esattamente. È possibile selezionare un blocco visivo e applicare un comando al lotto.


2
ho selezionato quelle righe in modalità blocco e questo comando ha funzionato:: <, '> normale 0dw
saiy2k

1
@ saiy2k :normalè la cosa importante qui, e penso che sia la migliore risposta qui. Potresti postarlo come risposta?
Gilles 'SO- smetti di essere cattivo'
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.