Vim: lavorare con file multipli

1

Qualche tempo fa vi abbiamo già parlato di metodi per rendere più rapido e comodo l’uso di Vim. Questo editor di testo, seppur all’apparenza molto semplice, permette veramente di fare tantissime cose, scrivere macro, customizzarsi gli shortcut ed, a dispetto di quanto può sembrare, è anche molto comodo per lavorare con file multipli.

In questo articolo andremo ad esplorare proprio le basi del lavoro con più file, vedremo come suddividere la nostra area di lavoro in più sezioni e spostarci tra di esse, così come iniziare a lavorare con i tab. Scopriremo che spesso non ci serve neanche uscire dal nostro amato editor e che, anzi, aprire file senza chiudere la sessione è estremamente utile.

Preparazione dell’ambiente di test e nozioni di base
Per primissima cosa prepariamoci un ambiente di test. Questo può non essere necessario se avete già una directory contenente multipli file da editare, ma nel caso basta che vi spostiate in una directory temporanea e lanciate:

$ for i in $(seq 1 4); do \
> for y in $(seq 1 $i); do \
> echo "file${i}.txt, riga numero ${y}" >> file${i}.txt ; \
> [ $y -ge $i ] && break; \
> done ; \ 
> done
$ ls
file1.txt file2.txt file3.txt file4.txt

Quello che dobbiamo tenere a mente è il metodo classico di spostamento del cursore all’interno di Vim. Seppur oramai le frecce direzionali siano supportate ovunque, bisogna ricordarsi che quando Vim è nato non era così comune avere questi quattro e comodi tasti sulle tastiere e che, quindi, il movimento del cursore avveniva con quattro altri tasti che comunemente usiamo:

  • h: sposta il cursore a sinistra di un carattere
  • j: sposta il cursore in basso di un carattere
  • k: sposta il cursore in alto di un carattere
  • l: sposta il cursore a destra di un carattere

Questi movimenti sono disponibili quando si è in modalità comando, quindi ricordatevi che un Esc prima di utilizzarli vi eviterà di sporcare il testo.

Se pensate che questo metodo di spostamento del cursore sia legato al passato, vi posso dire per esperienza che una volta appreso risulta estremamente più rapido che spostare la mano dalle lettere per raggiungere le frecce direzionali 😉

Inoltre, conoscere questi movimenti viene comodo nel momento in cui si andrà a lavorare con i file multipli.

Split screen
Ci sono diversi modi per affiancare due terminali sui sistemi Unix, da Tmux a Terminator, fino a soluzioni dedicate per specifici software di terminali.

Il limite di queste soluzioni, nel momento in cui si lavora con Vim, è il fatto che le due sessioni di editor del testo si “ignorano” a vicenda, quindi la possibilità di copiare e incollare (ad esempio) righe di testo da un file all’altro risulta demandata alla clipboard di sistema.

Vim permette di lavorare con lo split screen all’interno della sessione, utilizzando i comandi:

  • :vnew nomefile: apre il file indicato suddividendo lo schermo verticalmente
  • :new nomefile: apre il file indicato suddividendo lo schermo orizzontalmente

Per salvare ed uscire dal file appena aperto basta utilizzare il classico :wq o la combinazione Shift+ZZ.

Potrebbe anche essere che decidiate direttamente di aprire più di un file già in modalità split; in tal caso vengono comode le due opzioni:

  • vim -o file1.txt file2.txt: apre i file indicati suddividendo la schermata orizzontalmente
  • vim -O file1.txt file2.txt: apre i file indicati suddividendo la schermata verticalmente

Ottimo, adesso però può essere interessante capire come muoversi tra una sezione e l’altra, questo è molto semplice ricordandosi i famosi tasti per lo spostamento del cursore. Infatti lo spostamento avviene premendo la combinazione di tasti Ctrl+w seguita dalla lettera relativa alla direzione in cui si vuole andare:

  • Ctrl+w h: sposta il cursore nell’area a sinistra di quella attiva
  • Ctrl+w j: sposta il cursore nell’area sottostante a quella attiva
  • Ctrl+w k: sposta il cursore nell’area sovrastante a quella attiva
  • Ctrl+w l: sposta il cursore nell’area a destra di quella attiva

Personalmente non trovo queste combinazioni particolarmente comode, ma come dicevamo all’inizio Vim è particolarmente configurabile e nulla ci vieta di impostare i nostri shortcut per questi movimenti. Io, ad esempio, utilizzo direttamente la combinazione di Ctrl e della lettera di movimento per spostarmi da un area all’altra. Per ottenere questo comportamento ci basterà configurare le seguenti righe all’interno del file .vimrc nella vostra home:

" Uso Ctrl+h al posto di Ctrl+w h
map <c-h> <c-w>h
" Uso Ctrl-j al posto di Ctrl+w j
map <c-j> <c-w>j
" Uso Ctrl+k al posto di Ctrl+w k
map <c-k> <c-w>k
" Uso Ctrl+l al posto di Ctrl+w l
map <c-l> <c-w>l

L’uso dello split screen viene molto comodo nel momento in cui desideriamo ad esempio, prendere righe da un file e metterle in un altro, il tutto utilizzando le consuete combinazioni di tasti di vi (dd per tagliare, yy per copiare, etc.):

Tab
Un altra opzione per lavorare con file multipli è quella di utilizzare le tab. Le tab sono schermate totalmente separate che possono contenere uno o più buffer. Esatto, è possibile all’interno di una tab, andare a splittare lo schermo così come abbiamo visto precedentemente.

Per aprire un file in una nuova tab è possibile utilizzare il comando :tabe nomefile. Uscire da un tab è possibile sempre tramite la solita combinazione :q. Nel caso sappiate subito di dover lavorare con più tab è possibile lanciare Vim con l’opzione -p e la lista di file per aprirli ognuno in una tab separata:

Anche in questo caso, se volessimo aprire Vim direttamente con più file già aperti nei tab è possibile lanciarlo usando vi -p nomefile1 nomefile2 … ed il nostro editor si avvierà già con i file aperti in tab differenti.

Per spostarsi da un tab all’altro, in modalità comando, è possibile utilizzare le seguenti combinazioni di tasti:

  • gt: selezione tab successivo
  • gT: selezione tab precedente

Nelle versioni degli ultimi anni di Vim è possibile utilizzare anche le combinazioni Ctrl+PageUp e Ctrl+PageDown per ottenere gli stessi risultati.

Ovviamente è possibile copiare/incollare testo tra file aperti in tab differenti, così come saltare direttamente ad uno specifico tab facendo precedere il numero della tab alle combinazioni gt e gT:

Conclusioni
Nonostante possa spaventare, Vim è un ottimo editor di testo e, vi garantisco, è solo questione di abitudine. Usandolo un pochino tutti i giorni, vedrete anche voi l’incredibile rapidità e comodità che l’uso approfondito di questo editor vi fornisce.

Utente Linux/Unix da più di 20 anni, cerco sempre di condividere il mio know-how; occasionalmente, litigo con lo sviluppatore di Postfix e risolvo piccoli bug in GNOME. Adoro tutto ciò che può essere automatizzato e reso dinamico, l’HA e l’universo container. Autore dal 2011, provo a condividere quei piccoli tips&tricks che migliorano il lavoro e la giornata.