[Giochi] [Giochi] [About] [Copertina] [iomega ZIP] [iomega ZIP]

Articoli


Di piu`

Nell'articolo apparso nel numero precedente, avevo brevemente introdotto 'vi', passando in rassegna i comandi principali per muoversi all'interno dell'editor, per editare un file, inserendo o modificando il testo, e per ripristinare il testo prima delle ultime modifiche ('undo').

Questi, secondo me, erano le cose principali da sapere per poter cominciare a lavorare sui file usando 'vi'.

'vi' è da molti considerato l'editor dei casi ``disperati'', delle situazioni di emergenza, in cui per esempio, si è perso i dati della propria partizione Linux, e si è costretti ad usare un boot disk di emergenza su cui vi è l'unico editor presente (di solito non c'è emacs, per ovvie ragioni);
in realtà 'vi' non è certo limitato nelle sue potenzialità, e a saperlo usare può risultare molto efficiente e comodo.

Ancora sull'editing del testo

Dimenticavo, nel precedente articolo, di nominare i comandi per la 'sostituzione' del testo. Capita spesso infatti che, piuttosto che aggiungere testo, lo si voglia sostituire. Ecco quindi che risultano utili i comandi:
R          sovrascrive il testo 
s	   sostituisce il carattere corrente
cw	   cambia il testo della parola corrente
           (change word)
cnw        cambia il testo delle n parole seguenti
           (change n word)

Yank & Paste

Veniamo alle cose più interessanti e che fanno di un editor uno strumento veramente utile.

Ciò che abbiamo visto fino ad adesso, ci permette agilmente di manipolare piccoli file di testo, modificandoli a piacere. Succede, però, di trovarsi di fronte a file di una certa dimensione, in cui molte righe andrebbero riscritte, altre cancellate, alcune spostate o modificate solo in parte.

Ritorna utile in questi casi, l'uso delle funzionalità di copia di cui dispone 'vi'.

Spostare una frase, per esempio, richiede tre passi fondamentali:

Guarda caso, il comando che permette lo 'Yank' è y, con tutte le sue varianti, quali:
yy         sposta una copia della linea corrente        
           nel buffer (lo stesso fa il comando Y)
nyy        sposta le n righe successive nel buffer
Il testo viene così copiato in un buffer; buffer che viene di solito designato come 'unnamed', cioè senza nome. È il buffer di default, e il fatto che esista implica chiaramente che ne esistono altri 'named' che verranno identificati da una lettera dell'alfabeto. Ne esitono quindi, altri 26 buffer.
Per identificare un buffer, 'vi' usa il carattere ``"''. Per copiare, perciò, una linea nel buffer chiamato 'a', basta usare il comando: "ayy.

Il comando 'p' serve ovviamente a fare il paste; per questo comando ci sono le classiche varianti, che ormai dovreste essere in grado di intuire da soli :-).

Search & Replace

Sempre se stiamo lavorando su file di una certa dimensione, un altro problema che può sorgere è quello dell'individuazione di una stringa all'interno del testo del file. Io di solito uso il comando ``/'' (slash) seguito dalla stringa da cercare. Il cursore viene automaticamente posizionato all'occorrenza della prima stringa. In realtà questa è solo una delle possibilità. Il comando ``/'' cerca a destra e fino alla fine del testo. Il comando ``?'', invece a sinistra e fino all'inizio del testo.

Se volessi poi modificare il testo che cerco, facendo una operazione di 'replace' devo usare un comando con una sintassi di questo tipo:

:,s//replace/g Comando Generale

esempio:

:1, $s/the/The/g    cerca in tutto il file e sostituisce
                    the in The

Basta, non ne posso più

D'accordo. Quello che è scritto in questo e nell'articolo precedente è più che sufficiente a soddisfare ogni vostra esigenza, ma non è ovviamente tutto. Se proprio volete saperne di più vi conviene cominciare con un classico 'man vi'.
Oppure cercate in una qualunque libreria e troverete sicuramente diversi libri su 'vi': è il vantaggio di cui si possono vantare solo i programmi ottimi e da lungo tempo utilizzati come questo piccolo, ma grande editor.

Di Davide Barbieri

[Giochi] [Giochi] [About] [Copertina] [iomega ZIP] [iomega ZIP]