PicciHud 13-05-2022
Non importa se sei un amministratore di sistema o uno sviluppatore di software, se usi il terminale in una distribuzione GNU/Linux, potrà capitare che dovrai utilizzare un editor da riga di comando.
Sono disponibili diversi editor di testo da riga di comando e sei libero di usarne uno qualsiasi. Vim è uno degli editor più potenti popolari, installato su qualsiasi distribuzione GNU/Linux. Questo è il motivo per cui imparare le basi di Vim ti aiuterà molto.
Ora, questa non è una guida completa per renderti un esperto di Vim. È una guida destinata a fornirti gli strumenti minimi necessari per sopravvivere in Vim.
Se non fosse pre-installato nella propria distribuzione GNU/Linux, basta aprire un terminale e, a seconda, digitare il comando specifico per la distro o derivata:
Fedora | Debian | Arch |
---|---|---|
sudo dnf -y install vim | sudo apt -y install vim | sudo pacman -S vim |
Vim, o Vi IMproved, è un editor di testo libero e multipiattaforma, nato per fornire una versione migliorata di Vi.
La sua prima versione è stata scritta nel 1991 da Bram Moolenaar. Attualmente è molto diffuso tra programmatori ed utenti di sistemi operativi unix-like.
Da Vi mantiene la caratteristica di essere modale, ovvero di avere modalità diverse nelle quali i normali caratteri della tastiera hanno significato di inserimento testo o di comandi. In questo modo, è possibile usarlo senza far uso del mouse, permettendo una velocità maggiore di scrittura, a prezzo di maggiore difficoltà di apprendimento da parte di nuovi utenti. La tastiera non è così solo uno strumento per digitare testo, ma anche uno strumento per impartire comandi.
Vim ha quindi tre modalità:
- Command mode: quando si avvia Vim, ci si trova in modalità di comando. In questa modalità è possibile spostarsi sullo schermo, eliminare e copiare del testo, ma non possibile scrivere testo;
- Insert mode: per inserire del testo in un file, esiste una modalità di inserimento dedicata, chiamata appunto insert mode;
- Visual mode: permette di utilizzare i tasti freccia per selezionare il testo su più righe (invece di lavorare direttamente su parole e righe in base alla posizione del cursore, come nella insert mode).
Uno dei vantaggi di avere una modalità comando distinta dall'inserimento del testo vero e proprio risiede nel fatto che più operazioni di modifica possono essere fatte mediante una sola riga della tastiera senza dover premere contemporaneamente i tasti Alt, Ctrl o altri modificatori, cosa che riduce il numero di tasti da premere.
Aprire un terminale e digitare il seguente comando:
vim
Per visualizzare tutti i file presenti in una cartella, digitare:
vim .
È possibile aprire direttamente un file tramite Vim:
vim {file}
Vim è un editor ricco di funzionalità, quindi ricordarle tutte è molto difficile, almeno inizialmente. Ma non c'è motivo di preoccuparsi: si può sempre chiedere aiuto. Fortunatamente questo aiuto è fornito da Vim stesso.
Il manuale di aiuto viene fornito con l'editor stesso ed è davvero completo. Per accedere alla guida, eseguire il comando seguente:
:help
Vediamo ora alcuni comandi di base per spostarsi tra le varie modalità dell'editor.
I | Entrare nella Insert mode |
ESC | Uscire da qualsiasi modalità |
v | Entrare nella Visual mode |
: | Entrare nella Command mode |
Ci sono diversi modi per entrare in modalità inserimento. Elenchiamo quelli principali.
I | Modalità inserimento, porta il cursore ad inizio riga |
a | Modalità inserimento dopo l'ultima lettera, pronto per scrivere |
A | Modalità inserimento, porta il cursore alla fine della riga |
o | Modalità inserimento, crea una nuova riga dopo la riga corrente |
O | Modalità inserimento, crea una nuova riga prima della riga corrente |
h | Spostare il cursore verso sinistra |
j | Spostare il cursore verso il basso |
k | Spostare il cursore verso l'alto |
l | Spostare il cursore verso destra |
SHIFT+G | Sposta il cursore alla fine del file |
]] | Sposta il cursore alla fine del file |
gg | Sposta il cursore all'inizio del file |
[[ | Sposta il cursore all'inizio del file |
w | Sposta il cursore alla parola successiva |
b | (before) Sposta il cursore alla parola precedente |
e | (end) Sposta il cursore al termine della parola successiva |
$ | Sposta il cursore a fine riga |
0 | Sposta il cursore a inizio riga |
^ | Sposta il cursore a inizio riga, senza contare eventuali spazi |
( | Sposta il cursore all'inizio della frase |
) | Sposta il cursore alla fine della frase |
{ | Sposta il cursore all'inizio del paragrafo |
} | Sposta il cursore alla fine del paragrafo |
H | Sposta il cursore alla prima riga del viewport |
M | Sposta il cursore alla metà del viewport |
L | Sposta il cursore alla fine del viewport |
nG | Sposta il cursore alla n-esima riga |
nw | Sposta il cursore alla n-esima parola successiva |
e | Sposta il cursore al termine di una parola |
b | Sposta il cursore all’inizio della parola |
:nriga | Sposta il cursore alla riga indicata |
^o | Sposta il cursore alla posizione precedente |
^i | Sposta il cursore alla posizione successiva (rispetto alla precedente) |
Ecco la lista dei comandi base per salvare il documento ed uscire da Vim.
:w | Salva il file |
:q! | Esce da Vim, ma senza salvare il file |
:wq | Salva il file ed esce da Vim |
Durante la scrittura, ricercare del testo è fondamentale. In Vim può essere fatto molto semplicemente.
/{parola} | Spostare il cursore alla prima occorrenza della parola |
?{parola} | Spostare il cursore all'ultima occorrenza della parola |
f{lettera} | Spostare il cursore sulla lettera ricercata nella riga |
t{lettera} | Spostare il cursore prima della lettera ricercata |
Se fosse presente più di una corrispondenza, è possibile passare alla parola successiva premendo il tasto n oppure alla precedente premendo il tasto N.
Suggerimento: l'opzione \c esegue una ricerca senza distinzione tra maiuscole e minuscole.
Esempio: /\cLa_mia_ricerca
:%s/foo/bar/g | Sostituisce tutte le ricorrenze di 'foo' con 'bar'. L'opzione 'g' alla fine è responsabile della sostituzione di tutte le corrispondenze trovate. In caso contrario, verrebbe sostituita solo la prima corrispondenza |
:s/foo/bar/g | Eseguirà esattamente la stessa funzione di cui sopra, ma solo nella riga corrente anziché nell'intero file |
:%s/foo/bar/gci | Per impostazione predefinita, la ricerca fa distinzione tra maiuscole e minuscole. Per non fare distinzione, si può usare il flag 'i' insieme a 'g'. Con l'opzione 'c' viene richiesta la conferma, al fine di evitare sostituzioni indesiderate |
:7,$s/foo/bar/g | Sostituisce tutte le ricorrenze di ’foo’ con ’bar’, dalla settima riga alla fine del file |
:7,30s/foo/bar/g | Sostituisce tutte le ricorrenze di ’foo’ con ’bar’, dalla settima riga alla trentesima |
Con l'opzione conferma, verranno presentate la seguenti opzioni:
- y: SÌ, sostituisci questa corrispondenza;
- n: NO, non sostituire questa corrispondenza e passa a quella successiva;
- a: Sostituisci TUTTE le corrispondenze;
- q: ESCI senza sostituire alcuna corrispondenza;
- l: Sostituisci questa corrispondenza ed esci, come se fosse l'ULTIMA corrispondenza;
- ^E: Scorri lo schermo verso l'alto;
- ^Y: Scorri lo schermo verso il basso;
In Vim, buona pratica è non cancellare il testo in modalità inserimento, come si farebbe con qualsiasi editor, ma operare in Normal mode, sempre per aumentare la velocità di esecuzione.
u | Annulla la modifica |
^r | Ripristino della modifica |
x | Cancella il carattere singolo su cui si trova il cursore |
X | Elimina il carattere prima della posizione corrente del cursore, come il tasto backspace |
d | Cancella la parte di testo evidenziata |
dw | Delete word, dalla posizione del cursore |
daw | Delete a word. Cancella un'intera parola, indipendentemente dalla posizione del cursore |
diw | Delete inner word. Cancella un'intera parola |
cw | Change word (in automatico, cancella la parola ed entra in Insert mode) |
di" | Delete inner (dentro) "" o qualsiasi delimitatore venga specificato |
ci" | Change inner "". Elimina il contenuto ed entra in Insert mode |
dd | Cancella un'intera riga |
D | Cancella un'intera riga dalla posizione del cursore |
dit | Delete inner tag (come i tag html) |
cit | Change inner tag (ed entra in Insert Mode) |
das | Delete a sentence (cancella una frase intera) |
dap | Cancella un paragrafo intero |
d0 | Cancella dalla posizione corrente del cursore a inizio riga |
d$ | Cancella dalla posizione corrente del cursore a fine riga |
dG | Cancella dalla posizione corrente del cursore fino alla fine del file |
d/parola | Cancella dalla posizione del cursore alla parola |
yy | Copia un'intera riga |
yw | Copia una parola |
y$ | Copia dalla posizione corrente del cursore fino alla fine della riga |
yG | Copia dalla posizione corrente del cursore fino alla fine del file |
p | Paste. Incolla il contenuto del buffer dopo la posizione del cursore (il contenuto cancellato resta in memoria e può essere incollato) |
P | Incolla il contenuto del buffer dopo la posizione del cursore |
r | Replace. Sostituisce una singola lettera, tornando immediatamente in Normal mode |
Semplice e immediato è trasformare il testo in maiuscolo o minuscolo.
guw | Parola in minuscolo |
gUw | Parola in maiuscolo |
gUU | Tutta la riga in maiuscolo |
guu | Tutta la riga in minuscolo |
v | Seleziona carattere per carattere |
V | Seleziona un'intera riga |
SHIFT+J | Unisce più righe selezionate |
q{lettera} | Ha inizio la registrazione della macro. Es.: qa - tutti i comandi digitati successivamente saranno registrati. Nell'esempio seguente, "a" è il nome della macro. In questo passaggio è possibile eseguire qualsiasi azione di Vim. Si possono vedere queste azioni eseguendo il comando: :registers |
q | Termine della macro |
@{lettera} | Viene eseguita la macro |
vim -x file.txt | Da terminale, crea un file, specificando una password di cifratura |
:X | Cambiare la password. Se il campo viene lasciato vuoto, anche nella conferma, la password viene cancellata e il file non è più cifrato |
:set cm=blowfish2 | Livello di cifratura massima disponibile |
set cm=blowfish2 | Per rendere il massimo livello di cifratura come parametro di default, creare o modificare il file.vimrc, all'interno della home directory, con la precedente istruzione |
no | Crea n righe contemporaneamente |
CTRL+a | Aumenta di un'unità il primo numero di una riga |
. | Ripete l'ultima azione eseguita (o comando) |
:set number | Indicazione numero riga |
:set nonumber | Numero riga non visibile |
n+comando | Il comando viene ripetuto n volte |
>> | Tabulazione a destra |
<< | Tabulazione a sinistra |
:!command | Esegue un singolo comando. Ad esempio: :!pwd |
:shell | Il comando darà accesso al terminale, dove si potranno eseguire più comandi. Digitare il comando exit per tornare alla sessione di Vim |
La prima cosa da sapere è come attivare il controllo ortografico o spellcheck.
In command line, digitare:
:set spell spelllang=it
È possibile attivare più lingue contemporaneamente:
:set spell spelllang=it,en_US
In tal modo il sistema di correzione rileverà gli errori nella lingua italiana ed anche in quella inglese (americana), non evidenziando come errate le parole in inglese.
Il controllo ortografico è comodo, ma a volte è piacevole poterlo disattivare ed attivare velocemente.
:set spell
per attivare il controllo ortografico
:set no spell
per disattivalo.
Nota a margine: in molti casi il modo per attivare o disattivare un comando in Vim è quello di anteporre al comando stesso il termine chiave no.
[s | Sposta il cursore alla prima parola errata a sinistra |
s] | Sposta il cursore alla prima parola errata a destra |
Per parola errata Vim considera sia gli errori di scrittura (una parola che non viene trovata nel vocabolario italiano di Vim) sia errori sintattici (che Vim visualizza in blu), come ad esempio una parola che, all’inizio di un nuovo periodo, non inizia con la maiuscola.
La variante di questo comando più specifica, permette di passare solo tra le parole sbagliate (quelle che non vengono trovate nel vocabolario di Vim) è [S e ]S.
Per correggere la parola errata basta digitare:
z=
Comparirà ora una schermata con le possibili parole corrette; a tali parole sarà anteposto un numero. Sarà quindi sufficiente digitare il numero della parola corretta, premere invio e Vim procederà a sostituirla.
Può capitare, e spesso capita, che una determinata parola, casomai specialistica della nostra materia, venga visualizzata da Vim come errore perché non presente nel vocabolario.
Nessun problema, possiamo inserire una parola nel nostro vocabolario, posizionandoci su di essa e digitando zg
Se volete inserire velocemente una parola nel vocabolario:
:spe {parola da aggiungere}
Se volete che una parola risulti come non corretta basterà digitare: zw (w sta per wrong, sbagliato).
Se volete inserire velocemente una parola come errata:
:spellw {parola da aggiungere}
Sulla parola errata digitare:
^X quindi s
Si aprirà un menù a finestra con le possibili parole corrette. Per scegliere dal menù a tendina usate la combinazione di tasti CTRL+N (next) oppure CTRL+P (previous).
Digitando CTRL+X, in insert mode, si accede a molto di più del sistema di correzione degli errori. È possibile procedere all'auto-completamento delle parole che si stanno digitando.
Dopo aver digitato CTRL+X, invece di s è possibile digitare:
- CTRL+L, per il completamento dell’intera linea (completa con frasi simili a quelle scritte precedentemente; utile se si è un programmatore);
- CTRL+N, per il completamento con parole del documento (utile soprattutto per nomi o parole complesse che si usano abbondantemente nel file);
- CTRL+K, per il completamento con parole del dizionario.
Vim è un editor molto potente. Supporta molte funzionalità avanzate per lavorare con più file, buffer e finestre. In questa sezione, discuteremo i seguenti elementi:
- più file;
- buffer multipli;
- schede multiple;
- finestre multiple
:e | Carica un nuovo file nel buffer per la modifica |
:e tab | Elenca i file per la modifica dalla directory corrente |
Il buffer è la memoria temporanea usata da Vim per contenere il testo letto da un file. Una volta terminata la modifica e salvato il file, allora il contenuto del buffer viene trasferito nel file appropriato.
È possibile utilizzare i buffer per lavorare con più file.
:badd {file} | Aggiunge il file in un nuovo buffer |
:bN | Passa all'ennesimo buffer. Ad esempio, per passare al terzo buffer: b3 |
:bnext | Passa al buffer successivo |
:bprevious | Passa al buffer precedente |
:buffers | Elenca tutti i buffer |
:blast | Passa all'ultimo buffer |
:tabnew | Apre una nuova scheda |
:tabnew {file} | Apre un file in una nuova scheda |
:tabclose | Chiudi la scheda attuale |
:tabnext | Passa alla scheda successiva |
:tabprevious | Passa alla scheda precedente |
:tabfirst | Passa alla prima scheda |
:tablast | Passa all'ultima scheda |
:new | Apre una nuova finestra |
:new {file} | Apre un file in una nuova finestra |
:vnew | Apre una nuova finestra verticalmente |
A volte può tornar utile cambiare la dimensione di una finestra.
:resize {new size} | Modifica le dimensioni della finestra attualmente attiva. Ad esempio: :resize 30 |
:vertical resize {new size} | Modifica le dimensioni della finestra verticale |
Ctrl+w poi + | Aumenta le dimensioni della finestra |
Ctrl+w poi - | Diminuisce la dimensione della finestra |
Ctrl+w poi = | Imposta una dimensione uguale a tutte le finestre |
Ctrl+w poi o | Chiude tutte le finestre, eccetto quella attiva |
Ctrl+w poi h | Sposta il focus sulla finestra a sinistra |
Ctrl+w poi l | Sposta il focus sulla finestra a destra |
Ctrl+w poi k | Sposta il focus sulla finestra in alto |
Ctrl+w poi j | Sposta il focus sulla finestra in basso |
Un altra caratteristica di Vim, che molto aiuta nella scrittura del codice, è l'autoidentazione di un intero file. È possibile abilitare l'identazione automatica con il comando:
:set autoindentOppure scrivere tutto il codice per poi identarlo tutto in una volta con il comando:
gg=GUn modo ulteriore per identare un testo in visual mode è il comando:
=Il comando:
gq si occupa di identare automaticamente i commenti.Un articolo a parte sarà dedicato ai plugin e alla loro installazione, alla personalizzazione di Vim, sia tramite temi che modificando il file .vimrc.
##Questo sito non fa uso di cookie e non registra dati personali degli utenti.
Tutti gli articoli sono senza affiliazioni e senza pubblicità.
##Contatti
Realizzato con
da PicciHud