Note relative all'editor VI
Vi (letto "vi-ai") è un editor di testo tradizionalmente
considerato poco amichevole. La difficoltà principale nell'utilizzare
tale strumento sta nel fatto che esso ha non una modalità d'uso
(come la maggior parte degli editor) bensì due: una modalità
comandi ed una modalità inserzione testo. La modalità
inserzione testo consente esclusivamente di modificare il documento aperto
aggiungendo del contenuto; la modalità comandi consente di eseguire
tutte le altre operazioni, come ad esempio spostarsi all'interno del documento,
modificare del testo, eseguire ricerche o cancellazioni, salvare il file,
uscire dall'editor. I comandi sono costituiti da tasti (o combinazioni
di tasti), quindi a seconda che ci troviamo in modalità testo oppure
in modalità comandi la pressione di lettere, numeri o altri caratteri
sulla tastierà avrà effetti differenti.
I motivi di questa scelta ricadono nel fatto che il target di utilizzatori
per cui vi è stato realizzato sono i programmatori o, in generale
tutte le persone che fanno ampio uso della tastiera e non hanno necessariamente
bisogno di un supporto grafico. La tastiera è l'unico device necessario
per l'uso di vi. Alcune versioni (come ad esempio gvi) combinano la presenza
dei comandi tradizionali (via tastiera) con la presenza di menù
che forniscono alcuni degli stessi comandi di uso più frequente.
Vediamo come si usa vi con un piccolo esempio: vogliamo creare un file
prova.txt ed inserirvi la parola prova.
- da prompt digiteremo il comando vi prova.txt, se il file prova.txt
esiste già nella working directory, il file esistente verrà
aperto altrimenti l'editor aprirà un nuovo file con il nome specificato.
Si noti che il file non sarà creato veramente se non al primo
salvataggio.
- a questo punto ci troveremo in una finestra di editing (di solito
la stessa finestra in cui è stato lanciato il comando vi), in
modalità comandi.
- Per inserire del testo occorre passare in modalità testo, cosa
che è possibile fare utilizzando una delle vocali i, a
oppure o. I diversi effetti di questi tre comandi risulteranno
più chiari quando il file avrà un contenuto non vuoto.
- quando si è in modalità testo, qualunque lettera, numero
o altro carattere venga digitato, questo verrà inserito nel documento
in preparazione. A questo punto posso quindi scrivere la parola prova.
- Supponiamo che mi sia sbagliata ed abbia scritto proba: posso
utilizzare il tasto Backspace per spostarmi indietro sulla linea
cancellando i caratteri uno per uno e quindi riscrivere in modo corretto
il testo di interesse.
- Terminato di inserire il testo non ci rimane che salvare il file.
Per fare questo occorre essere in modalità comandi. Per passare
in modalità comandi si utilizza il tasto ESC (escape).
- Essendo in modalità comandi posso richiedere il salvataggio
del file (comando :w) e l'uscita dall'editor (comando :q).
Posso anche combinare i due comandi in uno solo (:wq) causando
siail salvataggio del file sia l'uscita dall'editor. Si noti che quando
si digita il simbolo : (due punti) compare in fondo alla pagina
una linea di comando, all'interno della quale viene inserito il comando
da eseguire. Sulla linea di comando possono essere scritti comandi articolati,
con argomenti e sono terminati da un RETURN. Per esempio posso creare
una copia del file corrente chiedendo al sistema di eseguire :w nomeNuovoFile
. nomeNuovoFile sarà l'argomento di w.
- Se voglio uscire dall'editor senza salvare devo utilizzare :q!
Il punto esclamativo forza l'esecuzione di un comando.
Vediamo ora più nello specifico come si fa ad eseguire tutto
un insieme di operazioni utili (spostarsi in un punto del file, cercare
una stringa, sostituirla con un'altra, modificare parole o parti di testo,
copiare porzioni di testo, cancellarle, ecc.)
SPOSTARSI IN UN PUNTO DEL FILE
Tradizionalmente i movimenti più semplici (spostati di un carattere
a sinistra, di un carattere a destra, una linea in su, una linea in giù)
sono eseguiti utilizzando i caratteri h, l, k, j. h movimento
verso sinistra, l verso destra, k verso l'alto, j
verso il basso. Oltre a questi quattro comandi alcune versioni di vi (ma
non tutte) sono in grado di gestire i quattro tasti cursori (quelli con
le freccette) presenti sulla maggior parte delle tastiere. Quando si è
fatta pratica dei movimenti di base, si può cominciare ad utilizzare
comandi di spostamento che fanno fare balzi un po' più lunghi.
Eccono alcuni:
- parole: una parola è un insieme di caratteri contigui
diversi da spazio (blank) e da newline (che fungono da separatori).
Inoltre se ho una sequenza di alfanumici contigua a una sequenza di
non alfanumerici, vi interpreta le due sottostringhe come parole separate.
Quindi, per esempio la sequenza if (x>125) per vi è
costituita da 6 parole distinte: if, (, x, >,
125, ). In vi è possibile spostarsi avanti e indietro
per parole. Per spostarmi alla prossima parola devo utilizzare il comando
w (in testa alla parola successiva) oppure e (alla fine
della parola successiva) , per spostarmi indietro utilizzo b.
Se voglio spostarmi di una parola contenente caratteri misti (alfanumerici
e non) considerandola una parola sola, utilizzo le maiuscole W
e B.
- linea corrente: con $ ci si sposta alla fine della linea
corrente, con ^ oppure con _ in testa alla linea corrente.
- linea: posso spostarmi ad una linea specifica del documento
utilizzando il comando :n dove n è il numero della linea
di interesse (per esempio :123 sposta il cursore alla linea numero 123).
Per visualizzare i numeri di linea (far precedere ogni linea dal numero
corrispondente) posso utilizzare il comando :set nu. Per disabilitare
la visualizzazione dei numeri di linea :set nonu.
- pagina: CTRL-F (forward) fa scorrere il testo una pagina
in avanti, CTRL-B (backward) una pagina indietro, CTRL-D (down)
una mezza pagina in avanti, CTRL-U (up) mezza pagina indietro.
Per spostare il cursore sulla prima linea della pagina corrente si usa
H (head) mentre per spostarlo all'ultima linea della pagina corrente
si usa L (last). Per spostare il cursore all'ultima linea del
documento si usa G. Attenzione che con CTRL-G vengono
invece visualizzate informazioni relative al documento (nome, dimensione,
linea a cui ci troviamo, numero complessivo di linee, ...)
CANCELLAZIONE
In vi è possibile cancellare caratteri, parole, linee, tutto il
documento. Vediamo come:
- caratteri: utilizzando x cancello il carattere su cui
è posizionato il cursore, con X cancello il carattere
precedente a quello su cui è posizionato il cursore. Se digito
5x cancello 5 caratteri, se digito 10x ne cancello 10,
in generale digitando nx, dove n è un numero, cancello
i successivi n caratteri.
- parole: con dw cancello la parola (di soli alfanumerici
o soli caratteri non alfanumerici) che inizia con il carattere su cui
è posizionato il cursore. Il comando dW ha un funzionamento
analogo ma cancella tutti i caratteri dal cursore fino al successivo
spazio o newline. Analogamente al caso precedente digitando 3dw cancellerò
tre parole.
- linee: il comando per cancellare la linea su cui è
posizionato il cursore è dd. Per cancellare n linee
a partire da quella su cui è posizionato il cursore si usa ndd.
- linee da N a M: per cancellare le linee dalla numero N alla
numero M si utilizza il comando :N,Md
- per cancellare il documento dalla linea corrente fino alla fine si
utilizza dG.
RICERCA
Per cercare una stringa all'interno del documento si utilizzano:
- /stringa (slash seguito dalla stringa da cercare, senza spazi
bianchi nel mezzo) esegue la ricerca in avanti. Trovata la prima occorrenza
della stringa, se si desidera ripeterela ricerca basta digitare n
(next).
- ?stringa (punto interrogativo seguito dalla stringa da cercare)
esegue la ricerca all'indietro. Anche in questo caso le occorrenze della
stringa successive alla prima possono essere trovate utilizzando il
comando n.
SOSTITUZIONE
Supponiamo di voler eseguire delle sostituzioni di testo all'interno del
documento, possiamo procedere in uno dei seguenti modi:
- parole: il comando cw (e il comando cW per parole
costituite da alfanumerici e non) causano la cancellazione della parola
avente inizio nel carattere su cui si trova posizionato il cursore e
l'attivazione della modalità testo permanendo nella medesima
posizione. In altri termini l'utente ha la possibilità di inserire
del testo che si sostituirà alla parola eliminata. Per tornare
in modalità comandi al termine della modifica occorre utilizzare
ESC. Come in altri casi precedenti posso sostituire n
parole a partire da quella corrente con altro testo utilizzando ncw
(o ncW), dove n è un nuomero intero (per esempio 3cW causa
la sostituzione di 3 parole consecutive).
- fino a fine linea: C causa l'eliminazione del resto
della linea (dalla posizione corrente del cursore fino al newline) con
passaggio a modalità testo.
- ricerca e sostituzione: è possibile combinare un comando
di ricerca con uno di sostituzione:
- :N,Ms/vecchiaStringa/nuovaStringa in tutte le linee che
vanno dalla numero N alla numero M sostituisce la prima occorrenza
di vecchiaStringa con nuovaStringa. M può anche assumere
il valore speciale $ (ultima riga) e all'interno della specifica
della stringa da cercare possono comparire i simboli di inizio linea
(^) e di fine linea($ anche in questo caso). Esempi:
- :10,34s/proc/defun in tutte le linee dalla numero 10
alla numero 34 sostituisce la prima occorrenza di proc con defun.
- :1,$s/;$/ caso particolare: se lascio vuota nuovaStringa
causo la sostituzione di vecchiaStringa con una stringa vuota,
quindi in pratica ne causo la cancellazione. Nell'esempio cancello
tutti i punti e virgola che compaiono in fondo (;$) ad una qualsiasi
linea del file (1,$ indica tutte le linee dalla prima all'ultima)
- :1,$s/^M/ esempio utile: i file editati in ambiente
Windows hanno dei caratteri di fine linea che comprendono il
carattere ^M (CNTL-M) seguito dal carattere interpretato come
newline in Unix. Per questo motivo quando si edita un file creato/modificato
in ambiente Windows con vi, gli a-capo sono preceduti da fastidiosi
^M. Per eliminarli si può utilizzare il comando descritto.
Per scrivere ^M occorre digitare la sequenza: CNTL-V CNTL-M.
- :N,Ms/vecchiaStringa/nuovaStringa/g l'aggiunta di g
causa una sostituzione globale, ovvero mentre nel caso precedente
solo la prima occorrenza per linea di vecchiaStringa veniva modificata,
in questo caso tutte le occorrenze di vecchiaStringa delle
linee specificate verranno modificate.
COPY e PASTE
Per eseguire dei copy and paste di linee è possibile procedere
nel seguente modo:
- yank: con la parola yank si intende la copiatura nella clipboard
di una parte di testo. Possiamo inserire il contenuto della clipboard
in un'altra posizione del documento con un comando di paste. Per eseguire
lo yank della linea corrente si possono utilizzare alternativamente
yy oppure Y. Per eseguire lo yank di n linee a partire
da quella corrente si utilizza nY. Per eseguire lo yank delle
linee che vanno dalla numero N alla numero M si utilizza il comando
:N,My
- paste: abbiamo due possibilità p e P.
Il comando p copia il contenuto della clipboard subito dopo il
cursore, mentre P esegue l'incollatura sopra al cursore.
Si osservi che viene inserito nella clipboard anche l'oggetto dell'ultima
operazione di cancellazione (sia esso un insieme di linee, lettere o parole).
COMANDO . (punto)
Molto utile! Ripete l'ultimo comando di modifica eseguito (sia esso un'inserzione
di testo, una cancellazione, una sostituzione ...)
|