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)