Capitolo successivo Capitolo precedente Indice

37. Editing

In informatica, con il termine editing ci si riferisce spesso alla elaborazione di file di testo semplici.

37.1 vi

Nei sistemi Unix, il programma più importante per la creazione e la modifica dei file di testo è vi. È più importante perché onnipresente, soprattutto nei dischetti di emergenza, anche se non si tratta di un programma comodo da utilizzare.

vi ha una logica di funzionamento tutta sua che ne impedisce l'utilizzo a chi non abbia letto nulla al riguardo. L'intento di questa sezione è quello di chiarire questa logica, almeno in parte, in modo da facilitarne l'utilizzo in caso di necessità.

Di fatto, per Linux, non esiste in circolazione una versione originale di vi, ma tanti cloni di questo, con potenzialità più o meno ampliate. Per questo, di solito vi sarà un link (simbolico o meno) al clone che si utilizza effettivamente.

<!>   Il clone vi più importante è vim che è stato portato su diversi sistemi. In particolare, la versione Dos è in grado di gestire file di dimensione molto grande (diversi Megabyte) anche su sistemi i286 con i classici 640KB.

Origini di vi

I primi programmi di scrittura per i file di testo permettevano di visualizzare e di intervenire su una sola riga alla volta. Questo è il caso di ed per gli ambienti Unix e di edlin per il Dos.

vi è uno dei primi programmi per editing ad utilizzare tutto lo schermo per visualizzare le righe del testo su cui si opera. Da qui deriva lo stesso nome vi: VIsual.

A sua volta, vi è la derivazione di un programma precedente, ex di tipo a singola linea. Ma questa eredità è servita per incorporare i comandi tipici di ex.

Avvio di vi

vi [<opzioni>] [<file>... ]

vi può essere avviato o meno con l'indicazione di un file sul quale intervenire. Se questo file esiste, viene aperto e si ottiene la visualizzazione del suo contenuto per permetterne la modifica. Se non esiste, verrà creato.

È anche possibile l'indicazione di alcune opzioni, tra cui, le più importanti sono le seguenti.

Quando si avvia vi senza indicare alcun file, appare una schermata simile a quella della figura (seguente) in cui le righe dello schermo contrassegnate dal simbolo tilde (~) rappresentano lo spazio non utilizzato dal file.


Avvio del programma vi.

Normalmente, vi può essere avviato utilizzando nomi diversi: per rispettare le tradizioni o per definire implicitamente degli attributi.

view [<opzioni>] [<file>... ]

Di solito, view è un link al clone vi che si ha a disposizione. Di norma, quando vi viene avviato con questo nome, si comporta come se gli fosse stata data l'opzione -R: sola lettura.

ex [<opzioni>] [<file>... ]

Come già accennato, ex è il programma da cui è derivato vi. Generalmente, nelle distribuzioni Linux, si trova un link (simbolico o meno) con questo nome che punta a vi. Alcuni cloni di vi, quando sono avviati con questo nome, tendono a comportarsi in maniera leggermente differente.

Modalità di funzionamento

vi distingue diverse modalità di funzionamento, altrimenti definibili come stati o contesti. Quando si avvia, vi si trova di solito nella modalità di comando che permette di usare determinati tasti attribuendogli significati speciali (di comando). Quando si vuole agire per inserire o modificare del testo, occorre utilizzare un comando con il quale vi passa alla modalità di inserimento e modifica.

Per complicare ulteriormente le cose, c'è da aggiungere che esistono in realtà due tipi di comandi: visual e colon. I comandi visual sono i più semplici e si compongono di brevi sequenze di uno o più tasti il cui inserimento non appare in alcuna parte dello schermo e si concludono senza la pressione del tasto [Invio]; i comandi colon iniziano tutti con il simbolo : (da cui il nome colon), terminano con [Invio] e dal momento che possono essere un po' più complicati, durante la digitazione appaiono sulla riga inferiore dello schermo. In particolare, i comandi colon sono quelli derivati dal programma ex.

La modalità di inserimento si riferisce al momento in cui è possibile modificare il testo. Per passare dalla modalità di comando a quella di inserimento, si preme la lettera [i] (inserisce prima del cursore) o la lettera [a] (inserisce dopo il cursore).

Per tornare alla modalità di comando, da quella di inserimento, è sufficiente premere il tasto [Esc]. Quando ci si trova già nella modalità di comando, la pressione del tasto [Esc] non produce alcunché o al massimo interrompe l'introduzione di un comando, di conseguenza, se lo si usa inavvertitamente o troppo, non ne derivano inconvenienti.

Lo svantaggio principale di questo tipo di approccio è quello di dover passare alla modalità di comando per qualunque operazione diversa dal puro inserimento di testo. Anche lo spostamento del cursore avviene attraverso dei comandi, obbligando l'utente a premere il tasto [Esc] prima di poter utilizzare i tasti per il suo spostamento.

Tuttavia, i cloni più diffusi di vi addolciscono un po' il suo funzionamento introducendo l'uso dei tasti freccia nel modo consueto dei programmi di scrittura più recenti.

Posizione attiva

Per la descrizione del funzionamento di vi è importante definire il concetto di ``posizione attiva'' che si riferisce al punto in cui si trova il cursore. Estendendo il significato, si può parlare di riga attiva, colonna attiva e parola attiva, intendendo quelle su cui si trova il cursore.

Moltiplicatori

Prima di affrontare i comandi di vi è importante comprendere che l'effetto di molti di questi può essere ``moltiplicato'' utilizzando un numero. Il concetto è molto semplice e si richiama alla matematica: 2a = a+a.

Inserimento

Come già accennato, si può inserire o modificare del testo solo quando si passa alla modalità di inserimento attraverso il comando i (insert) oppure a (append). Durante questa fase, tutti i simboli della tastiera servono per inserire del testo. Nel caso del programma vi standard si può usare:

Nel caso di cloni più sofisticati, è normalmente concesso l'uso dei tasti freccia e in alcuni casi anche del tasto [Canc].

Per tutte le altre operazioni di modifica del testo si deve passare alla modalità di comando.


vi durante la fase di inserimento di testo.

I comandi a disposizione per passare alla modalità di inserimento sono molti e non si limitano quindi ai due modi appena descritti. La tabella (seguente) ne elenca alcuni.


Comando Descrizione
I Inserisce all'inizio della riga attiva.
i Inserisce prima della posizione attiva.
A Aggiunge alla fine della riga attiva.
a Aggiunge dopo la posizione attiva.
O Inserisce prima della riga attiva (inserendo una riga).
o Aggiunge dopo la riga attiva (inserendo una riga).
Elenco dei comandi utilizzabili per passare alla modalità di inserimento.

Navigazione

Come già accennato, lo spostamento del cursore, e di conseguenza della posizione attiva, avviene per mezzo di comandi che generalmente obbligano a terminare la fase di inserimento. I cloni di vi più recenti permettono l'uso dei tasti freccia durante la modalità di inserimento (oltre che durante la modalità di comando), ma questo è solo un minimo aiuto: in generale è necessario tornare alla modalità di comando.

I comandi normali per lo spostamento del cursore sono le lettere h, j, k e l che rispettivamente spostano il cursore a sinistra, in basso, in alto e a destra. La ragione della scelta di queste lettere sta nella vicinanza di queste nella maggior parte delle tastiere.

Salvo casi particolari e situazioni in cui questo concetto non è ragionevolmente applicabile, i comandi di spostamento, preceduti da un numero, vengono ripetuti tante volte quante ne rappresenta quel numero. Per esempio, il comando 2h sposta il cursore a sinistra di due posizioni.

Per raggiungere una determinata riga è possibile utilizzare il comando nG o :n (in quest'ultimo caso, seguito da [Invio])

Per esempio, per raggiungere la decima riga di un ipotetico documento si può utilizzare indifferentemente uno dei due comandi seguenti.

10G

:10 [Invio]

Per fare scorrere il testo di una schermata alla volta si utilizzano le combinazioni di tasti [Ctrl+B] e [Ctrl+F] che rispettivamente spostano il testo all'indietro e in avanti (Back e Forward)

I comandi a disposizione per lo spostamento sono ovviamente numerosi, la tabella (seguente) ne elenca alcuni.


Comando Descrizione
h Sposta il cursore a sinistra di un carattere.
j Sposta il cursore in basso nella riga successiva.
k Sposta il cursore in alto nella riga precedente.
l Sposta il cursore a destra di un carattere.
- Sposta il cursore all'inizio della riga precedente.
+ Sposta il cursore all'inizio della riga successiva.
w Sposta il cursore all'inizio della parola successiva.
e Sposta il cursore alla fine della parola successiva.
b Sposta il cursore all'inizio della parola precedente.
^ Sposta il cursore all'inizio della prima parola della riga.
0 Sposta il cursore all'inizio della riga.
$ Sposta il cursore alla fine della riga.
H Sposta il cursore sulla prima riga che appare sullo schermo.
M Sposta il cursore sulla riga centrale dello schermo.
L Sposta il cursore sull'ultima riga che appare sullo schermo.
G Sposta il cursore sull'ultima riga del file.
nG Sposta il cursore sulla riga identificata dal numero n.
| Sposta il cursore sulla prima colonna (all'inizio della riga).
n| Sposta il cursore sulla colonna identificata dal numero n.
:n Sposta il cursore sulla riga identificata dal numero n.
Ctrl+B Fa scorrere il testo all'indietro di una schermata.
Ctrl+F Fa scorrere il testo in avanti di una schermata.
Ctrl+U Fa scorrere il testo all'indietro di mezza schermata.
Ctrl+D Fa scorrere il testo in avanti di mezza schermata.
Elenco dei comandi utilizzabili per la navigazione all'interno del testo.

Esempi

5w

Sposta il cursore all'inizio della quinta parola successiva.

2b

Sposta il cursore all'inizio della seconda parola precedente.

5G

Sposta il cursore all'inizio della quinta riga.

4|

Sposta il cursore sulla quarta colonna.

Modificatori

I comandi di spostamento, esclusi quelli che iniziano con i due punti (:) e quelli che si ottengono per combinazione ([Ctrl+...]), possono essere utilizzati come ``modificatori'' di altri comandi.

All'interno di vi manca il concetto di: ``zona di intervento''. Per definire l'estensione di un comando lo si può far precedere da un moltiplicatore (un numero) e/o seguire da un comando di spostamento. Il comando di spostamento viene utilizzato in questo caso per definire una zona che va dalla posizione attiva a quella di destinazione del comando, e su questa zona interverrà il comando precedente.

Per poter applicare questo concetto, è però necessario che i comandi, da utilizzare in associazione con i modificatori (di spostamento), siano stati previsti per questo. Deve trattarsi cioè di comandi che richiedono questa ulteriore aggiunta.

Come si vedrà in seguito, il comando x permette di cancellare quello che appare sotto al cursore. Quando viene premuto il tasto [x] si ottiene subito la cancellazione del carattere, e per tale ragione, a questo genere di comandi non si può far seguire alcun modificatore. Questo tipo di comandi può solo essere preceduto da un moltiplicatore.

Si comporta diversamente il comando d che invece deve essere seguito da un modificatore e con questo definisce una zona da cancellare. Per esempio, dw cancella dalla posizione attiva fino all'inizio della prossima parola e d$ cancella dalla posizione attiva fino alla fine della riga.

Cancellazione

Durante la fase di inserimento è possibile cancellare solo il carattere appena scritto utilizzando il tasto [Backspace], sempre che il clone di vi a disposizione lo consenta, altrimenti si ottiene solo l'arretramento del cursore. Per qualunque altro tipo di cancellazione occorre passare alla modalità di comando.

I comandi di cancellazione più importanti sono x, d seguito da un modificatore, e dd. Il primo cancella il carattere che si trova in corrispondenza della posizione attiva, cioè del cursore, il secondo cancella dalla posizione attiva fino all'estensione indicata dal modificatore e il terzo cancella tutta la riga attiva. Con vi non è possibile cancellare il carattere che conclude una riga (newline), di conseguenza, per unire due righe insieme si utilizza il comando J oppure j (bisogna provare).


Comando Descrizione
x Cancella il carattere che si trova sulla posizione attiva.
J oppure j Unisce la riga attiva con quella successiva.
dd Cancella la riga attiva.
d<mod> Cancella dalla posizione attiva fino all'estensione indicata dal modificatore.
D agisce come d$.
Elenco dei comandi utilizzabili per cancellare.

Esempi

5x

Ripete 5 volte la cancellazione di un carattere. In pratica, cancella 5 caratteri.

2dd

Ripete 2 volte la cancellazione di una riga. In pratica, cancella la riga attiva e quella seguente.

dw

Cancella a partire dalla posizione attiva, fino al raggiungimento della prossima parola.

2dw

Ripete per due volte il tipo di cancellazione dell'esempio precedente. In pratica cancella fino all'inizio della seconda parola.

d2w

Cancella a partire dalla posizione attiva, fino al raggiungimento della seconda parola successiva. In pratica, esegue la stessa operazione del comando 2dw.

db

Cancella a ritroso, dalla posizione corrente, fino all'inizio della prima parola che viene incontrata.

d$

Cancella a partire dalla posizione attiva, fino alla fine della riga.

d5G

Cancella dalla posizione attiva fino all'inizio della riga numero 5.

Sostituzione

La modifica del testo inserito può avvenire attraverso i comandi di cancellazione già visti, oppure attraverso comandi di sostituzione. Generalmente si tratta di comandi che prima cancellano parte del testo e subito dopo attivano l'inserimento.

I comandi di sostituzione più importanti sono c seguito da un modificatore, e cc. Il primo sostituisce dalla posizione attiva fino all'estensione indicata dal modificatore e il secondo sostituisce tutta la riga attiva.

A fianco di questi se ne aggiungono un paio che possono essere utili proprio per il fatto che non passano alla modalità di inserimento: rx e ~. Il primo sostituisce il carattere in corrispondenza del cursore con quello rappresentato da x e il secondo inverte le lettere minuscole in maiuscole e viceversa.


Comando Descrizione
C Sostituisce dalla posizione attiva alla fine della riga.
cc Sostituisce la riga attiva a partire dall'inizio.
c<mod> Sostituisce dalla posizione attiva fino all'estensione indicata dal modificatore.
rx Rimpiazza quanto contenuto nella posizione attiva con x.
~ Inverte maiuscole e minuscole.
Elenco dei comandi di sostituzione e rimpiazzo.

Esempi

cc

Sostituisce la riga attiva.

c$

Sostituisce a partire dalla posizione attiva fino alla fine della riga.

rb

Rimpiazza il carattere che si trova nella posizione attiva con la lettera b.

10~

Inverte le lettere maiuscole e minuscole a partire dalla posizione attiva, per dieci caratteri.

Copia e spostamento di porzioni di testo

La gestione della copia e dello spostamento di testo attraverso vi è un po' complicata. Per questa attività si utilizzano delle memorie di transito, o buffer, alle quali si possono accodare diverse parti di testo.

L'operazione con la quale si copia una porzione di testo in un buffer viene detta yanking (estrarre) e questo giustifica l'uso della lettera y nei comandi che compiono questa funzione.

I buffer per lo spostamento o la copia di testo possono essere 27: uno per ogni lettera dell'alfabeto e uno aggiuntivo senza nome.

Il modo più semplice di gestire questo meccanismo è quello di usare il buffer senza nome. Per copiare una porzione di testo si può utilizzare il comando y seguito da un modificatore, oppure il comando yy che invece si riferisce a tutta la riga attiva. Per incollare il testo copiato, dopo aver posizionato il cursore nella posizione di destinazione, si può utilizzare il comando p oppure P, a seconda che si intenda incollare prima o dopo la posizione del cursore.

Il comandi p e P non cancellano il buffer, di conseguenza, se serve si può ripetere l'operazione di inserimento riutilizzando questi comandi.

Se invece di copiare si vuole spostare il testo, al posto di usare i comandi di yanking si possono usare quelli di cancellazione che, anche se non era stato chiarito precedentemente, prima di cancellare il testo fanno una copia nel buffer.


Comando Descrizione
yy Copia la riga attiva nel buffer.
y<mod> Copia nel buffer il testo fino all'estensione indicata dal modificatore.
dd Trasferisce la riga attiva nel buffer.
d<mod> Trasferisce nel buffer il testo fino all'indicazione dal modificatore.
p Incolla prima della posizione del cursore.
P Incolla dopo la posizione del cursore.
Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso del buffer senza nome.

Esempi

5yy

Copia nel buffer 5 righe a partire da quella attiva.

yw

Copia nel buffer il testo che parte dalla posizione attiva fino all'inizio della prossima parola.

y$

Copia nel buffer il testo che parte dalla posizione attiva fino alla fine della riga.

3dd

Sposta nel buffer tre righe a partire da quella attiva.

2P

Incolla due copie del testo contenuto nel buffer a partire dalla posizione a sinistra del cursore.

Copia e spostamento con nome

Quando si vogliono utilizzare dei buffer specifici, cioè identificati attraverso le lettere dell'alfabeto, si procede nei modi già visti nel caso dell'uso del buffer senza nome, con la differenza che i comandi sono preceduti da "x, dove x è la lettera che si vuole usare.

Si introduce però una novità importante: è possibile aggiungere del testo a un buffer: basta indicare il buffer attraverso una lettera maiuscola.


Comando Descrizione
"xyy Copia la riga attiva nel buffer x
"xy<mod> Copia nel buffer x il testo fino all'indicazione dal modificatore.
"xdd Trasferisce la riga attiva nel buffer x.
"xd<mod> Trasferisce nel buffer x il testo fino all'indicazione dal modificatore.
"xp Incolla il contenuto del buffer x prima del cursore.
"xP Incolla il contenuto del buffer x dopo il cursore.
Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso dei buffer con nome.

Esempi

"adw

Sposta il testo nel buffer a a partire dalla posizione attiva fino all'inizio della prossima parola.

"a5yy

Copia 5 righe nel buffer a a partire dalla posizione attiva (inclusa).

"A3yy

Aggiunge 3 righe nel buffer a a partire dalla posizione attiva (inclusa).

"a2P

Incolla due copie del contenuto del buffer a a partire dalla posizione precedente a quella su cui si trova il cursore.

Ricerche

Per effettuare delle ricerche all'interno del documento aperto con vi si possono utilizzare le espressioni regolari (appendice `Espressioni regolari') attraverso due comandi un po' strani: / e ?. La sintassi per la ricerca in avanti è

/<modello>

mentre per la ricerca a ritroso è la seguente.

?<modello>

Nel momento in cui si preme la barra o il punto interrogativo, vi visualizza il comando nella riga inferiore dello schermo permettendone il controllo e la correzione come avviene per i comandi colon (cioè quelli che iniziano con i due punti). Al termine, l'inserimento di questo tipo di comando deve essere concluso con un [Invio].


Comando Descrizione
/<modello> Cerca in avanti una corrispondenza con il modello indicato.
?<modello> Cerca all'indietro una corrispondenza con il modello indicato.
n Ripete l'ultimo comando / o ?.
N Ripete l'ultimo comando / o ? in modo inverso .
I comandi di ricerca attraverso espressioni regolari.

Il tipo di espressione regolare che può essere utilizzato con vi è solo quello elementare e valgono in particolare le regole indicate nella tabella (seguente).


Simbolo Descrizione
. Corrisponde a un carattere qualsiasi.
\ Fa perdere il significato speciale che può avere il carattere seguente.
^ Corrisponde all'inizio di una riga.
$ Corrisponde alla fine di una riga.
[abc] Corrisponde a un carattere qualsiasi tra quelli tra parentesi quadre.
[^abc] Corrisponde a un carattere qualsiasi diverso da quelli tra parentesi quadre.
[a-z] Un carattere qualsiasi nell'intervallo compreso tra a e z.
[^a-z] Un carattere qualsiasi diverso dall'intervallo compreso tra a e z.
Le espressioni regolari di vi.

Ricerche e sostituzioni

La ricerca e sostituzione sistematica avviene attraverso un comando colon particolare. La sua sintassi è la seguente.

:<inizio>,<fine>s/<modello-da-cercare>/<sostituzione>/[g][c]

L'indicazione <inizio> e <fine> fa riferimento alle righe su cui intervenire. Si possono indicare dei numeri, oppure dei simboli con funzioni simili. Il simbolo $ può essere usato per indicare l'ultima riga del file. Un singolo punto (.) rappresenta la riga attiva. Il simbolo % viene invece utilizzato da solo per indicare tutte le righe del file.

Il modello utilizzato per la ricerca viene espresso secondo la forma delle espressioni regolari.

Il valore da sostituire al modello cercato è normalmente fisso, ma può contenere un riferimento alla stringa trovata, attraverso il simbolo &.

La direttiva g specifica che si deve intervenire su tutte le occorrenze della corrispondenza con il modello, altrimenti la sostituzione riguarda solo la prima di queste.

La direttiva c specifica che ogni sostituzione deve essere espressamente confermata.

Esempi

:1,$s/pippo/pappa/g

Sostituisce ogni occorrenza della parola pippo con la parola pappa. La ricerca viene effettuata a partire dalla prima riga fino all'ultima.

:%s/pippo/pappa/g

Questo è un modo alternativo per eseguire la stessa operazione dell'esempio precedente: il simbolo % rappresenta da solo tutte le righe del file.

:.,10s/^..//g

Elimina i primi due caratteri (^..) da dieci righe a partire da quella attiva.

:%s/^..//gc

Esegue la stessa operazione dell'esempio precedente, applicando la sostituzione su tutto il file, richiedendo però conferma per ogni sostituzione.

:.,10s/^/xxxx&/g

Inserisce la stringa xxxx all'inizio di dieci righe a partire da quella attiva.

Annullamento dell'ultimo comando

vi permette di annullare l'ultimo comando inserito attraverso il comando u. A seconda del tipo di clone utilizzato, richiamando nuovamente il comando u si riottengono le modifiche precedentemente annullate oppure si continuano ad annullare gli effetti dei comandi precedenti.


Comando Descrizione
u Annulla l'ultimo comando.
U Annulla le modifiche sulla riga attiva.
Annullamento di un comando.

Caricamento, salvataggio e conclusione

Il file o i file utilizzati per l'editing vengono normalmente aperti attraverso l'indicazione nella riga di comando, al momento dell'avvio di vi.

Il salvataggio di un file può essere fatto per mezzo del comando :w (Write) eventualmente seguito dal nome del file (quando si vuole salvare con un nome diverso oppure quando si sta creando un nuovo file).

La conclusione dell'attività di vi si ottiene con il comando :q

I comandi possono essere combinati tra loro, per esempio quando di vuole salvare e concludere la attività simultaneamente con il comando :wq.

Il punto esclamativo (!) può essere usato alla fine di questi comandi per forzare le situazioni, come quando si vuole concludere l'attività senza salvare con il comando :q!.

Dal momento che vi non mostra normalmente alcuna informazione sul file su cui si opera (compreso il nome), il comando :f (oppure la combinazione [Ctrl-G]) mostra sulla riga inferiore dello schermo: il nome del file aperto, le dimensioni e il numero della riga attiva.


Comando Descrizione
:e <nomefile> Carica il file indicato per iniziare l'editing.
:e! Ricarica il file annullando le modifiche fatte nel frattempo.
:r <nomefile> Legge il file indicato e ne inserisce il contenuto dopo la riga attiva.
:f Mostra il nome e le caratteristiche del file aperto.
:w Salva.
:w <nomefile> Salva una copia con il nome indicato.
:wq Salva e termina l'esecuzione.
:q Fine lavoro.
:q! Fine lavoro forzato.
I comandi per il caricamento dei file e il loro salvataggio.


vi durante l'esecuzione del comando :w, prima della pressione conclusiva del tasto [Invio]

Variabili

vi ha ereditato dal programma ex delle variabili di configurazione. Per attivare una variabile si utilizza il comando seguente

:set [no]<nome-della-variabile>

Il prefisso no, prima del nome della variabile, serve per disattivarla.

La tabella (seguente) mostra l'elenco di alcune di queste variabili.


Variabile Descrizione
autoindent Mantiene i livelli di rientro nelle nuove righe.
beautify Elimina i caratteri speciali non stampabili.
ignorecase Nelle ricerche, ignora la differenza tra maiuscole e minuscole.
list Mostra i caratteri di tabulazione e di nuova linea (newline).
number Visualizza i numeri delle righe.
Variabili utilizzate da vi attraverso il comando :set.

Esempi

:set nolist

Disabilita la visualizzazione dei caratteri di tabulazione e di fine riga.

:set number

Visualizza i numeri di riga.

Comandi particolari

Di seguito sono elencati una serie di comandi particolari che non sono stati inclusi nelle categorie precedenti.

---------

mx

Etichetta la posizione corrente con la lettera rappresentata da x. Valgono solo le lettere minuscole. Il testo non viene modificato.

'x

Sposta il cursore all'inizio della riga che contiene l'etichetta rappresentata da x.

[Ctrl+L]

Riscrive la schermata: se sono apparsi messaggi che possono dare fastidio alle operazioni di editing, questo comando permette di farli scomparire mostrando il testo effettivo del file sul quale si sta lavorando.

:!<comando>

Esegue il comando di shell indicato.

:ab <abbreviazione> <testo-da-sostituire>

Permette di stabilire una abbreviazione che verrà sistematicamente sostituita con tutto quello che segue il comando. Se si usa :ab da solo, si ottiene un elenco delle abbreviazioni disponibili.

File di configurazione

Può essere utilizzato il file ~/.exrc per personalizzare la configurazione di vi attraverso comandi colon (quelli tipici di ex). Le cose più comuni che appariranno all'interno di questo file saranno la definizione di abbreviazioni e la definizione di alcune variabili. Segue un esempio.

:ab lx Linux
:ab xwin X Window System
:set autoindent
:set number

Problemi di portabilità

Uno dei vantaggi importanti nell'uso di vi sta nella disponibilità di cloni di questo programma per qualsiasi piattaforma. All'inizio di questo gruppo di sezioni su vi si accennava al fatto che esiste una ottima versione Dos in grado di funzionare molto bene anche con i vecchi computer dotati di poca memoria.

Quando si trasferiscono testi da un sistema Linux a Dos e viceversa si pone il problema del set di caratteri a disposizione: su Linux si utilizza presumibilmente la codifica Latin-1, mentre con il Dos no.

La soluzione più semplice a questo problema è probabilmente quella di usare Latin-1 in generale e di convertire le lettere accentate Dos in Latin-1 quando possibile. Per questo è possibile realizzare un semplice file di comandi da eseguire automaticamente utilizzando l'opzione -s.

Le sigle ~E, ~J, ecc. rappresentano le lettere accentate della codifica utilizzata nei sistemi Dos. Per scrivere un file del genere, occorrono due fasi: una in un ambiente che accetti la codifica Latin-1 e l'altra in Dos.

:1,$s/~E/à/g
:1,$s/~J/è/g
:1,$s/~B/é/g
:1,$s/~M/ì/g
:1,$s/~U/ò/g
:1,$s/~W/ù/g

In pratica, la sintassi da usare all'avvio di vi dovrebbe essere la seguente.

vi -s <file-comandi> <file-da-elaborare>

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice