2011-05-14

Comandi multipli con vim l'editor

L'editor vim, come il predecessore vi, permette di ripetere più volte la stessa operazione mettendo a disposizione il comando . (punto) che ogni volta riesegue il comando precedente che non sia un comando di spostamento del cursore oppure un comando : (Ex). Inoltre permette di decidere prima dell'esecuzione del comando stesso per quante volte deve essere eseguito digitando, prima del comando, il numero di volte.



Passiamo agli esempi, il comando . può essere usato per ripetere il comando di cancellazione di una linea dd, quindi se si devono cancellare alcune linee si può utilizzare dd per la prima linea e poi proseguire con . per ripetere il comando, un bel risparmio di battute, no? Maggiore risparmio si ottiene ad esempio cancellando una serie di campi da un file in formato csv (comma separated value, con il comando ogni campo è saparato dal successivo con una virgola) df, (in futuri post tratterò i comandi di cancellazione/modifica abbinati ai comandi di spostamento), di nuovo con il comando . si può ripetere risparmiando due tasti ad ogni cancellazione. Allo stesso modo può essere utilizzato per sostituire una parola con cwNuova<esc> e posizonandosi sulla nuova parola ripetere con .
Passiamo agli esempi con la ripetizione del comando digitando prima il numero di volte, per eliminare dieci righe partendo dalla riga corrente in un colpo solo 10dd , per eliminare dalla posizione del cursore la parola corrente e le prossime per un totale di cinque si può usare 5dw. La ripetizione con numero, a differenza della ripetizione con . , si applica anche ai comandi di spostamento del cursore, per scendere di 20 righe si usa 20<DOWN> , con <DOWN> (intendo la freccia verso il basso), da utilizzatore di lunga data di vi preferisco utilizzare le lettere h j k l per lo spostamento del cursore che corrispondono a <LEFT> <DOWN> <UP> <RIGHT> (breve nota storica: alcuni vecchi terminali non avevano le frecce di spostamento del cursore oppure se le avevano non sempre erano configurate a dovere, inoltre nei lenti collegamenti remoti venivano risparmiati alcuni Byte da trasmettere con le lettere invece di usare le frecce che di solito corrispondevano ad almeno tre o quattro Byte; per questa serie di motivi vi prevede l'utilizzo di lettere per lo spostamento del cursore). Per scorrere di quattro pagine di schermo 4<Ctrl>f e così via per tutti i comandi di spostamento.

Adesso cerchiamo di combinare i due utilizzi di ripetizione dei comandi: modificando sorgenti di programmi, per aggiornamenti capita spesso di dover effettuare la stessa modifica ad una serie di righe e, quando capita che la modifica sia sempre nella stessa posizione si può applicare la tecnica che uso spesso di digitare una serie di caratteri per ogni riga da modificare; per esempio, supponiamo di dover sostituire la quarta parola di ogni riga che potrebbe essere il nome di una funzione allora ci posizioniamo all'inizio della funzione nella prima riga da modificare ed effettuiamo la modifica con cwNuovaFunzione<ESC> poi ripetiamo su tutte le successive con  <INVIO>3w. il funzionamento è presto spiegato, con <INVIO> il cursore viene posizionato all'inizio della prima parola della riga seguente, con 3w passiamo avanti di 3 parole, quindi alla quarta e con . ripetiamo la modifica.

Nessun commento:

Posta un commento