Imparare vi con gli sheets
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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 |
 |
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.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|