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.
|