Gentoo Logo

Imparare vi con gli sheets

Indice:

1.  Cenni preliminari

Introduzione

Questa guida mostrerà l'uso di vi, il potente e famoso editor visuale, adottando uno speciale metodo accelerato di apprendimento a foglietti (lo stesso che molti hanno usato a scuola durante i compiti in classe! NdT). Essa è stata pensata per permettere a chiunque di diventare un abile utente di vi senza dover investire troppo tempo. Imparerete come sia possibile muoversi all'interno di un testo, come modificarlo correttamente, come gestire la modalità insert, come tagliare, copiare e incollare porzioni di testo, nonchè usare le notevoli estensioni di vim, quali il visual mode e il multi-window editing.

Sia che non lo conosciate affatto, oppure che lo conosciate in modo solo superficiale, vi merita senz'altro la lettura di questa guida e di passare velocemente all'azione con uno dei più diffusi e potenti programmi di editing visuale disponibili in ambienti Linux/UNIX.

La guida

C'è una particolarità che ostacola l'apprendimento di vi: il fatto che ha moltissimi comandi e, per poterlo usare con profitto, è necessario impararne a memoria alcuni, almeno i più importanti. Questo può richiedere, inizialmente, molto tempo e uno degli obiettivi di questa guida è di non assorbirne troppo. Ecco dunque la prima sfida da affrontare: come posso aiutarvi a memorizzare una sfilza di comandi in un breve periodo di tempo?

Per affrontare questa sfida inizieremo a scrivere i comandi di vi su un foglio, che sarà il primo della serie dei nostri foglietti, e che conterrà tutti i comandi importanti di vi. Dopo aver completato la guida potrete sempre far riferimento a queste note nel caso ne dimenticaste uno in particolare. Col tempo, man mano che memorizzerete i comandi, scoprirete di dipendere sempre meno dai "foglietti". Usando questa tecnica vi sorprenderete della rapidità con cui avrete appreso l'uso di vi!

Il processo di apprendimento

In questa guida userò tecniche diversificate per facilitare l'apprendimento. Prima di tutto descriverò come funziona un particolare comando, come forse vi aspettereste. Quindi vi chiederò di provare ad usare il comando in vi (per fare pratica) ed infine di trascrivere quel comando sul vostro foglietto (per poterlo consultare in seguito). Se volete imparare vi rapidamente, è importante che seguiate tutte e tre le fasi; provare le funzionalità del comando in vi e trascriverlo sul foglietto vi aiuterà a memorizzarlo.

Introduzione

Esistono molte versioni di vi e, nella guida, farò riferimento a quella nota come vim. vim è molto diffuso ed ha un buon numero di estensioni che rendono molto più piacevole l'uso di vi (ogniqualvolta mi riferirò ad un comando specifico di vim lo farò notare chiaramente). Se dovete installarlo, potete prelevarlo dal seguente indirizzo: www.vim.org; oltre alla versione in pura modalità testo, è distribuito anche nella versione gvim, un buon editor grafico che può essere configurato per l'uso delle eccellenti librerie GTK+. Se volete vedere uno screenshot di gvim installato sul mio sistema date un'occhiata qui:


Figura 1.1: VIM screenshot

Fig. 1: screenshot

Se siete dei neofiti di vi, provate ad installare gvim sul vostro sistema: usare vi attraverso un'interfaccia grafica potrebbe facilitarvi non poco la vita...

2.  Primi passi

Aprire un file

Prima di usare vi per modificare i file, dovete sapere come usarlo per muovervi all'interno di un testo. vi ha molti comandi che controllano il movimento, di cui ne vedremo alcuni tra poco. Per questa parte del tutorial, trovate un file poco importante sul quale iniziare le vostre sperimentazioni, ed apritelo con il comando:

Codice 2.1: Caricare un file con vi

$ vi miofile.txt

Se avete vim installato, digitate pure vim miofile.txt o, se preferite usare gvim, digitate gvim miofile.txt. miofile.txt sarà il nome del file di testo individuato.

Addentriamoci in vi

Dopo che vi ha caricato il file specificato, dovreste vedere una parte del testo sul vostro schermo. Congratulazioni: siete in vi! A differenza di molti altri editors, quando vi è stato avviato entra subito in una modalità speciale detta command mode (modalità comando). Ciò significa che se premete l sulla tastiera, invece di inserire una l all'interno del file nella posizione corrente del cursore, il cursore si muoverà di un carattere verso destra. In questa modalità operativa, i caratteri della tastiera sono usati per inviare comandi a vi piuttosto che per inserire caratteri nel testo. I comandi per il controllo del movimento del cursore sono senz'atro particolarmente utili; vediamone insieme alcuni.

3.  Muoversi all'interno di un testo

Muoversi in vi, prima parte

Quando siete in "command mode", potete usare i tasti h, j, k e l per muovere il cursore a sinistra, in basso, in alto e a destra rispettivamente. Se state usando una versione recente di vi, potete anche usare i quattro tasti freccia alla destra della tastiera. I tasti h,j,k e l sono utili perché, una volta che avrete acquistato familiarità con la loro funzione, sarete in grado di muovervi agevolmente all'interno del testo senza dover alzare le vostre dita dalla tastiera. Provate ad usare h,j,k e l (oppure i tasti freccia) per muovervi all'interno del file di testo. Provate ad usare h fino ad arrivare all'inizio della riga; potete notare che vi non gestisce il "wrap around" (NdT, funzionalità che permette di percorrere in modo continuo le righe di un testo) né in avanti né all'indietro.

Muoversi in vi, seconda parte

vi offre scorciatoie speciali per saltare a inizio o a fine riga. Verificate che potete premere 0 (zero) per saltare al primo carattere di una riga e $ all'ultimo. Dato che vi ha così tanti comandi di movimento, possiamo considerarlo un ottimo impaginatore (come i comandi "more" e "less"). Usare vi come impaginatore di testi potrebbe tornarvi utile anche per apprendere molto rapidamente i comandi di movimento.

Potete anche usare <CTR>F e <CTR>B per muovervi avanti e indietro di una pagina per volta. Le versioni recenti di vi (come vim) gestiscono anche l'uso degli equivalenti tasti PageUp e PageDown.

Spostarsi tra le parole, prima parte

vi permette anche di muoversi a sinistra o destra per parole. Per posizionarsi sul primo carattere della parola che segue, premete w. Per posizionarsi invece sull'ultimo carattere della parola che segue, premete e. Infine, per posizionarsi sul primo carattere della parola che precede, premete b. Vi invito a verificare.

Spostarsi tra le parole, seconda parte

Dopo ave giocato un po' con i comandi di movimento orientati alle parole, avrete senz'altro notato che vi considera parole tipo senza-tetto come 3 parole separate! Questo si spiega perché, di default, vi utilizza i caratteri di spaziatura o punteggiatura per delimitare le parole; senza-tetto è quindi considerato come la sequenza delle tre parole senza,- e tetto

Qualche volta è proprio quello che volete, altre volte no. Per fortuna vi possiede il concetto di "macroparola". vi delimita le macroparole solo con spazi o newlines. Ciò significa che mentre senza-tetto viene gestito come 3 parole, lo stesso termine è acquisito da vi come un'unica macroparola.

Spostarsi tra le parole, terza parte

Per saltare alle macroparole precedenti o successive, potete usare i comandi di spstamento tra le parole in lettere maiuscole. Quindi, W consente di saltare al primo carattere della macroparola successiva, E all'ultimo carattere della stessa e B al primo carattere della macroparola precedente. Provate, verificate e confrontate le differenze di movimento tra parole e macroparole finchè non le avrete comprese chiaramente.

Movimenti più ampi

Rimangono pochi altri comandi da esaminare prima di cominciare a trascriverli sul nostro "foglietto". I caratteri ( e ) ci posizionano all'inizio della frase precedente o successiva, ed i caratteri { e } ci posizionano all'inizio del paragrafo corrente o successivo.

4.  Uscire da vi

Abbiamo preso in esame i comandi basilari che gestiscono il movimento; ne rimangono ancora alcuni da conoscere e che sono d'uso frequente. Digitate :q ed uscirete dall'editor. Se per qualche ragione il comando non dovesse funzionare, molto probabilmente avrete modificato involontariamente il testo. Per forzare l'uscita, perdendo le modifiche fatte dall'ultimo salvataggio, digitate: :q!. A questo punto il controllo dovrebbe essere tornato alla shell.

In vi, ogni comando che inizia con il carattere : è detto ex-mode command per il fatto che vi contiene al suo interno un editor non-visuale chiamato appunto ex. Può essere usato in modo simile a "sed" per operazioni di modifica limitate alla riga su cui si trova il cursore. In più può essere usato per uscire da vi, come abbiamo appena visto. Se capita di premere il tasto Q mentre l'editor e in "command mode", si passa alla modalià "ex-mode" e ci si trova davanti il prompt ":". Per tornare alla modalità di editing visuale digitate vi seguito da Invio.

5.  Il mitico Foglietto

Il nostro primo "foglietto"

Abbiamo trattato un buon numero di comandi, ed è giunto il momento di trascriverli sul nostro foglietto degli appunti (È vero, forse a scuola avete usato fogliettini di formato A10 per non farveli scoprire, ma ora non dobbiamo temere più nessuno. NdT). Il mio consiglio è quello di prendere un foglio abbastanza grande, meglio se di formato A4: dovremo scriverci sopra un bel po' di dati! Tanto per darvi un'idea, ecco come si presenta il mio dopo che vi ho riportato tutti i comandi che abbiamo esaminato fin'ora (Anche se è in inglese, l'immagine mi pare abbastanza chiara, no? NdT). Provate a seguire, se possibile, il mio stesso schema, così avrete sufficiente spazio per trascrivere quasi tutto in un unico foglietto.


Figura 5.1: Foglietto

Fig. 1: Prima parte del foglietto degli appunti

Comandi eterogenei di vi

Continuiamo adesso la nostra rapida carrellata sui comandi di vi. In "command-mode", possiamo saltare ad una linea particolare digitando G. Per andare alla prima linea di un file, digitare 1G. Si noti che G è un carattere maiuscolo.

Se volete saltare alla successiva occorrenza di una sequenza particolare di caratteri (pattern), digitate /<regexp> e premete Invio dopo aver sostituito <regexp> con l'espressione regolare che volete cercare. Se non avete idea di come usare le espressioni regolari, non disperate: digitando /pippo vi sposterete alla successiva occorrenza di pippo. L'unica cosa cui dovrete prestare particolare attenzione è nella ricerca dei caratteri letterali ^, ., $ o \. Dovrete farli precedere dal carattere backslash (\). Facciamo un esempio: /pippo\.gif cercheà la prossima occorrenza di "pippo.gif".

Per ripetere la ricerca in avanti, premere n; per ripaterla all'indietro premere invece il tasto N. Come sempre, provate questi comandi direttamente in vi. Potete anche premere // per ripetere l'ultima ricerca.

6.  Salvare e Modificare

Salva e Salva come...

Poc'anzi abbiamo visto come usare il comando ex :q per uscire da vi. Se volete salvare il vostro lavoro (e vi posso garantire che talvolta è utile farlo... NdT) digitate :w. Se volete salvare il file con un altro nome, basta far seguire il nome voluto digitando qualcosa tipo :w nomefile.txt. Se volete salvare ed uscire, digitate :x or :wq.

In vim (ed altri editor vi avanzati, tipo elvis) potete modificare più file contemporaneamente. Per aprire un file in una nuova finestra, digitate :sp nomefile e nomefile apparià per essere modificato in una nuova finestra all'interno dell'editor. Per passare da una finestra all'altra, digitate CTRL+w CTRL+w (control+w due volte). Ogni comando :q, :q!, :w e :x che digiterete sarà applicato solamente alla finestra attiva.

Modifiche semplici

Adesso è il momento di iniziare ad esplorare l'uso di alcuni comandi di base per l'editing. I comandi che esamineremo sono considerati semplici perché, una volta impartiti, vi lasciano in "command-mode". I comandi più potenti, invece, vi trasportano in "insert-mode", la modalità che permette di introdurre dati letterali da tastiera. Lo vedremo meglio tra poco.

Per il momento provate a posizionarvi su qualche carattere del testo e premere x ripetutamente: vedrete che sarà cancellato il carattere sotto il cursore. Ora provate a posizionarvi circa a metà di un paragrafo (una qualunque porzione di testo compresa fra due righe vuote NdT) e premete J: vedrete che il comando istruisce vi a collegare (to Join NdT) la riga successiva alla fine di quella corrente. Provate adeso a posizionarvi su un carattere qualunque, premere r e battere un nuovo carattere: il comando permette di sostituire (to replace NdT) un carattere. Un'ultima prova: muovetevi su una linea e premete dd: vedrete cancellata completamente l'intera riga di testo

Ripetizioni e Cancellazioni

Potete ripetere ogni comando di editing semplicemente premendo il tasto . Tanto per provare, verificate che premendo dd... si cancellano 4 righe, e che premendo J...... si collegano alla fine di quella attuale le 7 linee seguenti. Al solito, il buon vi fornisce comode scorciatoie.

Per cancellare del testo, potete anche usare il comando d in combinazione con qualunque comando di movimento. Per esempio, dw cancellerà tutto ciò che si trova tra la posizione corrente del cursore e l'inizio della parola successiva; d) cancellerà tutto fino alla fine della frase corrente; d} cancellerà la parte di paragrafo rimanente. Fate ora delle prove con il comando d e con gli altri comandi di editing fino a quando non avrete acquisito sufficiente destrezza con il loro uso.

Annullare!

Ora che sappiamo come procedere per cancellare, potrebbe essere il momento di apprendere come annullare cancellazioni involontarie o, più in generale, cambiamenti accidentali al testo. Premendo il tasto u, la versione originale di vi permetteva di correggere solo l'ultimo cambiamento apportato. Le versioni più recenti, come vim o elvis, permettono invece di premere u ripetutamente continuando ad annullare, in ordine temporale inverso, i cambiamenti apportati (più facile a farsi che a dirsi NdT). Provate varie combinazioni dei comandi d e u.

Aggiorniamo il "foglietto"

Questo è il momento giusto per aggiornare il foglietto degli appunti! Dopo aver aggiunto tutti i nuovi comandi che abbiamo fin qui trattato, il vostro foglietto dovrebbe assomigliare parecchio al mio (NdT, anche se è in inglese):


Figura 6.1: Foglietto

Fig. 1: Foglietto con i comandi di editing

7.  Modalità inserimento

Fino a questo punto abbiamo esaminato come muovere il cursore in vi, eseguire I/O nonché alcune basilari operazioni di editing. Ma non vi ho ancora mostrato come scrivere un testo in tutta libertà! In effetti l'ho fatto di proposito, giacché la modalità di inserimento di vi è, almeno all'inizio, un po' complicata. Scoprirete con l'uso che proprio questa sua apparente complessità (e flessibilità) si rivela invece un gran bene.

Nella modalità inserimento (insert mode) potrete editare del testo valutandone direttamente a video l'effetto, proprio come fareste con altri editors. Una volta applicate le modifiche, basta premere il tasto Escape per tornare in modalità comando. Per passare alla modalità inserimento è sufficiente premere il tasto i oppure a. Se premeete i, il testo sarà inserito prima del carattere corrente; con il tasto a, invece, il testo verrà aggiunto dopo il carattere corrente. Ricordatevi, dopo aver inserito il testo, di premere il tasto <ESC> per tornare in modalità comando.

Vantaggi della modalità inserimento

Fate pure le vostre prove con i comandi a e i. Premete l'uno o l'altro, inserite un testo e premete Esc per tornare in modalità comando. Dopo aver premuto a oppure i, provate anche a premere <Invio> e valutate cosa accade. Usate i tasti freccia ed il tasto <Del> per capire appieno come funziona la modalità inserimento. Usando i tasti freccia ed il tasto <Del> potrete editare comodamente il testo senza dover entrare ed uscire continuamente dalla modalità inserimento.

Opzioni

Ecco alcune alternative da utilizzare per attivare la modalità inserimento nel modo più opportuno. Premete A (maiuscolo) per iniziare ad appendere alla fine della linea corrente (per corrente intendo la linea in cui attualmente si trova il cursore). Analogalmente premete I (maiuscolo) per iniziare ad inserire all'inizio della linea corrente. Premete o per creare una linea vuota sotto quella corrente, premete invece O (maiuscolo) per creane una vuota sopra. Per sostiruire l'intera linea corrente con una nuova, premete cc. Per sostituire il testo compreso tra la posizione corrente del cursore e la fine della linea, premete c$. Per sostituire invece il testo compreso tra l'inizio della riga e la posizione attuale del cursore, premete c0.

Tutti questi comandi vi porteranno automaticamente in modalità inserimento; dopo aver inserito il testo, al solito occorre premere <Esc> per tornare in modalità comando.

Cambiare il testo

Abbiamo poc'anzi introdotto il comando c (change) per illustrare il funzionamento di cc, c0 e c$. cc è una forma speciale del comando change, simile a dd. I comandi c0 e c$ sono esempi di come combinare il comando vero e proprio (change) con un comando di movimento. In questa forma, c funziona in modo simile al comando d, ad eccezione del fatto che vi lascia in modalità inserimento permettendovi di continuare ad inserire il testo che prenderà il posto di quello cancellato. Provate a combinare alcuni comandi di movimento con c e verificatene il funzionamento sul vostro file di prova (suggerimento:cW, c(, ce).

8.  Comandi Compositi

Tutte le potenzialità di vi emergono chiaramente non appena iniziate a fare uso dei comandi compositi ("combo"), come d{ e cw. Oltretutto potete anche combinarli con i comandi di movimento che abbiamo già visto, in modo da istruire vi per saltare alla terza parola alla destra della posizione corrente del cursore, come richiesto dal comando 3w! Ecco altri esempi di comandi "combo" tipici: 12b, 4j.

Ma cè di più: potete combinare alla sequenza (numero)(comando di movimento) anche altri comandi quali d oppure c; quindi digiterete d3w per cancellare le tre parole che seguono, d2j per cancellare, oltre alla linea corrente, le due linee successive, ecc. Fate esperienza con c e d combinati con i comandi di spostamento per avere un'idea di quanto sia potente ed immediato l'editing in vi: scoprirete che è possibile editare files ad una velocità pazzesca!

Aggiorniamo il nostro "fogliettino"

Ok, è il momento di buttar giù due righe su quello che abbiamo studiato ed aggiornare il nostro foglietto. Guardate com'è già diventato il mio:


Figura 8.1: Foglietto con i comandi composti

Fig. 1: Foglietto dei comandi aggiornato

Miglioriamo la produttività

Fin'ora abbiamo visto come muovere, salvare ed uscire da vi, eseguire semplici editing e selezioni di testo, e come lavorare in modalità inserimento. Con gli appunti che avete trascritto, dovreste essere in grado di usare vi per fare potenzialmente qualunque cosa. È solo questione di esercizio.

Ma non è tutto qui: vi dispone anche di altri potenti comandi. In questa sezione imparerete come tagliare, copiare, incollare, cercare e sostituire del testo, oltre che ad usare la funzione di "autoindentazione" (e scusate se è poco... NdT). Questo set di nuovi comandi vi permetterà di aumentare la vostra produttività.

Modalità visuale

Il metodo migliore per tagliare ed incollare del testo è quello di usare la modalità visuale (visual mode), che è disponibile nelle versioni più recenti di vi quali vim ed elvis. Potete pensare alla modalità visuale come ad una modalità di testo "evidenziato". Una volta che il testo è stato in qualche modo evidenziato, esso può essere copiato, cancellato, e poi incollato. Se siete utenti di gvim, potete effettivamente evidenziare il testo semplicemente mantenendo premuto il pulsante sinistro del mouse mentre passate sopra una determinata porzione di testo:


Figura 8.2: VIM con testo evidenziato

Fig. 2: Testo evidenziato

Si può passare direttamente alla modalità visuale premendo v (questa potrebbe essere l'unica possibilità disponibile se state usando vi da un terminale). Adesso, muovendo il cursore con i noti comandi di movimento (oppure i tasti freccia) evidenzierete una regione di testo (notate il cambiamento di colore della parte evidenziata NdT). Una volta evidenziata l'area, siete in grado di tagliare e copiare il testo.

Per copiare il testo, premete y (che stà per "yank") mentre, per tagliare il testo, premete d: subito dopo tornerete automaticamente in modalità comando. Ora spostatevi nella posizione in cui inserire il testo tagliato o cancellato e premete P per inserirlo prima della posizione occupata dal cursore o p per inserire il testo di seguito alla posizione del cursore. Et voilà, il taglia e incolla è servito! Provate diverse combinazioni del copia/taglia/incolla prima di proseguire.

Sostituire testo

Per sostituire un'occorrenza nel testo usiamo la modalità ex. Per sostituire la prima occorrenza che appare nella linea corrente, digitate :s/<regexp>/<replacement>/ e premete <Invio>, dove <regexp> è il modello da ricercare e <replacement> è la stringa sostitutiva. Per sostituire tutte le occorrenze del modello nella linea corrente, digitate :s/<regexp>/<replacement>/g (NdT, sostituzione globale) e premete <Invio>. Per sostituire tutte le occorrenze presenti nel file (e spesso questo è quello che si vuol fare), si usa in il carattere % in aggiunta all'opzione g, digitando :%s/<regexp>/<replacement>/g. Per richiedere la conferma prima di ogni sostitizione potrete usare il comando :%s/<regexp>/<replacement>/gc,(la "c" stà per conferma) e premete <Invio>

Indentazione

vi supporta l'autoindentazione per le modifiche al codice sorgente (NdT, caratteristica utile soprattutto ai programmatori). La maggior parte delle versioni di vi in circolazione (come vim) abilitano questa opzione di default quando si apre un file sorgente (come un .c, per esempio). Quando la funzione è abilitata, potete usare <CTR>d per spostarvi al livello di indentazione inferiore (verso sinistra), oppure <CTR>t per spostarvi al livello di indentazione superiore (verso destra). Se l'autoindentazione non fosse attiva, potete abilitarla manualmente digitando il comando :set autoindent in modalità comando. Potete anche istruire vi ad usare un livello di tabulazione arbitrario con il comando :set tabstop=n; :set tabstop=4 è una scelta frequente.

Il nostro foglietto definitivo

Bene, siamo giunti al fine! Dopo aver aggiunto tutti i comandi di editing avanzato al mitico foglietto, dovrebbe assomigliare parecchio a questo:


Figura 8.3: Aspetto finale del mitico foglietto

Fig. 3: Foglietto degli appunti

Tenete il mitico foglietto sempre a portata di mano, ed iniziate ad usare vi per editare files o per comporre email. Fate spesso riferimento al foglietto degli appunti; troverete che in meno di una settimana avrete memorizzato la maggior parte dei comandi e la vostra produttività sarà salita alle stelle!

Se volete usare vi come vostro editor di default, utilizzare eselect:

Codice 8.1: Impostare vi come editor di default

~# eselect editor list
Available targets for the EDITOR variable:
  [1]   /bin/nano
  [2]   /bin/ed
  [3]   /usr/bin/ex
  [4]   /usr/bin/vi
  [ ]   (free form)

~# eselect editor set 4
Setting EDITOR to /usr/bin/vi ...
>>> Regenerating /etc/ld.so.cache...
Run ". /etc/profile" to update the variable in your shell.

Se si vuole ottenere lo stesso risultato solo per il proprio utente invece che per tutto il sistema, impostare la variabile EDITOR nel proprio ~/.bashrc:

Codice 8.2: Impostare vi come editor dell'utente

~$ vi ~/.bashrc
(...)
export EDITOR="/usr/bin/vi"

Risorse

Infine alcune risorse che potete considerare per approfondire la vostra conoscenza su vi:

A proposito di questo documento

La versione originale di questo articolo è stata pubblicata per la prima volta su IBM developerWorks ed è proprietà di "Westtech Information Services". Questa è una versione aggiornata dell'articolo originale e contiene diversi miglioramenti apportati dal Team della documentazione Gentoo Linux.



Stampa

Aggiornato il 15 agosto 2011

La versione originale di questo documento non è più mantenuta

Oggetto: Questa guida vi insegnerà ad usare vi con un metodo particolarmente efficace per accelerare il processo di apprendimento, cioè l'uso di alcuni "foglietti" (lo stesso che molti hanno usato a scuola durante i compiti in classe! NdT). Questa è la prima guida per vi ed è pensata per veri principianti.

Daniel Robbins
Autore

Eric Stockbridge
Autore

Massimo Lucci
Traduzione

Ivo Carrano
Traduzione

Shev
Traduzione

Cristiano Chiucchiolo
Revisione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.