Vim è un editor di testo molto famoso e spesso contrapposto all’altrettanto noto Emacs. La sua particolarità è quello di poter eseguire con la pressione di pochi tasti compiti anche molto complessi.

Una volta riusciti a padroneggiare a pieno l’editor, potrete ridurre l’attività di scrittura al minimo per aumentare il tempo per riflettere su ciò che volete effettivamente scrivere.

Visto che poi VIM è presente in tutti gli OS che seguono le specifiche POSIX, è davvero molto utile conoscere un editor di testo che possiamo ritrovare dappertutto.

In questo articolo andremo a dare un’ introduzione al funzionamento di VIM che, se all’ inizio può sembrare un pò ostico, dopo un pò potremo fare veramente cose fantastiche.

Ma prima: la storia in breve

Vi è un editor di testo con interfaccia testuale per Unix e BSD creato da Bram Moolenaar nel 1976 nel linguaggio C. Vi è stato l’editor di testo preferito dagli hackers (fino all’ uscita del “rivale” Emacs, contendente al titolo) ed è lo standard de facto degli editor dei sistemi Unix (tutti quelli che seguono le specifiche [fancy_link link=”https://en.wikipedia.org/wiki/Single_UNIX_Specification”]SUS[/fancy_link]).

Per lanciare Vim basta digitare "vim" da terminale.
Per lanciare Vim basta digitare vim oppure vi da terminale.

La prima versione di vi risale al  1976 per opera di Bill Joy, come modalità visuale dell’ editor di testo Ed. Il nome deriva proprio da “Visual”, la modalità a cui si poteva accedere da Ed.

Partendo da vi, sono uscite diverse versioni di questo editor: la più comune nei sistemi Linux è Vim, inizialmente acronimo di Vi iMitation ma poi diventato Vi iMproved. Se non lo avete installato nel vostro sistema, installatelo: questo perchè effettivamente vim è più facile e potente di vi.

Probabilmente se non conoscevi già questo editor di testo, non hai vissuto (come me del resto) la editor war. Poco male, gli editors si sono sviluppati e hanno raggiunto livelli che ci lasciano l’ imbarazzo della scelta. Ricordiamo comunque che vi (o vim) è un editor che sarà sempre disponibile in qualunque ambiente Unix-like.

L’ editor di testo

Ho già detto e ripetuto che vi è presente in tutti gli ambienti unix-like. Vorrei sottolineare come solo per questo motivo ci converrebbe se non utilizzare vim come editor di default, almeno conoscerlo. Questo perchè immaginatevi di dover risolvere un problema su un server o un computer linux di un vostro amico: anche se non potete installare altri editor di testo, vi sarà sempre lì pronto ad essere utilizzato.

Vediamo dunque questo editor di testo: tanto per cominciare, apriamo un terminale e digitiamo vi (o vim) per aprire la finestra.

vim nomefile.ext ci permette di aprire il file nomefile o di crearne uno nuovo.
vim nomefile.ext ci permette di aprire il file nomefile o di crearne uno nuovo.

Una volta dentro, ci accorgeremo subito della sua interfaccia piuttosto scarna: come abbiamo già detto l’ area di lavoro si focalizza sul testo da scrivere, tutto a meno dell’ ultima riga in basso che invece conterrà le istruzioni passate o che vogliamo passare al programma.

Interfaccia focalizzata sul testo.
Interfaccia focalizzata sul testo.

Comandi di Vim

Passiamo adesso ai comandi per usare Vim. Se appena aperto un file, hai provato ad immettere del testo avrai certamente notato con sorpresa di non essere riuscito nell’ impresa. Questo perchè, appena aperto, vim ci mette nella modalità comandi. Ovvero, andremo a scrivere nell’ ultima riga in basso.

Per tornare in qulasiasi momento a questa modalità, ci basterà premere il tasto ESC. Se abbiamo immesso un comando sbagliato e vogliamo cancellarlo, possiamo usare sempre ESC.

Entriamo in modalità di inserimento, per farlo premiamo sul tasto “i” ed et voilà: potremo finalmente cominciare a scrivere testo!

La modalità "Inserisci" è raggiungibile tramite "i" o "ins".
La modalità “Inserisci” è raggiungibile tramite “i” o “ins”.

Adesso, premiamo ESC per tornare alla modalità di inserimento dei comandi, e digitiamo:

  • : (duepunti) prima di inserire il/i comandi
  • w ed invio per salvare
  • q ed invio per chiudere il file

Nel caso in cui non vogliamo salvare le modifiche, dovremo utilizzare :q! per forzare l’uscita dall’ editor. Inoltre, possiamo scrivere inserire nello stesso comando :wq per salvare e chiudere il file insieme.

[note_box]Il comando w ci permette di salvare, q di chiudere il file ed e nomefile di aprire un file da dentro vim.[/note_box]

Una volta fatto ciò, utilizziamo python hello-world.py per stampare a video il nostro Hello, World.

Adesso, utilizziamo il comando vi (o vim) per avviare vim. Battiamo:

  • : (duepunti) per inserire il comando
  • e hello-world.py per riaprire il file da dentro Vim.

Vediamo ora qualcosa di veramente figo:

  • Premiamo i (o ins) per entrare in modalità di inserimento
  • Cancelliamo la riga dell’ Hello, World e inseriamo:
for x in range(10):
    print x

(Il print x è identato in avanti di 4 spazi)

Salviamo come abbiamo visto poco fa (:w) e invece di uscire, usiamo il comando:

:!python hello-world.py

Ed etvoilà! Abbiamo avviato il nostro programma senza uscire dall’ editor di testo! Basterà infatti premere su invio (o comunque terminare il programma) per tornare al nostro editor di testo.

Il trucco è il punto esclamativo che segue i due punti: questo dice a vim di eseguire il comando che segue dentro alla shell.

Facciamo qualcos’altro di fico: una funzione particolare di vim (e non presente in vi, almeno non in questo modo) sono le tabs: lanciamo il comando

:tabe hello-world.c

e premiamo invio. Adesso in alto nella finestra vedremo apparire i file che abbiamo aperto all’ interno di vim: hello-world.py e hello-world.c. Visto che ci siamo, vediamo come si può anche compilare un file c:

#include <stdio.h>
int main()
{
    printf("Hello, World");
    return 0;
}

Incolliamo questo all’ interno del file appena creato. Adesso, dopo aver premuto ESC, digitiamo:

:!gcc -o file %  && ./file

Questo comando avvia il compilatore gcc, e se la compilazione và a buon fine esegue il programma appena compilato. Utilizzando il simbolo della percentuale all’ interno del comando, significa che ci stiamo riferendo a “questo” file (quello da cui viene lanciato il comando).

Per tornare alla precedente tab di python, utilizziamo il comando:

  • :tabn, per la prossima (next)
  • :tabp, per la precedente (previous).

 

tabn e tabp per navigare fra le tabs.
tabn e tabp per navigare fra le tabs.

Adesso vediamo la funzionalità di ricerca. Molte delle utility di lettura di solito hanno questa funzione, e che anche in vim si richiama in un modo simile:

/keyword

Vediamo quindi un esempio, modifichiamo il contenuto del file con:

for x in range(10):
    print x
print "ciao"
print "ciao mondo"
print "questo vim è bellissimo"
print "ci sono due tabs"

Dopo essere ovviamente entrati in modalità scrittura utilizzando “i”. Adesso entriamo in modalità comandi, premiamo quindi esc e digitiamo:

/ci

Premuto invio,  ci darà alcuni risultati: per navigare possiamo utilizzare il tasto n (next) o p (previous).

vim-editor-testo

Ok: basta con questo python. Salviamo e usciamo dal file: per farlo, possiamo usare wq come abbiamo visto prima, oppure entrati in modalità comandi digitiamo :

:x

ed il tasto invio per salvare ed uscire dal file.x è uno shortcut per wq. Molti però ne sconsigliano l’utilizzo perchè durante la digitazione è possibile sbagliarsi ed usare la versione capitalizzata X che serve a criptare il file che stiamo editando.

Modalità comandi

Vim è pensato per essere utilizzato senza l’ausilio del mouse. Anche se le interfaccie grafiche rendono conocetti astratti meno astratti (“Scrivania”/desktop, “Cartella” ecc) abbiamo un certo drawback: ne risente la velocità di navigazione.

Ad esempio, in un editor di testo normale per cercare e sostituire qualcosa, avremmo dovuto:

  1. Togliere una mano dalla tastiera e metterla sul mouse
  2. Andare su modifica
  3. Cliccare su Cerca e sostituisci
  4. Inserire il carattere da cercare
  5. Inserire il carattere da sostituire
  6. Cliccare su invio.

Benchè alcuni di questi passaggi possono essere velocizzati con l’ausilio della tastiera (es: tab per passare da una textbox alla successiva ed invio per confermare il form) tutte queste operazioni hanno un costo in tempo che, grazie a vim, noi andremo a risparmiare.

[note_box]
Per cercare e sostituire, si usa il comando substitute (o più concisamente s):

:s/vecchio/nuovo

In questo mondo si sostituisce solo la prima occorrenza della parola nella riga puntata dal puntatore.
Usiamo:

:s/vecchio/nuovo/g

per sostituire tutte le occorrenze della parola nella riga, e

:%s/vecchio/nuovo/g

per sostituire tutte le occorrenze di tutte le parole in tutte le righe. Se vogliamo sostituire la parola solo in alcune righe, indichiamo il numero di inizio e di fine prima di s:

:0,10s/vecchio/nuovo/g

Così andrà a sostituire la parola “vecchio” con “nuovo” in tutte le prime 10 righe e tutte le occorrenze (per la g). La sintassi è simile a quella di sed.
[/note_box]

Quando siamo in modalità “Inserisci”, i caratteri corrispondono a se stessi. Se premo A, verrà stampato il carattere A. In modalità “comandi” invece, ogni lettera corrisponde ad un comando: questo è sempre per limitare le combinazioni di tasti che bisogna ricordarsi.

Ad esempio, normalmente negli editor di testo dovremmo premere ctrl-z per annullare una modifica. Su Vim, nella modalità comandi, ci basta premere il tasto u (undo).

Un cheatsheet completo lo trovate di seguito:

Vim cheatsheet. Clicca per ingrandire.
Vim cheatsheet. Clicca per ingrandire.

Don’t Panic!

Se avete bisogno di aiuto, potete come sempre chiederlo utilizzando il comando:

:help

Vim entrerà in modalità visualizzazione, e vi ritroverete alla pagina principale dell’ help contenente l’ indice di tutte le sezioni disponibili.

Per navigarci, vim ci suggerisce il nome dei file fra parentesi quadre. Ad esempio:

BASIC:
|quickref| Overview of the most common commands you will use
|tutor| 30 minutes training course for beginners
|copying| About copyrights
|iccf| Helping poor children in Uganda
|sponsor| Sponsor Vim development, become a registered Vim user
|www| Vim on the World Wide Web
|bugs| Where to send bug reports

Questa è la parte iniziale dell’ help. Per entrare dentro al tutor, digitiamo:

:help tutor

Da quì potremo seguire un training alle funzioni di vim.

Volete saperne di più?

Se ho stimolato un pò la vostra curiosità, vi invito ad approfondire l’argomento:[fancy_list style=”triangle_arrow”]

  • Un libro gratuito chiamato A byte of vim che con 89 pagine dà tutti gli strumenti necessari per utilizzare a pieno vim. Anche se questo articolo può essere un’ ottima introduzione, il libro approfondisce e mostra molti esempi utili a capire meglio le potenzialità dell’editor.
  • Altro ottimo libro gratuito, direttamente dall’ ftp di vim.
  • Date un’occhiata a questo Wiki.
  • Se preferite libri cartacei (e quindi a pagamento), vi consiglio il libro di O’Reilly
  • Fatevi una partita a Vim-Adventures per imparare i comandi di vim giocando.
  • Se preferite, potete imparare i comandi di VIM tramite questo tutorial interattivo.

[/fancy_list]Buon lavoro a tutti!