VI (visual editor) è il più importante e diffuso programma di editing dei file nell’ambiente UNIX e LINUX, in quanto possiede delle funzionalità che se utilizzate a fondo ne fanno uno strumento incredibilmente potente.

Per procedere all’editazione di un file basta digitare il comando “vi” seguito, o dal nome di un file già esistente nel caso in cui lo si voglia modificare, oppure dal nome di un nuovo file nel caso lo si voglia creare.

Nel momento in cui si procede all’editazione di un testo nell’ultima riga vengono sempre visualizzate le informazioni sul file aperto, come il numero di righe e di caratteri, il resto dell’area è destinata all’immissione dei comandi.

Se le righe non sono sufficienti a coprire tutta la porzione dello schermo a disposizione ne resteranno di vuote contrassegnate dalla tipica “~”.
Questo editor possiede 3 diverse modalità di funzionamento in cui si svolgono azioni differenti:

Modalità d’inserimento o di input
Questo tipo di modalità fa riferimento alle azioni che consentono di modificare e aggiungere del testo. Una volta editato un file si accede a questa modalità con vari comandi, tra cui il tasto “i” che inserisce i caratteri prima del punto in cui è posizionato il cursore o “a” che invece inserisce i caratteri dopo il punto in cui è posizionato il cursore.

Modalità di comando visiva
La modalità di comando visiva permette di utilizzare una serie particolare di comandi ed è quella attivata di default. All’interno di questa modalità i comandi inseriti si riferiscono alla riga su cui è posizionato il cursore. Per passare alla modalità visuale da quella di inserimento, è sufficiente premere il tasto Esc.

Modalità di comando due punti
La terza e ultima modalità è quella che consente di utilizzare i comandi del salvataggio o dell’uscita dal programma. Per utilizzare questa modalità ed i conseguenti comandi premere “:” seguiti dal comando. In questo caso il cursore viene posizionato sull’ultima riga.

$ vi [file] Apre il file con VI
$ vi [+n][file] Apre il file con VI alla riga corrispondente al numero

Se non si specifica il nome del file VI apre una sessione nuova.

Conoscere vi con vimtutor

Per chi non lo conosce o chi ne usa solo una minima parte delle enormi possibilità, esiste un comodo e interessante strumento per approfondire e fare pratica con vi: Vimtutor.

E’ un semplice ed ingegnoso comando, che apre una finestra di vi contenente un testo di spiegazioni e tutorial, che accompagna l’utente ad esplorare e conoscere vi, con prove pratiche eseguite direttamente sul testo.
Il testo del tutorial  disponibile in molti linguaggi e per sceglirli, basta definirli come argomento: 

$ vimtutor it

Il tutorial è adatto a chi si avvicina per la prima volta a vi e a chi lo usa già, ma non ne sfrutta le enormi e comodo potenzialità. Il vantaggio di un simile approccio didattico supera ogni possibile testo scritto, come questi:
vi si impara usandolo e impratichendosi con i suoi comandi e un tutorial “live” è il mezzo in assoluto migliore per conoscere vi.

Inserimento testo con VI

i Inserisce testo prima del cursore
a Aggiunge testo dopo il cursore
A Aggiunge testo alla fine della riga
I Aggiunge testo all'inizio della riga
o Aggiunge una riga prima del cursore
O Aggiunge una riga dopo il cursore
ESC Esce dalla modalità di inserimento
BACKSPACE Si sposta indietro di un carattere

Esistono vari comandi per inserire testo con VI.
La loro differenza fondamentalmente è su DOVE viene inserito il nuovo testo.

Modifica e cancellazione del testo

Ecco alcuni dei comandi più comuni per modificare il testo di un file

cw Cancella la parola sotto il cursore ed entra in modalità inserimento.
dw Cancella una parola sotto il cursore.
cc Cancella l'intera riga sotto il cursore ed entra in modalità inserimento.
dd :d Cancella la riga corrente (sotto il cursore).
:dn Cancella n righe, a partire da quella corrente.
n cc Cancella n righe e si mette in modalità inserimento.

Utilizzare i buffer in vi

Vi offre la possibilità di utilizzare una serie di buffer per memorizzare parti di testo.

Chiunque abbia un po di dimestichezza con vi, sa che copiando una riga con l’istruzione yy questa viene memorizzata in un buffer di default. Non tutti sanno invece che vi non possiede soltanto il buffer di default ma altri 26 buffer ognuno dei quali è associato ad una lettera dell’alfabeto. Per utilizzare il buffer associato alla lettera ‘a’, per esempio, dobbiamo riferirci ad esso con il comando “a:

ayy copia la linea corrente nel buffer a
ap incolla il contenuto del buffer a sotto la riga corrente
a4yy copia 4 linee, a partire da quella corrente, nel buffer a
a2p incolla 2 copie del buffer a sotto la riga corrente
add cancella la riga corrente e la copia nel buffer a

Se ci riferiamo ad un buffer con la lettera minuscola il contenuto del buffer viene sostituito mentre se ci riferiamo ad un buffer con la lettera maiuscola il contenuto viene aggiunto a quello già presente nel buffer:

Ayy aggiunge la riga corrente al buffer a
A3dd cancella 3 righe, a partire da quella corrente, e le aggiunge al buffer a

Il contenuto dei buffer viene mantenuto anche quando passiamo da un file all’altro in una stessa sessione di vi con i comandi ex:

$ vi [file1] edita il file1
"b4yy copia 4 linee nel buffer a
:e [file2] passa a editare il file2
"ap copia le 4 linee del file1 nel file2

Multi Editing con vi

In vi è possibile editare più file contemporaneamente ed utilizzare i comandi ex per spostarsi da un testo all’altro.

Il comando: vi [file1] [file2] aprirà inizialmente il file1, tramite il comando :n passiamo a editare il file2; se sono state apportate delle modifiche al file che stiamo editando che non sono state salvate, vi non permetterà di passare da un file ad un’altro, a meno di non forzare il comando aggiungendo alla fine un punto esclamativo :n!; ovviamente in questo caso andranno perdute tutte le modifiche effettuate.

E’ possibile anche utilizzare il comando  vi * per editare tutti i file di una directory; in questo caso è molto utile i l comando :f che restituisce il nome del file che stiamo editando, oppure il comando :args che restituisce la lista completa dei file aperti mettendo delle parentesi quadre attorno al file [corrente]
E’ possibile inoltre passare ad un file che non è stato specificato nella riga di comando tramite la direttiva: :e [nomefile].

Vi associa il carattere # al file precedentemente editato, e il carattere % al file editato correntemente; quindi per tornare all’ultimo file editato è possibile utilizzare il comando: :e#

Qualora si voglia ad esempio salvare il file corrente con lo stesso nome ma con un’estensione .new, si utilizzerà il comando: :w %.new. Per tornare al primo file editato  si utilizza il comando: :rew .

VIM Syntax Highlighting

Per il programmatore, ma anche per l’amministratore di sistema il quale si trova ad editare script shell e file di configurazione, la sintassi colorata dell’editor di testo permette di indivudare a colpo d’occhio le sezioni del file che interessano, nonche’ parole chiave e variabili d’ambiente.

In VIM, se si desidera abilitare la Syntax Highlighting solo per la sessione corrente, è possibile utilizzare il comando :syntax on e utilizzare :syntax off per disabilitarla, :syntax clear per disabiltarlo momentaneamente.
Nel caso in cui si desideri utilizzare la sintassi colorata sempre, per il proprio utente, è possibile inserire syntax enable nel file .vimrc nella propria home directory:

homer@Joker:~$ echo "syntax on" >> /homer/.vimrc
homer@Joker:~$ cat .vimrc
syntax enable

Il file in questione verrà letto ad ogni avvio di VIM.

Editing visuale con VI

Una caratteristica che di solito gli utenti recriminano a VI è la possibilità di effettuare selezioni che non siano solo linee intere…

Anche con vi è possibile fare selezioni come con gli editor moderni, basta avere una delle varianti “moderne” di VI: vim-enhanced (presente praticamente in tutte le distribuzioni).

Per verificare quale versione avete potete utilizzare il comando which:
$ which vi
/bin/vi
una volta ottenuta l'informazione potete controllare con ls -la se avete l'originale o una versione "evoluta":

$ ls -la /bin/vi
lrwxrwxrwx  1 root root 21 apr  9 12:09 vi -> /usr/bin/vim-enhanced*

Questa ad esempio è una versione evoluta, come dice il nome, allora si può utilizzare il tasto:
v   che consente di marcare l'inizio di un blocco di testo. A questo punto si possono usare i tasti freccia (oppure h,j,k,l) per muoversi evidenziando il testo interessato.

In sintesi:  v + TASTI FRECCIA
  Una volta terminata la selezione basterà premere x per tagliare la selezione
oppure
y per copiarla 
p per incollarla.

Ricerche con VI

Alcuni dei comandi di ricerca utilizzabili su VI

stringa Ricerca la stringa stringa in avanti
? stringa Ricerca la stringa stringa all'indietro
/ Ripete l'ultima ricerca in avanti
? Ripete l'ultima ricerca all'indietro
n Ripete l'ultima ricerca
x Si sposta avanti fino al carattere x sulla riga corrente
stringa /+n Si sposta all'nesima riga dopo la stringa stringa

Salvare i dati

Il salvataggio dei dati modificati con VI comprende anche l’aggiornamento della data/ora di modifica.
Ecco alcuni dei comandi più comuni:

zz Esce da VI scrivendo solo se sono state apportate modifiche al file
:x Come zz
:wq Salva ed esce
:w Salva
:w file Salva una copia nel file file
:q Esce
:q! Forza l'uscita anche se non sono state salvate le modifiche fatte (che vengono perse).

Salvataggi parziali in vi

A volte puo essere utile salvare solo una parte del file che stiamo editando.

:10,20w [nuovoFile] salva il testo compreso tra la riga 10 e la riga 20 su un nuovo file
:.,10w [nuovoFile]  salva il testo compreso tra la prima riga e la riga 10 su un nuovo file
:10,$w [nuovoFile]  salva il testo compreso tra la riga 10 e la file del testo su un nuovo file.

Volendo salvare una parte del file che stiamo editando sul file stesso è possibile utilizzare il comando:
:10,20w! salva il testo compreso tra la riga 10 e la riga 20 sullo stesso file

Da notare che quest’ultimo comando è fuorviante in quanto non viene aggiornato il testo che stiamo editando, anche se a tutti gli effetti è stato cambiato. Per visualizzare la versione attualmente salvata dobbiamo usare il comando :e!.

Sintetizzando Quindi:

Vi è un editor testuale che è stato sviluppato per i sistemi Unix e che viene spesso utilizzato su sistemi Linux e macOS. Vi è un editor di linea di comando molto potente che offre molte funzionalità per la modifica di file di testo.

Ecco alcuni dei comandi più importanti di Vi:

  • Per aprire un file in Vi, digitare il comando “vi” seguito dal nome del file.
  • Vi ha due modi di lavoro: il “modalità di inserimento” e la “modalità di comando”. Per inserire testo nel file, è necessario essere nella modalità di inserimento, che si attiva premendo il tasto “i” (inserisci). Per uscire dalla modalità di inserimento e tornare alla modalità di comando, basta premere il tasto “Esc”.
  • Per salvare le modifiche apportate al file, digitare il comando “:w” (write). Per salvare e uscire, digitare il comando “:wq”. Per uscire senza salvare le modifiche, digitare il comando “:q!”.
  • Per cancellare un carattere, posizionare il cursore sul carattere e premere il tasto “x”. Per cancellare una riga intera, premere il tasto “dd”.
  • Per spostarsi all’inizio della riga, premere il tasto “^”. Per spostarsi alla fine della riga, premere il tasto “$”.
  • Per cercare una parola nel testo, digitare il comando “/parola” seguito da Invio. Per passare alla prossima occorrenza della parola cercata, premere il tasto “n”.
  • Per copiare una riga, posizionare il cursore sulla riga e digitare il comando “yy”. Per incollare la riga copiata, posizionare il cursore dove si desidera inserire la riga e digitare il comando “p”.

Questi sono solo alcuni dei comandi di Vi. Vi è un editor molto potente, con molte funzionalità avanzate. Tuttavia, la sua interfaccia utente può risultare poco intuitiva per alcuni utenti, quindi può richiedere un po’ di tempo per abituarsi all’utilizzo di Vi.

Banner per il consenso ai cookie di Real Cookie Banner