VIM

Essere efficienti con Vim

Questa guida presuppone una conoscenza di base di Vim — insert mode, command mode, aprire e salvare file, ecc… E’ stata pensata per aiutare i principianti a sviluppare le loro abilità così da poter usare Vim in modo efficiente.

In questa guida, <C-X> significa Ctrl-X — ovvero, tieni premuto il tasto Ctrl e premi X. Si può avere aiuto sulla maggioranza dei comandi usati qui digitando :help comando in Vim dove comando è il nome del comando sul quale si vuole aiuto.

Muoversi in modo efficiente

Stai fuori dall’insert mode

In generale dovresti spendere meno tempo possibile nell’insert mode di Vim,  perché in questa modalità Vim si comporta come un editor stupido. Questo è il motivo per cui molti principianti passano così tanto tempo nell’insert mode — perché fa diventare Vim facile da usare. Ma il suo vero potere è in command mode! Scoprirai che più conosci Vim, meno tempo spenderai nell’insert mode.

Usare h, j, k e l

Il primo passo per usare in modo efficiente Vim è imparare a fare a meno dei tasti freccia. Uno dei vantaggi del design modale di Vim è che non hai bisogno di muovere costantemente le mani avanti e indietro fra i tasti freccia è i tasti con le lettere; quando sei in command mode, le lettere h, j, k e l corrispondono alle direzioni sinistra, giù, su e destra, rispettivamente. Ci vuole un po’ di pratica per abituarsi, ma poi noterai la differenza.

Quando stai modificando una e-mail o del testo formattato in paragrafi, noterai che i tasti direzionali saltano più linee di quanto ti possa aspettare. Questo accade perché Vim vede i tuoi paragrafi come una unica lunga linea. Digita g prima di h, j, k o l per muoverti secondo le linee che appaiono a schermo invece delle linee virtuali.

I movimenti per muovere il cursore sulla linea corrente

La maggior parte degli editor ha solo comandi semplici per muovere il cursore (sinistra, su, destra, giù, inizio/fine linea, ecc…). Vim invece ha dei comandi davvero avanzati; questi comandi sono chiamati movimenti (motions). Quando il cursore si muove da un punto nel testo ad un altro, il testo fra questi punti (inclusi i punti stessi)  può essere modificato. (Questo diventerà importante più tardi.)

Ecco alcuni dei movimenti più utili:

fx Muove il cursore avanti alla successiva occorrenza del carattere x nella linea corrente (ovviamente, x può essere qualunque carattere). Questo comando è estremamente utile. Puoi digitare ; per ripetere l’ultimo comando f che hai dato.
tx Come il precedente, ma muove il cursore immediatamente alla destra prima del carattere, non sopra di esso. (E’ molto utile, davvero.)
Fx Muove il cursore all’indietro alla prossima occorrenza del carattere x nella linea corrente
w Muove il cursore avanti di una parola
b Muove il cursore indietro di una parola
0 Muove il cursore all’inizio della linea corrente
^ Muove il cursore al primo carattere della linea corrente
$ Muove il cursore alla fine della linea
) Muove il cursore avanti fino alla frase successiva. (Utile quando stai scrivendo una e-mail o un documento testuale)
( Muove il cursore indietro di una frase

Muoversi in modo efficiente attraverso il file

Vim ha molti comandi che possono farti arrivare dove vuoi arrivare nel tuo file — raramente c’è bisogno di scorrerlo manualmente. Le combinazioni di tasti che seguono non sono tecnicamente dei “movimenti” (motions), dato che si muovono all’interno del file e non in una linea particolare.

<C-f> Muove il cursore avanti di una schermata di testo
<C-u> Muove il cursore indietro di una schermata di testo
G Muove il cursore alla fine del file
numG muove il cursore alla linea num. (Per esempio, 10G porta il cursore alla linea 10)
gg Muove il cursore all’inizio del file
H Muove il cursore all’inizio dello schermo
M Muove il cursore in mezzo allo schermo
L Sposta il cursore alla fine dello schermo
* Legge la stringa sotto al cursore e sposta il cursore alla successiva occorrenza (per esempio,se il cursore è da qualche parte nella parola “bob”, il cursore si sposta alla successiva occorrenza di “bob” nel file)
# Come sopra solo che sposta il cursore all’occorrenza precedente
/text Cerca, a partire dal cursore, la successiva occorrenza di text e sposta li il cursore. Bisogna premere Enter per eseguire la ricerca. Per rieseguire l’ultima ricerca, digita n (sta per “next occurance”, prossima occorrenza )
?text Come / solo che cerca nella direzione opposta
ma Crea un segnalibro chiamato a alla posizione attuale del cursore. Un segnalibro può essere una qualunque lettera minuscola. Non lo puoi vedere ma è li!
`a Va al segnalibro a. Importante: quello è un apice rovesciato (backtick) non un apostrofo. L’apice rovesciato si crea di solito digitando Altgr-’ sulle tastiere italiane
`. Va all’ultima linea modificata. Questo è utilissimo! Se hai bisogno di scorrere un file per cercare qualcosa puoi sempre tornare indietro dove stavi prima senza creare un segnalibro  usando il comando `

Scrivere in modo efficiente

Usare il completamento delle keyword

Vim ha un sistema di completamento delle keyword molto bello. Ciò significa che puoi digitare parte di una parola molto lunga, premere un tasto, e far completare la parola a Vim. Per esempio, se hai una variabile ioSonoUnaVariabileMoltoLunga da qualche parte nel codice, probabilmente non vorrai scriverla per intero ogni volta. Per usare il completamento delle keyword è sufficiente scrivere le prime lettere della stringa (es. ioSo) e premere <C-N> (cioè tenere premuto Ctrl e digitare N) o <C-P>. Se Vim non ti da la parola che vuoi subito, continua a provare — Vim scorrerà attraverso tutte le possibilità di completamento che potrà trovare.

Entrare in insert mode in modo intelligente

La maggioranza dei nuovi utenti di Vim entrano in insert mode premendo i. Questo funziona, ma è spesso piuttosto inefficiente, dato che Vim ha un mucchio di comandi che lasciano l’editor in insert mode. Ecco alcuni dei più popolari:

i Inserisce il testo alla sinistra del carattere corrente
I Inserisce il testo all’inizio della riga corrente
a Inserisce il testo alla destra del carattere corrente
A Inserisce il testo alla fine della riga corrente
o Crea una nuova linea sotto la linea corrente ed inserisce il testo li
O Crea una nuova linea sopra la linea corrente ed inserisce il testo li
c{movimento} Cancella il testo indicato da {movimento} e entra in modalità inserimento. Per esempio, c$ cancellerà il testo dal cursore alla fine della linea ed entra in insert mode. ct! cancellerà il testo dal cursore fino al prossimo punto esclamativo escluso e entra in insert mode. Il testo cancellato è copiato negli appunti e può essere incollato.
d{motion} Cancella il testo indicato da {movimento} — con in c{movimento}, ma non entra in modalità inserimento.

Muovere blocchi di testo in modo efficiente

Usare le selezioni visuali e le giuste modalità di selezione

A differenza del Vi originale, Vim ti permette di evidenziare del testo e di eseguire delle operazioni su di esso. Ci sono tre modalità si selezione visuale principali.

v Modalità di selezione a caratteri. E’ la modalità di selezione a cui la maggioranza delle persone sono abituate, fai pratica con queste prima di provare le altre.
V Modalità di selezione a linee. Viene selezionata sempre l’intera linea. E’ meglio della selezione a caratteri quando vuoi copiare o spostare gruppi di linee
<C-V> Modalità di selezione a blocchi. Molto potente e disponibile in pochi altri editor. Puoi selezionare un blocco rettangolare e qualunque testo in quel blocco sarà evidenziato.

Quando hai evidenziato un blocco, probabilmente vorrai farci qualcosa. Ecco alcuni dei comandi più utili che puoi dare quando un’area di testo è selezionata.

d Cancella (delete) il testo evidenziato e lo mette nelle clipboard.
y Copia (yank) il testo evidenziato negli appunti.
c Taglia il testo evidenziato e lo mette negli appunti. Questo comando è come d, ma lascia l’editor in insert mode

Tagliare e copiare da selezioni non visuali

Se sai esattamente quello che vuoi copiare o tagliare, lo puoi fare senza entrare in visual mode. Questo ti fa risparmiare tempo.

d{movimento} Taglia il testo selezionato da {movimento} negli appunti. Per esempio, dw taglierà una parola e dfS taglierà dal cursore fino alla prossima S maiuscola inclusa nella linea di testo corrente
y{movimento} Copia il testo selezionato da {movimento}
c{movimento} Taglia il testo selezionato da {movimento} e lascia l’editor in modalità inserimento dd taglia la linea corrente
yy Copia la linea corrente
cc Taglia la linea corrente e lascia l’editor in modalità inserimento.
DTaglia dal cursore fino alla fine della linea corrente
Y Copia l’intera linea, proprio come yy. (Si è inconsistente! Puoi usare y$ per fare quello che ti aspetteresti da Y)
x Taglia il carattere corrente. (Una specie di backspace in command mode)
s taglia il carattere corrente e lascia l’editor in insert mode

Incollare

Incollare è facile. Metti il cursore dove vuoi incollare e digita p.

Usare clipboard multiple

Molti editor hanno una sola clipboard. Vim ne ha molte; le clipboard in Vim sono chiamate registri. Puoi elencare tutti i registri definiti al momento ed il loro contenuto digitando :reg. Tipicamente userai il registro delle lettere minuscole; gli altri sono usati per vari scopi interni e sono raramente utili.

Per usare uno specifico registro per una operazione di copia incolla, digita semplicemente "a prima del comandi per l’operazione, dove a è il registro che vuoi usare. Per esempio, per copiare la linea corrente nel registro k, puoi digitare "kyy (Potresti anche digitare V"ky. Sapresti dire perché funziona?). Quella linea rimarrà nel registro k fino a che non copierai esplicitamente qualcosa nello stesso registro. Userai poi "kp per incollare il testo dal registro k.

Evitare le ripetizioni

Lo stupefacente comando .

In Vim, scrivere . (cioè il punto) ripeterà l’ultimo comando usato. Per esempio, se il tuo ultimo comando è stato dw (delete a word), Vim cancellerà un’altra parola.

Ripetere comandi

La ripetizione dei comandi è una delle caratteristiche più potenti di Vim. Ogni comando può essere preceduto da un numero. Il numero dirà a Vim quante volte il comando dovrà essere eseguito. Ecco alcuni esempi:

3j muoverà il cursore giù di tre linee
10dd cancellerà dieci linee
y3″ copierà il testo dal cursore fino alla terza virgolette dopo il cursore sulla linea corrente. Le ripetizioni sono utili per estendere il raggio d’azione dei movimenti in questo modo

Registrare macro

Talvolta capita di fare le stesse cose più volte su diversi blocchi di testo. Vim ti permette di registrare macro ad hoc per eseguire le operazioni.

qregisterInizia a registrare una macro nel registro definito. Per esempio, qa inizia la registrazione e mette la macro nel registro a.
q termina la registrazione
@register Esegue la macro memorizzata nel registro definito. Per esempio, @a esegue la macro nel registro a.

Ricorda che le macro si limitano a registrare i tasti premuti e a ripeterli, non sono magia. Registrare macro è quasi un arte perché ci sono così tanti comandi che permettono di eseguire una certa operazione in Vim, e devi sceglierli con cura in modo che questi funzionino in tutti i posti in cui hai bisogno di eseguirla.

Scrivere codice con Vim

Vim è un eccellente editor per il codice sorgente perché ha tante caratteristiche che sono specificamente create per aiutare i programmatori, Ecco alcune delle più utili:

]p come p, ma adatta automaticamente il livello di indentazione del codice incollato in modo che corrisponda a quello del codice già esistente. Provalo!
% Se metti il cursore su una parentesi e premi % sposta il cursore alla parentesi corrispondente. Ottimo per risolvere problemi relativi a blocchi di codice molto annidati.
>> Indenta il codice evidenziato. (Vedi la sezione precedente sulla selezione efficiente del testo. Se nessun testo è selezionato, la linea corrente viene indentata)
<< Come >> ma indenta al contrario
gd Va alla definizione (o dichiarazione) della funzione o variabile sotto il cursore
K va alla pagina di manuale (man page) della della parola sotto al cursore. (Per esempio se il cursore è attualmente sotto la parola sleep, verrà mostrata la man page di sleep)


Traduzione dell’originale “Efficient Editing With vim” di Jonathan McPherson realizzata con il permesso dell’autore.

Siti realizzati con VIM

Ho tradotto questa guida perché uso VIM per qualunque cosa, soprattutto per realizzare dei piccoli sito o blog. Qui un elenco di quelli che ho realizzato negli ultimi tempi.