Guida avanzata a Solaris

Comandi base di vi

I paragrafi seguenti illustrano diverse categorie di comandi di vi, utilizzati tra l'altro per le seguenti operazioni:

Spostamento all'interno di un file

Nei paragrafi precedenti è stato spiegato come creare, salvare, stampare e chiudere un file di vi. A questo punto, avendo creato un file, è necessario comprendere i concetti essenziali per gli spostamenti al suo interno. Aprire il file di prova ed eseguire i comandi descritti qui di seguito.

Spostamento del cursore

All'avvio di vi, il cursore compare nell'angolo superiore sinistro dello schermo. Operando in modalità comando è possibile spostare il cursore tramite una serie di comandi da tastiera, associati caso per caso a determinate lettere, ai tasti freccia, al tasto Return, al tasto Back Space (o Canc) o alla barra spaziatrice.


Nota -

vi interpreta i comandi distinguendo tra maiuscole e minuscole; uno "stesso" comando scritto in lettere maiuscole e in lettere minuscole potrebbe perciò produrre effetti radicalmente diversi.


Spostamenti con i tasti freccia

Se la tastiera dispone dei tasti freccia, si provi ad utilizzarli per spostare il cursore. Questi tasti permettono di muovere liberamente il cursore in alto, in basso, a destra e a sinistra. Si noti tuttavia che il cursore può essere spostato solo all'interno di un testo o di spazi già esistenti.

Se si utilizza vi da un terminale remoto, è possibile che i tasti freccia non funzionino correttamente. I problemi di questo tipo dipendono in genere dall'emulatore del terminale. Se i tasti freccia non sono utilizzabili, sono disponibili le seguenti alternative:

Spostamento di parola in parola

Premere w ("word") per spostare il cursore di parola in parola verso destra.

Premere b ("back") per spostare il cursore di parola in parola verso sinistra.

Premere W o B per spostare il cursore alla parola successiva o precedente ignorando i segni di punteggiatura.

Premere e ("end") per spostare il cursore sull'ultimo carattere della parola corrente.

Spostamento all'inizio o alla fine della riga

Premere ^ per spostare il cursore all'inizio della riga corrente.

Premere $ per spostare il cursore alla fine della riga corrente.

Spostamento alla riga successiva

Premere il tasto Return per spostare il cursore all'inizio della riga successiva.

Spostamento a sinistra

Premere il tasto Back Space per spostare il cursore di un carattere verso sinistra.

Spostamento a destra

Premere la barra spaziatrice per spostare il cursore di un carattere verso destra.

Spostamento a inizio schermo

Premere H ("high") per spostare il cursore all'inizio dello schermo.

Spostamento a metà schermo

Premere M ("middle") per spostare il cursore a metà schermo.

Spostamento a fine schermo

Premere L ("low") per spostare il cursore al fondo dello schermo.

Spostamento di pagina in pagina e scorrimento

Se ci si sposta verso il basso quando il cursore si trova al fondo dello schermo, o verso l'alto quando il cursore si trova all'inizio dello schermo, il testo scorrerà rispettivamente verso l'alto o verso il basso. Questo metodo può essere utile per lo spostamento all'interno di un file breve, ma può risultare scomodo o lento in un file di grandi dimensioni.

Gli spostamenti all'interno di un file possono essere eseguiti di pagina in pagina, di videata in videata o di mezza videata alla volta. (Per provare questi comandi sul file prova, aggiungere nuove righe per ottenere un testo di lunghezza sufficiente.)

Si noti che esiste una differenza fondamentale tra spostamento di pagina in pagina e scorrimento. Lo scorrimento produce un avanzamento o un arretramento di una riga alla volta, come se il testo venisse visualizzato su un rullo continuo. Lo spostamento di pagina in pagina fa invece avanzare o arretrare il cursore di una videata alla volta. Sui sistemi veloci la differenza può essere trascurabile. Se viceversa si lavora su un terminale remoto o in altre situazioni in cui il sistema opera in modo più lento del normale, la differenza può essere determinante.

Spostamento di una videata in avanti

Per spostarsi di una videata in avanti (verso il basso), premere Ctrl-F. (Premere il tasto Control e contemporaneamente il tasto F.) Il cursore apparirà nell'angolo superiore sinistro della nuova videata.

Spostamento di mezza videata in avanti

Per spostarsi di mezza videata in avanti, premere Ctrl-D.

Spostamento di una videata all'indietro

Per spostarsi di una videata all'indietro (verso l'alto), premere Ctrl-B.

Spostamento di mezza videata all'indietro

Per spostarsi di mezza videata all'indietro, premere Ctrl-U.

Inserimento di un testo

Nei paragrafi seguenti verranno descritti i comandi fondamentali di vi per l'inserimento di un testo. Si noti che tutti questi comandi pongono vi in modalità inserimento e che, per utilizzarli, occorre trovarsi in modalità comando. Per verificare di trovarsi in modalità comando, premere Esc.

Aggiunta

Digitando una a (da append, aggiungere), il nuovo testo viene inserito a destra del cursore. Per provare il funzionamento del comando, posizionare il cursore all'interno di una riga, premere una a minuscola e inserire il nuovo testo. Al termine, premere Esc.

Digitando una A maiuscola, il testo viene aggiunto alla fine della riga. Per provare il funzionamento di questo comando, posizionare il cursore all'interno di una riga e digitare A. Il cursore si sposterà alla fine della riga. Inserire il nuovo testo. Al termine, premere Esc.

Inserimento

Digitando una i minuscola in modalità comando, il nuovo testo viene inserito a sinistra del cursore.

Digitando una I maiuscola, il testo viene inserito all'inizio della riga. (Il comando fa spostare automaticamente il cursore all'inizio della riga.) Per tornare in modalità comando dopo avere inserito il testo, premere Esc.

Creazione di una riga

vi dispone di comandi per creare nuove righe sopra o sotto la posizione corrente del cursore.

Digitare una o minuscola per creare una riga sotto la posizione corrente del cursore. Per provare il comando, digitare una o e inserire un testo. Il nuovo testo inserito può occupare anche diverse righe. Al termine, premere Esc.

Digitare una O maiuscola per creare una riga sopra la posizione corrente del cursore.

Modifica di un testo

La modifica di un testo comporta la sostituzione di caratteri esistenti con caratteri nuovi. vi dispone di molti comandi per eseguire questa operazione, a seconda delle esigenze e della portata delle modifiche.

Modifica di una parola

Per sostituire una parola, posizionare il cursore all'inizio della parola da sostituire. Digitare cw seguito dalla nuova parola. Per terminare, premere Esc.

Per modificare una parte di una parola, posizionare il cursore sulla parola, a destra della parte da conservare. Digitare cw, inserire la correzione e premere Esc.

Modifica di una riga

Per modificare una riga, posizionare il cursore in qualsiasi punto della riga e digitare cc. La riga scomparirà lasciando una riga vuota per il nuovo testo (che potrà avere qualsiasi lunghezza). Per terminare, premere Esc.

Modifica di parte di una riga

Per sostituire una parte di una riga, posizionare il cursore a destra della parte che si desidera conservare. Digitare C, inserire il nuovo testo e premere Esc. In questo modo viene modificata la parte di testo compresa tra la posizione corrente del cursore e la fine della riga.

Sostituzione di caratteri

Per sostituire il carattere in corrispondenza del cursore con uno o più caratteri, digitare una s seguita dal nuovo testo. Per tornare alla modalità comando, premere Esc.

Sostituzione di un singolo carattere

Questo comando permette di sostituire il carattere evidenziato dal cursore con un altro carattere. Posizionare il cursore sul carattere e digitare una r seguita da un solo carattere sostitutivo. Dopo la sostituzione, vi torna automaticamente alla modalità comando (senza bisogno di premere Esc).

Trasposizione di caratteri

vi dispone di un comando molto semplice per correggere i caratteri trasposti, ad esempio un "ter" digitato al posto di "tre". Per eseguire la correzione, posizionare il cursore sulla prima lettera da spostare (in questo caso la e), quindi digitare xp. La e e la r cambieranno di posto e vi tornerà automaticamente alla modalità comando.

Divisione o unione di righe

Per spezzare una riga senza modificarne il testo, portare il cursore su un carattere di spazio e digitare una r seguita da Return. Si noti che eseguendo questa operazione con il cursore posizionato su una lettera, la lettera evidenziata sarà sostituita dal carattere di ritorno a capo.

Per unire due righe, posizionare il cursore sulla riga superiore e digitare una J maiuscola. (Non è necessario premere Esc per terminare.)

Annullamento delle modifiche

Lavorando su un file di testo, capita spesso di effettuare una modifica e di accorgersi subito dopo di preferire la versione precedente. I comandi di annullamento di vi permettono di annullare gli effetti di un'operazione e di proseguire da quel punto.

Annullamento del comando precedente

Se si commette un errore o si cambia idea dopo avere eseguito una data operazione, è possibile annullare l'ultimo comando digitando immediatamente una u. (Non è necessario premere Esc per terminare.) Premendo u una seconda volta, vi annullerà il comando di annullamento.

Annullamento delle modifiche a una riga

Per annullare tutte le modifiche apportate a una riga, digitare una U maiuscola. Questo comando ha effetto solo se il cursore non è stato precedentemente spostato su un'altra riga. (Non è necessario premere Esc per terminare.)

Cancellazione di un testo

I comandi di vi descritti qui di seguito permettono di cancellare un carattere, una parola o una riga. Al termine di queste operazioni vi resta in modalità comando, perciò per inserire nuovo testo occorre prima entrare in modalità inserimento.

Cancellazione di un carattere

Per cancellare un carattere, posizionare il cursore sul carattere da cancellare e digitare x.

Il comando x cancella anche lo spazio occupato dal carattere -- se si cancella una lettera all'interno di una parola, le altre lettere si avvicinano senza lasciare spazi vuoti. Il comando x permette anche di cancellare spazi vuoti all'interno di una riga.

Per cancellare un carattere posto prima (a sinistra) del cursore, digitare una X maiuscola.

Cancellazione di una parola o di parte di una parola

Per cancellare una parola, posizionare il cursore sul suo carattere iniziale e digitare dw. La parola viene cancellata senza lasciare spazi vuoti.

Per cancellare una parte di una parola, portare il cursore a destra della parte che si desidera conservare, quindi digitare dw per cancellare il resto della parola.

Cancellazione di una riga

Per cancellare una riga, posizionare il cursore in qualsiasi punto della riga e digitare dd. La riga viene cancellata senza lasciare spazi vuoti.

Cancellazione di parte di una riga

È anche possibile cancellare solo una parte di una riga.

Per cancellare tutti i caratteri situati a destra del cursore, posizionare il cursore a destra della parte che si desidera conservare e digitare D.

Per cancellare tutti i caratteri situati a sinistra del cursore, posizionare il cursore a destra della parte che si desidera cancellare e digitare d0 (d-zero).

Cancellazione fino alla fine del file

Per cancellare tutto il testo compreso tra la riga corrente e la fine del file, digitare dG. Verrà cancellata anche la riga su cui è posizionato il cursore.

Cancellazione dall'inizio del file

Per cancellare tutto il testo compreso tra l'inizio del file e la riga corrente, digitare d1G. Verrà cancellata anche la riga su cui è posizionato il cursore.

Copia e spostamento di un testo -- yank, delete e put

Molti word-processor offrono comandi per "copiare e incollare" e "tagliare e incollare" parti di testo. Anche l'editor vi dispone di queste funzioni. Nel caso di vi, l'operazione "copia e incolla" viene eseguita con i comandi yank e put, mentre l'equivalente di "taglia e incolla" si ottiene con i comandi delete e put.

Per copiare o spostare piccoli blocchi di testo sono disponibili varie combinazioni dei comandi yank, delete e put.

Copia di righe

Per copiare una riga sono richiesti due comandi: yy o Y ("yank") e p ("put below", inserisci sotto) o P ("put above", inserisci sopra). Si osservi che Y produce lo stesso effetto di yy.

Per copiare una riga, posizionare il cursore in qualsiasi punto della riga e digitare yy. Portare ora il cursore sulla riga sopra il punto in cui si desidera inserire la riga copiata e digitare p. Una copia della riga copiata verrà inserita al di sotto del cursore.

Per inserire la riga copiata al di sopra del cursore, digitare P.

Il comando yy può essere utilizzato anche con un numero: per copiare 11 righe, ad esempio, è possibile digitare 11yy. vi copierà undici righe a partire da quella corrente, e visualizzerà al fondo dello schermo il messaggio: 11 righe memorizzate.

I comandi P o p possono anche essere usati subito dopo uno dei comandi di cancellazione descritti in precedenza. In questo caso, il testo cancellato verrà inserito rispettivamente al di sopra o al di sotto del cursore.


Avvertenza - Avvertenza -

Tra i comandi yank, delete e put usare solo comandi di spostamento del cursore. Se prima di inserire con put un testo tagliato o copiato si cancella o si copia un altro blocco di testo, la porzione tagliata o copiata in precedenza andrà perduta.


Spostamento di righe

Per lo spostamento di una o più righe di testo sono richiesti due comandi: dd ("delete") e p oppure P.

Per spostare una riga, posizionare il cursore in qualsiasi punto della riga e digitare dd. Per spostare più righe, far precedere il comando dal numero di righe su cui si desidera eseguire l'operazione. Per cancellare ad esempio 5 righe, digitare 5dd.

Portare quindi il cursore sulla riga al di sopra del punto in cui si desidera reinserire la riga cancellata e digitare p. Il testo viene inserito in una nuova riga al di sotto del cursore.

Per inserire la riga cancellata al di sopra del cursore, digitare P.

Uso di nomi per i buffer

Per inserire ripetutamente un gruppo di righe in più punti di un documento, può essere comodo copiare le righe di interesse in un buffer e assegnare a questo buffer un nome. Per eseguire questa operazione, far precedere il comando da eseguire da una virgoletta doppia (") e dal nome del buffer. Ad esempio, per copiare quattro righe in un buffer di nome a, digitare "a4yy. È possibile usare diversi buffer per uno stesso documento. Ad esempio, si può cancellare un testo da una data posizione ed aggiungerlo in diversi altri punti. Per cancellare 12 righe e inserirle in un buffer di nome b, digitare "b12dd.

Per inserire nel documento il testo contenuto nel buffer, far precedere il comando p o P da "n, dove n è il nome del buffer. Ad esempio, per inserire nel documento le righe salvate nel buffer b, digitare "bP.

Il contenuto di un buffer può essere sostituito con nuove righe di testo. I buffer creati durante una sessione restano in memoria fino all'uscita da vi.

L'uso dei buffer denominati permette di cancellare e copiare diversi blocchi di testo separatamente, senza sovrascrivere ad ogni operazione il contenuto del buffer principale.

Uso di contatori per la ripetizione dei comandi

Molti comandi di vi possono essere preceduti da un fattore di ripetizione, detto contatore -- un numero che precede il comando e indica per quante volte l'operazione deve essere ripetuta.

Molti dei comandi descritti nei paragrafi precedenti possono essere utilizzati con un contatore. Ad esempio, 3dd indica che il comando di cancellazione di una riga deve essere ripetuto per tre volte; il risultato sarà quindi la cancellazione di tre righe. Analogamente, 2dw cancellerà due parole, mentre 4x cancellerà quattro caratteri o spazi. I contatori possono essere abbinati anche ai comandi per lo spostamento del cursore, ad esempio 3w e 2Ctrl-F. Tutte queste funzioni diventeranno più chiare con l'uso pratico dei comandi di vi. Nel paragrafo "Sommario dei comandi principali di vi" alla fine di questo capitolo, i comandi che accettano l'uso di un contatore sono indicati con "[numero]" prima del nome del comando.

Digitando un punto (.), vi ripete il comando di modifica precedente. Se ad esempio è stata cancellata una riga con dd, è possibile portare il cursore su un'altra riga e cancellarla digitando semplicemente un punto.