Selezionare le linee quindi premere :
per accedere alla modalità comandi. Vim riempirà automaticamente '<,'>
, che limita l'intervallo alle linee selezionate. Per il vostro esempio è possibile utilizzare il comando :s
di fare lo swap:
:'<,'>s/\(\w\+\), \(\w\+\)/\2, \1/
Ciò scambiare due parole separate da una virgola su ogni riga nella selezione visiva.
È inoltre possibile utilizzare '<
e '>
come qualsiasi altro segnalibro o posizione di linea, ad es. come parte di un comando di movimento, quindi in modalità normale, d'<
eliminerà dalla posizione corrente del cursore all'inizio della prima riga nella selezione visiva. I segni rimangono in vigore anche se il blocco non è più visivamente evidenziato.
Se si desidera riprodurre una macro registrata su ogni riga, è necessario eseguire la macro con il comando :normal
. Sfortunatamente il comando :normal
non funziona su un intervallo di linee, ma è possibile risolverlo con il comando :global
. Questo viene eseguito un comando :ex
su ogni riga che corrisponde a un'espressione regolare, in modo da poter fare questo:
:'<,'>g/^/ norm @a
Spiegazione:
:'<,'> for every line in the visual block
g/^/ on every line that matches the regex /^/ - i.e. every line
norm run in normal mode
@a the macro recorded in a
fonte
2010-07-26 19:40:06
Per essere onesti, probabilmente faccio questo particolare compito con espressioni regolari. Ma la domanda è ancora valida per i casi più complessi. –
Perché vim? Secondo me sed è più appropriato. – kokosing
@kogut: Perché uscire dall'editor per modificare il testo con una regex a una riga? – Stephen