VIM, o VI improved, è un editor di testo che migliora l'editor vi, a sua volta un programma che ha migliorato l'editor a righe ed facendolo diventare un editor visuale (caratteristica da cui deriva il nome).
Vi è l'unico editor che è presente in praticamente tutte le versioni di Unix e Linux, ed è spesso impostato come editor di default per le operazioni di amministrazione.
Caratteristica importante di Vi è che si tratta di un programma che opera in base alla modalità corrente: la pressione dello stesso tasto ha significati diversi a seconda del contesto operativo.
Si può iniziare a capire come funziona VIM con il programma vimtutor, che avvia un esercitazione a copertura dei seguenti aspetti:
Un qualsiasi comando complesso appena impartito può essere ripetuto. Ad esempio, il comando "vai alla fine della riga, elimina l'ultimo carattere, vai a capo, aggiungi le graffe di apertura e chiusura" può essere impartito per la prima di queste righe e poi successivamente senza alcuna fatica digitando semplicemente il carattere punto.
void function_one(int a, int b);
void function_two(char a, char *b);
void function_three(void);
diventa... (digitando la prima volta A, <backspace>, <newline>, {, }, <newline> e per le righe successive solo .):
void function_one(int a, int b)
{
}
void function_two(char a, char *b)
{
}
void function_three(void)
{
}
Il comando % sposta il cursore alla prima parentesi chiusa rilevante (e alla successiva pressione alla corrispondente aperta).
Ad esempio, digitando % con il cursore sopra la A, il cursore si sposta sopra la B:
function_one(function_two());
A B
Si può utilizzare questo fatto per "tagliare" il testo selezionato automaticamente selezionato con c%.
Le operazioni di selezione possono essere fatte in maniera agevole e chiara nella modalità visuale (a carattere con v, a linea con V, a blocco con <control>-V.
Si può registrare una macro premendo q seguito da una lettera (al termine della registrazione, si preme di nuovo q). Per eseguire la macro, si preme @ e la lettera corrispondente.
Quando si taglia un testo, questo viene posto in un registro senza nome. Se lo si desidera, si possono usare i registri con nome da a a z mediante, ad esempio, "cdd (taglia la riga corrente e mettila nel registro c). Se si vuole accodare il testo al registro, si usa la lettera maiuscola per indicare il registro stesso. Per incollare, si può usare il corrispondente "cp.
La selezione primaria e la clipboard di sistema sono dei registri speciali, accessibili con il nome * e +, rispettivamente.
Ad esempio, per copiare due righe come selezione primaria si può digitare "*2yy (il contenuto della selezione primaria è reso disponibile nelle altre applicazioni Xwindow premendo il pulsante centrale del mouse).
La modalità last-line è quella in cui si impartiscono comandi complessi che necessitano di parametri da specificare (es. ricerche di testo, sostituzioni, impostazione opzioni).
In modalità last-line vale una history locale.
Le ricerche (basate sulle espressioni regolari) possono avvenire:
/void, oppure in indietro, es. ?void)n per l'occorrenza successiva, N per la precedente, * per la prossima occorrenza della parola sulla quale si trova il cursore)Con il comando :set hlsearch si fa in modo che tutte le occorrenze vengano evidenziate, con il comando :set incsearch si vedono le occorrenze "al volo".
La sostituzione di un testo (trova e sostituisci) avviene:
:s/anna/ANNA/ per la prima occorrenza, oppure :s/anna/ANNA/g per tutte le occorrenze):%s/anna/ANNA/ per la prima occorrenza, oppure :%s/anna/ANNA/g per tutte le occorrenze)Le opzioni si possono impostare:
:set number)vi +"set number" documento.txt)Una finestra si può dividere orizzontalmente (:split) o verticalmente (:vsplit). Per passare da una sottofinestra all'altra si deve premere due volte <ctrl>-W. Utili sono poi i comandi :close e :only.
Alcune opzioni di VIM che potrebbe valere la pena di impostare:
:set cursorline (evidenzia la riga in cui si trova il cursore):set cursorcolumn (evidenzia la colonna in cui si trova il cursore):highlight CursorLine ctermbg=lightgray (es. di impostazione del colore):syntax on (abilita l'evidenziazione sintattica):set mouse=a (abilita l'uso del mouse in tutte le modalità di lavoro)Varie cose che possono tornare utili:
:cmap <F2> :w<cr> (mappatura di comandi):iab perche' perché (sostituzione di caratteri)<ctrl>-A (incrementa numero)<ctrl>-X (decrementa numero)~ (maiuscolo/minuscolo)Alcune cose che si possono fare:
vim -b (utile con file zip/tar):1b, :2b ecc.)vim +/_stringa nomefile_)vim +_num nomefile_)v)Nel caso in cui si vogliano sfruttare al meglio le possibilità di VIM, si può consultare la guida in linea:
:help:help <argomento> (aiuto su argomento):help! (aiuto in casi disperati)