L' editor Vi



Indice

- Comandi per muoversi nel testo
- Inserimenti
- Correzioni
- Come rimediare agli errori fatti
- Come mettere piu` linee in una
- Duplicazione di linee, il comando p
- Incollamento di righe
- Manipolazione dei files
- Marking
- Gestione video
- Ripetizione dei comandi
- Ritrovare le linee cancellate
- Comandi per tutto il testo
- Parametri
- Ricerca di parole





NOTA: In queste pagine i comandi che l'utente deve inviare sono evidenziati con caratteri piu` scuri. I messaggi che compaiono sullo schermo sono invece evidenziati in corsivo.

Vi e` un visual editor, cioe` e` possibile muoversi liberamente lungo la pagina e lungo il testo. In vi il testo, o una parte di esso, e` sempre presente sul video. Quando siamo in editor di un file, l'editor non modifica direttamente il file su cui si sta lavorando. L'editor fa una copia del file in un'altra parte del sistema ed il contenuto originale non viene modificato fino a che non si da` l'apposito comando di aggiornamento.

Ad esempio per creare il file somma daremo:
vi somma
Quando entriamo nel file noi non ci troviamo in modalita` di inserimento. Se vogliamo inserire il testo diamo il comando di inserimento i ed inseriamo il testo. Ogni qualvolta vogliamo utilizzare uno dei comandi speciali che l'editor vi mette a di sposizione occorrera` uscire dalla modalita` inserimento, premendo il tasto <Esc> o <ctrl><. Per continuare ad inserire il testo occorrera` poi entrare nuovamente in modalita` inserimento.

Comandi per muoversi nel testo.

Questi sono comandi il cui scopoe` quello di posizionare velocemente il cursore sulla parte di testo voluta. La maggior parte di essi accettano un numero davanti come fattore di ripetizione. Per esempio dando
6k
il cursore si sposta di 6 linee in alto,
8w
si sposta avanti di 8 parole. I comandi per muoversi lungo il testo sono i seguenti
Comando - Funzione
<ctrl>D Il cursore si sposta di 12 linee in basso
<ctrl>U Il cursore si sposta di 12 linee in alto
j Scende di una riga sulla stessa colonna
k Sale di una riga sulla stessa colonna
l Cursore a destra
h Cursore a sinistra
<ctrl>F Cursore una pagina avanti
<ctrl>B Cursore una pagina indietro
G Da solo, sposta il cursore alla fine del testo, con argomento
numerico si sposta alla linea indicata. Ad esempio 32G
va alla trentaduesima linea
I Da solo, va al primo carattere della linea, con un argomento
numerico si sposta nel carattere indicato. Ad esempio 20I
va al ventesimo carattere.
<ctrl>G Riporta in penultima riga il numero della linea in cui ci si
trova,il numero di linee totali del file e la percentuale della
linea corrente rispetto a tutto il file
H Va all'inizio dello schermo, 6H va alla sesta linea
M Va nel mezzo dello schermo
L Va all'ultima linea dello schermo, 5L alla quint'ultima
w Va all'inizio della prossima parola fermandosi nelle
Punteggiature
b Va all'inizio della parola precedente fermandosi nelle
Punteggiature
e Va alla fine della parola su cui e` posizionato il cursore
W Come w ma non si ferma nelle punteggiature
B Come b ma non si ferma nelle punteggiature
^ Muove il cursore al primo carattere non bianco
0 (zero) Cursore all'inizio della linea
$ Cursore alla fine della linea

Inserimenti.


Comando - Funzione
i Inserisce il testo a sinistra del cursore
a Inserisce il testo a destra del cursore <tipico da usarsi a fine
Linea>
A Inserisce alla fine della linea
<ctrl>U Torna indietro di una parola mentre si sta inserendo
@ Dato in inserimento, torna indietro di cio` che e` stato inserito
o Apre in inserimento una linea sottostante
O Apre in inserimento una linea sopra

Come rimediare agli errori fatti.

Se vogliamo riportare la situazione precedente all'ultimo comando dato <per esempio se abbiamo cancellato una linea con dd e ci siamo resi conto che non era da togliere>, diamo il comando
u
Per riportare invece la linea corrente nella situazione precedente ad eventuali modifiche, se ci siamo spostati dalla stessa, diamo il comando
U
Se invece abbiamo disastrato completamente il testo e lo vorremmo riportare alla situazione precedente al richiamo dell'editor vi, digitando
:q! (vedere Manipolazione dei files)
si esce dal vi senza aggiornare le modifiche.

Come mettere piu` linee in una.

Il comando
J
mette la linea sottostante in coda a quella corrente,
3J
esegue la stessa operazione su 3 linee sottostanti.

Duplicazione di linee, il comando p.

Il comando
Y
da solo, carica in un buffer generico (=mettere da parte) la linea corrente,
12Y
carica nel buffer 12 linee dal cursore in poi. Poi possiamo spostarci a piacere nel testo, e digitando
p
vengono ricopiate le linee presenti nel buffer. Ogni p successiva ricopiera` altre volte le linee. La p puo` essere usata per spostare le linee di testo da una parte all'altra. Per esempio, possiamo dare
10dd
per cancellare 10 linee del testo, posizionarsi poi sulla parte di testo voluta e con
p
riportarle intatte.

Incollamento di righe.

I comandi
>>
e
<<
spostano rispettivamente la riga corrente del valore dello shiftwidth <normalmente 8 spazi> a destra o a sinistra. I comandi
> L
e
< L
spostano a destra o a sinistra tutte le linee dalla posizione del cursore fino alla fine dello schermo.
> G
e
< G
spostano a destra o a sinistra dalla posizione del cursore fino alla fine del file.

Manipolazione dei files.

Tutti questi comandi devono essere terminati da <return >


Comandi - Funzione
:w Aggiorna il testo con le modifiche
:<nome> Scrive il testo sul file <nome >
:x,yw<nome> Scrive le linee dalla x alla y nel file nome
:wq Aggiorna il testo ed esce dall'editor
ZZ Come :wq
:q Esce dal testo se non sono state fatte modifiche
dall'ultimo aggiornamento
:q Esce senza aggiornare le modifiche
:e<nome > Entra in editor sul file <nome >
:r<nome > Inserisce nel testo il file <nome > nella riga sotto il
Cursore

Marking.

Quando siamo in editor con un testo molto lungo puo` tornarci utile contrassegnare una certa linea del testo con una "bandierina" che ci servira` per poterci tornare velocemente
m<carattere>
inserisce un visibile mark sulla linea corrente. Supponiamio che abbia dato ma. In qualsiasi parte del testo ora mi trovo, con
'a
ritorno alla linea precedentemente contrassegnata. E' possibile togliere un mark solo riutilizzando lo stesso carattere in una linea diversa .

Gestione video.


Comandi - Funzione

<ctrl>L
Ripulisce lo schermo, e` utile quando un programma esterno a vi interferisce con il video, tipo un messaggio pervenuto o l'output di un programma
z<return > Mette la linea corrente all'inizio dello schermo
z. Mette la linea corrente in mezzo allo schermo
z- Mette la linea corrente alla fine dello schermo

Ripetizione dei comandi.

Il comando
. (punto)
ripete l'ultimo comando dato, per cui se precedentemente abbiamo inserito una linea la duplica; se abbiamo cancellato una linea, cancella la successiva. Con un uso adeguato, questo comando puo` tornare molto utile.

Ritrovare le linee cancellate.

L'editor salva le ultime 9 cancellazioni di parte del testo in registri numerati da 1 a 9. L'ultima linea cancellata si trova sempre nel registro 1.
"<numero >p
dove in <numero > c' e` una cifra da 1 a 9, riporta nel file il contenuto del registro indicato. Se quella non e` la linea che volevamo, possiamo dare
u
per toglierla <ricordando che u annulla il comando precedente> e poi
. (punto)
In questo caso il punto ha il significato di incrementare il numero del registro. A questo proposito provate a dare la sequenza
"1pu.u.u.u.u.u
Se capita che il sistema cade <e` temporaneamente inutilizzabile> mentre siete in editor e vi interessano le modifiche fatte dall'ultimo aggiornamento, generalmente e` possibile ritrovare il contenuto del file con il comando
vi -r

Comandi per tutto il testo.

Vediamo ora il comando di sostituzione s. Come prima cosa, vediamo la sostituzione di una parola nella linea corrente
s/vecchia/nuova
sostituisce nella linea in cui si trova il cursore, la prima ricorrenza di "vecchia" con "nuova".
s/vecchia/nuova/g
la g sta per global, sostituisce qualsiasi ricorrenza di "vecchia" con "nuova" nella linea corrente. Ogni comando di sostituzione puo` essere preceduto da uno o piu` numeri di linee.
1,$ s/error/errore/g
cambia ogni ricorrenza di "error" in "errore" in tutto il testo.
23,55s/error/errore/g
fa la stessa cosa di prima pero` dalle righe 23 a 55. Puo` capitare che dopo un comando di sostituzione ci accorgiamo che il risultato non era quello che desideravamo, in questo caso e` sempre valido il comando
u
che ci riporta alla situazione precedente il comando.

Parametri.

L'editor vi ha un insieme di parametri che possono essere definiti dall'utente. Provate a dare l'istruzione
:se all
Questa istruzione mostra tutti i possibili parametri che possono essere definiti. Dando invece
:se
vengono mostrati i parametri che sono stati attivati. Quando siamo in editor di un programma, puo` risultare utile l'autoindentazione. Date il comando
:se ai
che sta per set autoindent, inserite una nuova linea lasciando alcuni spazi all'inizio della riga, andate a capo sempre in inserimento e vedrete che la nuova linea comincia dal punto in cui e` iniziata quella precedente. E' cosi` possibile evitare noiosi inserimenti di spazi all'inizio delle linee. Per tornare nelle colonne a sinistra in inserimento, dare il carattere
n c <ctrl>D
Ogni volta che diamo questo carattere come primo carattere non bianco della riga (sempre in inserimento), il cursore si sposta otto spazi piu` a sinistra. Se vogliamo modificare il numero da otto ad un altro, per esempio sette, digitare
:se sw=7
dove sw sta per shiftwidth. Quando vogliamo togliere l'autoindentazione, diamo
:se noai

Ricerca di parole.

Dando il carattere /, il cursore si sposta nella penultima linea del terminale ed e` pronto ad accettare una parola che sara` cercata lungo il testo. Se la parola specificata e` stata trovata, il cursore si posizionera` all'inizio di essa, altrimenti ci sara` un messaggio del tipo Pattern not found. Ad esempio
/begin
seguito da un <return >, cerca la parola "begin" dalla posizione del cursore in avanti, ricominciando dall'inizio quando finisce il file.
?begin
cerca la parola "begin" dalla posizione del cursore all'indietro, ricominciando eventualmente dalla fine del file. Ora,
n
senza <return >, trova la prossima ricorrenza del pattern nel testo. Invece
N
senza <return >, trova la prossima ricorrenza del pattern invertendo la direzione di ricerca. Con
/begin/6
il cursore si posiziona 6 linee dopo la ricorrenza di begin. I pattern (le parole da cercare) possono contenere metacaratteri (caratteri che assumono significato particolare):
^ vuol dire "all'inizio della riga"
$ vuol dire "alla fine della riga "
. vuol dire "qualsiasi carattere"
[] racchiude un range di caratteri.

Esempi:
1> /^ al trova il pattern "al" solo se si trova all'inizio di una riga.
2> ?: trova <scandendo all'indietro> il pattern ":" solo se si trova alla fine della riga.
3> /x,y trova qualsiasi ricorrenza di una x seguita da un qualsiasi carattere e poi da una y, ad esempio pattern come x+y, x*y, x-y,...
4> /<0-9> trova qualsiasi cifra.
5> /^ <0-9>a trova le cifre seguite da una "a" in inizio riga.

E' possibile fare ricerche limitate alla linea corrente e ad un solo carattere con
f<carattere>
Il comando
fl
trova la prima l sulla linea corrente,
F
funziona come f, con la differenza che cerca prima il cursore.