[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


67. Creazione e modifica di file di testo

Il programma più importante che è necessario conoscere quando ci si avvicina a un nuovo sistema operativo è quello che permette di creare e modificare i file di testo normale. Nel caso dei sistemi Unix, è indispensabile conoscere VI, oltre ad altri applicativi simili che possono risultare più comodi da usare.

L'azione con la quale si indica l'intervento su un file del genere, viene spesso identificata con la parola inglese editing, per cui alle volte questi programmi applicativi vengono identificati come degli editor.

67.1 VI

Nei sistemi Unix, l'applicativo 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 qualcosa 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à.

Per GNU/Linux, non esiste in circolazione una versione originale di VI, ma tante interpretazioni di questo, con potenzialità più o meno ampliate. Per tale motivo, `/bin/vi' è solitamente un collegamento (simbolico o meno) al programma che si utilizza effettivamente.

La realizzazione di VI più importante è quella del programma `vim' che è stato portato su diversi sistemi. In particolare, la versione Dos è in grado di gestire file di dimensioni molto grandi (diversi Megabyte) anche su sistemi i286 che dispongono soltanto dei classici 640 Kbyte di memoria RAM.

67.1.1 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 applicativi per la scrittura e la modifica di file di testo a utilizzare tutto lo schermo per visualizzare le righe del testo su cui si opera. Da ciò deriva il nome che fa riferimento al suo comportamento «visuale» (VIsual).

A sua volta, VI è la derivazione di un programma precedente, EX, che si limitava a gestire una sola riga alla volta. Ma questa eredità è servita per incorporare i comandi tipici di EX.

67.1.2 Avvio

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

L'eseguibile `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 elencate di seguito:

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

_
~
~
~
~
~
~
~
~
Empty Buffer

Figura 67.1: Avvio di VI.

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

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

Di solito, `view' è un collegamento alla realizzazione di VI che si ha a disposizione. Di norma, quando l'eseguibile di 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 (precisamente l'eseguibile `ex') è il programma da cui è derivato VI. Generalmente, nelle distribuzioni GNU/Linux si trova un collegamento (simbolico o meno) con questo nome che punta a `vi'. Alcune realizzazioni di VI, quando sono avviati con questo nome, tendono a comportarsi in maniera leggermente differente.

67.1.3 Modalità di funzionamento

VI distingue diverse modalità di funzionamento, altrimenti definibili come stati o contesti. Quando si avvia VI, questo si trova di solito nella modalità di comando che permette di usare tasti determinati, 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: «visuali» (visual) e «due punti» (colon). I comandi visuali sono i più semplici e si compongono di 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 «due punti» iniziano tutti con il simbolo `:' (da cui il nome), terminano con [Invio], e dal momento che possono essere un po' più complicati, durante la digitazione appaiono sulla riga inferiore dello schermo. In particolare, questi ultimi sono quelli derivati da 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 il tasto corrispondente alla lettera «i» (inserimento prima del cursore) o alla lettera «a» (inserimento 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, le realizzazioni più diffuse di VI addolciscono un po' il suo funzionamento introducendo l'uso dei tasti freccia nel modo consueto dei programmi di scrittura più recenti.

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

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

67.1.6 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. Con il VI standard si può usare:

Con le realizzazioni di VI più sofisticate, è concesso normalmente 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.

Il mio primo documento scritto con vi.

Non è facile, ma ne vale ugualmente la pena_
~
~
~
~
~
~
-- INSERT --

Figura 67.2: 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 67.1 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).

Tabella 67.1: Elenco dei comandi utilizzabili per passare alla modalità di inserimento.

67.1.7 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. Le realizzazioni 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 aiuto minimo: 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.

                                    +-----+  +-----+  +-----+  +-----+
                                    | H   |  | J   |  | K   |  | L   |
                                    |  <- |  |  \/ |  |  /\ |  |  -> |
                                    +-----+  +-----+  +-----+  +-----+

Figura 67.3: Promemoria visuale per i comandi che permettono spostamento del cursore.

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 riga determinata è possibile utilizzare il comando `nG' o `:n' (in quest'ultimo caso, seguito da [Invio])

Per esempio, per raggiungere la decima riga di un documento ipotetico, 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 67.2 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.

Tabella 67.2: 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.

67.1.8 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 in più, o in alternativa, lo si può fare 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.

Tuttavia, per poter applicare questo concetto, è 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 in corrispondenza del 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.

67.1.9 Cancellazione

Durante la fase di inserimento è possibile cancellare solo il carattere appena scritto utilizzando il tasto [Backspace], sempre che la realizzazione 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 (il codice di interruzione di riga), 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$'.

Tabella 67.3: Elenco dei comandi utilizzabili per cancellare.

Esempi

5x

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

2dd

Ripete due 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 cinque.

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

Tabella 67.4: 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.

67.1.11 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 aree temporanee di memoria alle quali si possono accodare diverse parti di testo.

L'operazione con la quale si copia una porzione di testo in un'area temporanea di memoria viene detta yanking, ovvero estrazione, e questo giustifica l'uso della lettera «y» nei comandi che compiono questa funzione.

Le aree temporanee di memoria per lo spostamento o la copia di testo possono essere 27: una per ogni lettera dell'alfabeto e una aggiuntiva senza nome.

Il modo più semplice di gestire questo meccanismo è quello di usare l'area temporanea 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 contenuto dell'area temporanea, 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 estrazione si possono usare quelli di cancellazione, che, anche se non era stato chiarito precedentemente, prima di cancellare il testo fanno una copia nell'area temporanea.

Comando Descrizione
yy Copia la riga attiva nell'area temporanea.
y<mod> Copia nell'area temporanea il testo fino all'estensione indicata dal modificatore.
dd Trasferisce la riga attiva nell'area temporanea.
d<mod> Trasferisce nell'area temporanea il testo fino all'indicazione dal modificatore.
p Incolla prima della posizione del cursore.
P Incolla dopo la posizione del cursore.

Tabella 67.5: Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso dell'area temporanea di memoria senza nome.

Esempi

5yy

Copia nell'area temporanea cinque righe a partire da quella attiva.

yw

Copia nell'area temporanea il testo che parte dalla posizione attiva fino all'inizio della prossima parola.

y$

Copia nell'area temporanea il testo che parte dalla posizione attiva fino alla fine della riga.

3dd

Sposta nell'area temporanea tre righe a partire da quella attiva.

2P

Incolla due copie del testo contenuto nell'area temporanea a partire dalla posizione a sinistra del cursore.

67.1.12 Copia e spostamento con nome

Quando si vogliono utilizzare delle aree temporanee di memoria specifiche, cioè identificate attraverso le lettere dell'alfabeto, si procede nei modi già visti nel caso dell'uso dell'area temporanea 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'area temporanea: basta indicarla attraverso una lettera maiuscola.

Comando Descrizione
"xyy Copia la riga attiva nell'area temporanea x
"xy<mod> Copia nell'area temporanea x il testo fino all'indicazione dal modificatore.
"xdd Trasferisce la riga attiva nell'area temporanea x.
"xd<mod> Trasferisce nell'area temporanea x il testo fino all'indicazione dal modificatore.
"xp Incolla il contenuto dell'area temporanea x prima del cursore.
"xP Incolla il contenuto dell'area temporanea x dopo il cursore.

Tabella 67.6: Elenco dei comandi per le operazioni di copia e spostamento di testo che fanno uso delle aree temporanee con nome.

Esempi

"adw

Sposta il testo nell'area temporanea `a', a partire dalla posizione attiva fino all'inizio della prossima parola.

"a5yy

Copia cinque righe nell'area temporanea `a', a partire dalla posizione attiva (inclusa).

"A3yy

Aggiunge tre righe nell'area temporanea `a', a partire dalla posizione attiva (inclusa).

"a2P

Incolla due copie del contenuto dell'area temporanea `a', a partire dalla posizione precedente a quella su cui si trova il cursore.

67.1.13 Ricerche

Per effettuare delle ricerche all'interno del documento aperto con VI si possono utilizzare le espressioni regolari (capitolo 182) 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 il tasto della barra obliqua o del punto interrogativo, VI visualizza il comando nella riga inferiore dello schermo permettendone il controllo e la correzione come avviene per i comandi 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 .

Tabella 67.7: 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 67.8.

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.

Tabella 67.8: Le espressioni regolari che dovrebbero essere disponibili con la maggior parte delle realizzazioni di VI.

Esempi

/[Ll]inux

Cerca in avanti tutte le stringhe corrispondenti a «Linux» oppure «linux».

/\.$

Cerca in avanti il punto finale di una riga (si osservi l'uso della barra obliqua inversa per togliere il significato speciale che ha il punto in un'espressione regolare).

67.1.14 Ricerche e sostituzioni

La ricerca e sostituzione sistematica avviene attraverso un comando particolare che inizia con i due punti. 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 punto singolo (`.') 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.

Normalmente, il valore da sostituire al modello cercato è 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 confermata espressamente.

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.

67.1.15 Annullamento dell'ultimo comando

VI permette di annullare l'ultimo comando inserito attraverso il comando `u'. A seconda della realizzazione di VI utilizzata, richiamando nuovamente il comando `u' si riottengono le modifiche annullate precedentemente, oppure si continuano ad annullare gli effetti dei comandi precedenti.

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

Tabella 67.9: Annullamento di un comando.

67.1.16 Caricamento, salvataggio e conclusione

Il file o i file utilizzati per la modifica (compresi quelli che si creano) vengono aperti normalmente attraverso l'indicazione nella riga di comando, al momento dell'avvio dell'eseguibile `vi'.

Il salvataggio di un file può essere fatto per mezzo del comando `:w' (Write) seguito eventualmente dal nome del file (quando si vuole salvare con un nome diverso oppure quando si sta creando un file nuovo). 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 l'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 riferita al 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 poterlo modificare.
: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.

Tabella 67.10: I comandi per il caricamento dei file e il loro salvataggio.

Il mio primo documento scritto con vi.

Non è facile, ma ne vale ugualmente la pena
~
~
~
~
~
~
:w esempio_

Figura 67.4: VI durante l'esecuzione del comando `:w', prima della pressione conclusiva del tasto [Invio]

67.1.17 Variabili

VI ha ereditato da EX delle variabili di configurazione. Non si tratta di variabili di ambiente, ma di variabili interne a VI. 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 67.11 mostra l'elenco di alcune di queste variabili.

Variabile Descrizione
autoindent Mantiene i livelli di rientro nelle righe nuove.
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 interruzione di riga.
number Visualizza i numeri delle righe.
ruler Visualizza le coordinate del cursore alla base dello schermo.

Tabella 67.11: 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.

67.1.18 Comandi particolari

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

67.1.19 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

67.1.20 Problemi di portabilità

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

Quando si trasferiscono testi da un sistema GNU/Linux a Dos e viceversa si pone il problema dell'insieme di caratteri a disposizione: su GNU/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 si può realizzare un semplice file di comandi da eseguire automaticamente utilizzando l'opzione `-s'. *1*

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

In generale, i problemi legati alla conversione di un file da un insieme di caratteri all'altro, si risolvono attraverso l'uso di `recode', descritto nel capitolo 235.

67.2 AE

AE è un programma per la creazione e la modifica di file di testo che non ha doti particolari, però viene utilizzato alle volte, anche in sostituzione a VI, date le sue dimensioni ridotte e la sua configurabilità. In pratica, è importante conoscere l'uso elementare di AE perché si potrebbe essere costretti a usarlo quando ci si trova in condizioni di emergenza.

67.2.1 Configurazione di AE

AE, pur essendo un programma che utilizza poche risorse, consente una configurazione dettagliata del suo funzionamento. Questo permette di solito di farlo funzionare in modo simile a VI o a Emacs. In generale, non è il caso di intervenire nella configurazione, tuttavia è bene sapere come si articola.

Il file di configurazione generale è `/etc/ae.rc', mentre per una configurazione particolare, AE utilizza il file `./ae.rc', se esiste, oppure il file `~/ae.rc' (nella directory personale dell'utente).

L'eseguibile `ae' può essere avviato anche con l'opzione `-f' per indicare un file di configurazione alternativo. Questo fatto viene sfruttato alle volte per realizzare degli script che permettono di avviarlo al posto di altri programmi del genere, utilizzando la configurazione migliore per emularne il comportamento.

67.2.2 Avvio di AE

ae [-f <file-di-configurazione>] [<file>]

La sintassi per l'utilizzo dell'eseguibile `ae' è molto semplice, e si spiega praticamente da sola: se si usa l'opzione `-f' si intende indicare esplicitamente un file di configurazione particolare.

File "" 0 bytes.
File read and write  ^X I ^X^S      Left, down, up, right   ^B  ^N  ^P  ^F
Version, exit, quit  ^X^V ^X^C ^Q   Word left and right     <esc>B  <esc>F
Macros               ^M             Page down and up        ^V      <esc>V
Help on and off      ^X^H           Front and end of line   ^A      ^E
Redraw               ^L             Top and end of file     <esc><  <esc>>
Insert               typed keys     Delete left and right   BACKSPACE DEL
Literal escape       ^[             Block, cut, paste       ^@   ^W   ^Y
Undo                 ^_             Invert case             <esc>C
....5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
_
<< EOF >>











Figura 67.5: Avvio di AE.

In condizioni normali, avviando AE senza indicare argomenti si dovrebbe vedere quello che qui viene mostrato nella figura 67.5. Nella parte superiore dello schermo vengono riepilogati i comandi più importanti, annotati con la simbologia tradizionale del tipo `^x', a rappresentare delle combinazioni di tasti del tipo [Ctrl+x].

Se si utilizza AE da una console virtuale di GNU/Linux, non si dovrebbero avere problemi a spostare il cursore con i tasti freccia e gli altri tasti usati solitamente per questi scopi; inoltre, dal quadro che si vede, dovrebbe essere chiaro che si possono usare i comandi [Ctrl+x][i] e [Ctrl+x][Ctrl+s], rispettivamente per caricare e per salvare un file.

67.2.3 Compatibilità con VI

AE può essere configurato per funzionare in modo simile a VI. È il caso di sottolineare questo fatto, perché può capitare di dover usare un sistema GNU/Linux minimo di emergenza in cui con il comando `vi' si ottiene invece l'avvio di AE in una modalità pseudo-VI: è proprio questa compatibilità incompleta che può creare disagio in quelle situazioni.

La configurazione normale di AE per l'uso compatibile con VI, fa sì che AE si presenti normalmente come si vede nella figura 67.6 (dove in particolare AE viene usato per modificare il file `/etc/lilo.conf').

Dal riepilogo dei comandi nella parte superiore dello schermo si possono riconoscere alcuni comandi tipici di VI, tuttavia, si deve tenere presente che quelli che iniziano con i classici due punti (`:'), non vengono mostrati nella parte bassa dello schermo, come invece accade nella tradizione, ma si digitano alla cieca.

File "/etc/lilo.conf" 295 bytes read.
File read and write     :r      :w      Left, down, up, right   h,j,k,l
exit and abort          :q      :q!     Word left and right     b       w
Macros                  :map            Page down and up        PgDn PgUp
Help on and off         F1              Front and end of line   0       $
Version Redraw          :ver    ^L       Top and bottom of file  Home End
Insert                  i               Delete left and right   X       x
Open                    O       o       Append                  A       a
Delete                  dd      d[wb0]  Copy                    yy      y[wb0]
Literal escape          ^V               Block, cut, and paste   F2  F3  F4
Undo                    u               Invert case             ~
Print   (only upper)    P       p       Shift   (only right)    >>
....5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.1-1
        label=linux
        root=/dev/hda4
        append="console=tty10"
        read-only
image=/boot/vmlinuz-2.2.1-2

Figura 67.6: Avvio di AE con la configurazione che lo rende compatibile con VI.

Per esempio, volendo salvare le modifiche del file, occorre digitare il comando `:w' seguito da [Invio], senza vederlo apparire da nessuna parte.

67.3 Joe

Joe è solo uno tra i tanti programmi adatti per la creazione e la modifica di file di testo. Il vantaggio principale di questo programma è l'assenza di una modalità di comando distinta da quella di inserimento del testo, come invece avviene con VI. Il suo difetto principale è l'assenza di un menu.

Può gestire più file contemporaneamente, collocandoli all'interno di finestre differenti.

67.3.1 Configurazione di Joe

A prima vista non sembrerebbe, ma Joe è un programma altamente configurabile. Per questo viene utilizzato un file di configurazione contenente opzioni predefinite, comandi della tastiera e schede di guida (help).

Il file di configurazione viene cercato:

La distribuzione normale di Joe fornisce diversi file di configurazione, che vengono presi in considerazione a seconda del nome utilizzato per avviare il programma (per esempio attraverso un collegamento simbolico).

Le indicazioni sul funzionamento di Joe che appaiono nelle sezioni seguenti, fanno riferimento alla configurazione normale, quella contenuta nel file `/usr/lib/joe/joerc' che viene utilizzata in modo predefinito quando l'utente avvia il programma con il suo nome originale e non ha predisposto alcuna configurazione personalizzata.

Se si vuole personalizzare la configurazione, conviene copiare questo file nella propria directory personale e rinominarlo, in modo da ottenere `~/.joerc'.

67.3.2 Avvio di Joe

joe [<opzioni-globali>] [[<opzioni-particolari>]<file>]...

L'eseguibile `joe' può essere avviato o meno con l'indicazione di uno o più file su cui intervenire. I file indicati, esistenti, vengono aperti e collocati ognuno in una finestra del programma, mentre quelli che non esistono verranno creati.

Le opzioni sono suddivise in due gruppi: quelle globali che intervengono su tutti i file e sono collocate prima di qualunque indicazione di file; quelle particolari che precedono il nome del file a cui si riferiscono.

Joe può essere avviato con altri nomi, attraverso la predisposizione di collegamenti, oppure modificando direttamente il nome dell'eseguibile. A seconda del nome, viene utilizzato un file di configurazione differente che adatta Joe al funzionamento di altri programmi del genere. Per conoscere queste caratteristiche particolari, si può consultare la documentazione originale.

Alcune opzioni globali

-asis

Uno dei problemi a cui si va incontro quando si utilizza un programma da utilizzare in un terminale a caratteri è quello della codifica ASCII che può essere visualizzata sullo schermo. Generalmente è consentita la visualizzazione dei codici che utilizzano il primi 7 bit, cosa che esclude le lettere accentate e altri simboli speciali.

Questa opzione fa in modo che si utilizzi una codifica a 8 bit, visualizzando così tutti i simboli. Se il terminale a disposizione non lo consente, è meglio non attivare questa opzione: Joe mostrerà dei simboli alternativi, evidenziandoli in modo da lasciare intendere che in realtà si tratta di qualcosa d'altro.

-exask

La conclusione normale dell'attività con un file coincide con il salvataggio dello stesso (si ottiene con la sequenza [Ctrl+k][x]). Con questa opzione, si vuole fare in modo che venga sempre richiesta una conferma, in modo da avere la possibilità di cambiare nome.

-help

Visualizza il riassunto dei comandi a disposizione nella parte superiore dello schermo, come quando si utilizza la sequenza [Ctrl+k][h].

-marking

Con questa opzione si facilita la visualizzazione del testo che viene marcato quando si vuole iniziare un'operazione di taglia-copia-incolla.

-lightoff

Con questa opzione si fa in modo che al termine di un'operazione di copia, il testo non sia più evidenziato. Potrebbe non essere opportuno attivare questa opzione quando si intendono eseguire varie operazioni di copia successive con lo stesso blocco di partenza.

Alcune opzioni particolari

-crlf

Fa in modo che le righe siano terminate con la sequenza <CR><LF> come si fa nell'ambiente Dos.

-rdonly

Il file viene aperto in sola lettura.

Quando si avvia Joe senza l'indicazione di alcuna opzione, né di alcun file, il programma si presenta come nella figura 67.7. Viene mostrata una finestra centrale destinata a contenere il testo di un file da creare, con sopra una riga di stato e in basso le note sul copyright.

    IW   Unnamed                      Row 1    Col 1   10:07  Ctrl-K H for help
_

















** Joe's Own Editor v2.8 ** Copyright (C) 1995 Joseph H. Allen **l-K H for help

Figura 67.7: Avvio di Joe.

Come si può osservare, sulla riga di stato appaiono: le lettere `I' e `W' che stanno rispettivamente per Insert e Wrap; il nome del file, in questo caso `Unnamed'; la posizione del cursore; l'ora; un promemoria che ricorda come fare per richiamare la guida interna (con la sequenza [Ctrl+k][h]).

La riga di stato viene aggiornata a intervalli regolari di un secondo, e questo per non appesantire il sistema con un'attività che in generale non è urgente.

Una funzione importante della riga di stato è quella di visualizzare, nella parte sinistra, l'inserimento di un comando composto da una sequenza di tasti, in modo da poter controllare ciò che si sta facendo o ciò che non è stato terminato.

La riga inferiore dello schermo viene utilizzata normalmente per l'inserimento di informazioni che completano un comando, come il nome di un file da salvare o da caricare. Quando questa parte non viene utilizzata, la finestra contenente il testo del file su cui si lavora si riappropria di quello spazio.

67.3.3 Comandi

I comandi che si possono impartire a Joe sono generalmente in forma di sequenza di tasti iniziata da una combinazione con il tasto [Ctrl]. Da un punto di vista tecnico, questo è un vantaggio, perché non si usano combinazioni con un tasto [meta] che può essere un problema attraverso un terminale. Con questo programma, non esistono quindi le modalità di funzionamento che distinguono tra la fase di inserimento e modifica e la fase di comando, come avviene invece con VI.

Teoricamente si può fare tutto utilizzando solo combinazioni con il tasto [Ctrl], anche se in pratica, quando il terminale lo consente, conviene utilizzare anche tasti con funzionalità comuni come i tasti freccia, i tasti pagina, [Backspace], [Canc] e [Esc]. In particolare, conviene ricordare che [Esc] corrisponde a [Ctrl+[] («control», «parentesi quadra aperta»).

La documentazione di Joe e la sua guida interna, utilizzano la notazione tradizionale per indicare le combinazioni di tasti e le sequenze di questi. per cui, `^KH' rappresenta la sequenza [Ctrl+k][h].

Tutto quello che si fa con Joe può essere interrotto con la combinazione [Ctrl+c]. Se si stava introducendo un comando, questo viene annullato, mentre se ci si trovava semplicemente a inserire o modificare il testo, viene proposta la conclusione (senza salvataggio) dell'attività su quel file particolare. Fortunatamente viene chiesta una conferma, e si può annullare nuovamente con un'ulteriore combinazione [Ctrl+c].

67.3.4 Guida interna

La guida interna di Joe è semplicemente un promemoria di comandi che occupano la parte superiore dello schermo, e lasciano la parte inferiore per le operazioni di inserimento e modifica del testo. Per visualizzarla, e successivamente per farla scomparire, si utilizza la sequenza [Ctrl+k][h], come suggerisce la riga di stato nella parte destra.

La figura 67.8 mostra un esempio di questa guida.

   Help Screen    turn off with ^KH    more help with ESC . (^[.)
 CURSOR           GO TO            BLOCK      DELETE   MISC         EXIT
 ^B left ^F right ^U  prev. screen ^KB begin  ^D char. ^KJ reformat ^KX save
 ^P up   ^N down  ^V  next screen  ^KK end    ^Y line  ^T  options  ^C  abort
 ^Z previous word ^A  beg. of line ^KM move   ^W >word ^R  refresh  ^KZ shell
 ^X next word     ^E  end of line  ^KC copy   ^O word< ^@  insert   FILE
 SEARCH           ^KU top of file  ^KW file   ^J >line SPELL        ^KE edit
 ^KF find text    ^KV end of file  ^KY delete ^_ undo  ^[N word     ^KR insert
 ^L  find next    ^KL to line No.  ^K/ filter ^^ redo  ^[L file     ^KD save
    IW   Unnamed                      Row 1    Col 1   10:24  Ctrl-K H for help
_








Figura 67.8: La guida interna di Joe.

La guida si compone di diverse schede. La prima di queste è quella che si vede nella figura, mentre le successive si ottengono con la sequenza [Esc][.] (escape punto). Quando si scorre tra le schede, per tornare a una scheda precedente si utilizza la sequenza [Esc][,] (escape virgola).

67.3.5 Inserimento e modifica normali

La scrittura e la modifica di testo avviene nel modo più semplice: la pura digitazione. Come ripetuto più volte, Joe non distingue la modalità di inserimento e modifica da quella di comando, perché i comandi utilizzano combinazioni di tasti a base di [Ctrl]. La tabella 67.12 riassume brevemente le possibilità esistenti.

Comando Alternativa Descrizione
Caratteri normali Inseriscono il testo corrispondente.
Ctrl+h Backspace Cancella il carattere a sinistra del cursore.
Ctrl+d Canc Cancella il carattere in corrispondenza del cursore.
Invio Inserisce un'interruzione di riga.
Ctrl+y Elimina la riga su cui si trova il cursore.
Ctrl+j Elimina il testo tra il cursore e la fine della riga.
Ctrl+_ Ctrl+- Annulla l'ultimo comando, compresa la digitazione.
Ctrl+^ Ctrl+ì Ripete l'ultimo comando annullato, compresa la digitazione.
Ctrl+r Ripristina il testo sullo schermo.

Tabella 67.12: Riepilogo delle funzionalità di inserimento e modifica di testo con Joe.

È importante ricordare che i caratteri che utilizzano più di 7 bit non vengono visualizzati se non si specifica l'opzione `-asis' o se non si configura il file `~/.joerc' in tal senso.

67.3.5.1 Caratteri di controllo e metacaratteri

Joe consente di utilizzare delle sequenze particolari di simboli per l'inserimento di codici ASCII che non possono essere scritti altrimenti. Per l'inserimento di questi codici, si possono usare due tipi di sequenze denominate: caratteri di controllo e metacaratteri.

La tecnica dei caratteri di controllo utilizza il simbolo apice inverso (``') per iniziare la sequenza relativa. Quello che segue può essere un numero decimale di tre cifre, oppure un numero esadecimale o un numero ottale. Quando si preme ``' appare infatti il promemoria seguente che ricorda le tre possibilità.

Ctrl- (or 0-9 for dec. ascii, x for hex, or o for octal)   

I codici che non possono essere rappresentati e appartengono alla fascia che va da 0 a 31 in decimale, vengono rappresentati con i simboli `@', `A', `B', `C' ... `X', `Y', `Z', `[', `^', `]', `\' e `_'. Tali simboli, se il terminale lo consente, appaiono sottolineati.

I codici che non possono essere rappresentati e appartengono alla fascia che va da 128 in poi, appaiono nella forma dei caratteri corrispondenti che si ottengono togliendo l'ottavo bit (ovvero sottraendo 128), ma invertiti.

La tecnica dei metacaratteri utilizza la sequenza [Ctrl+\][x], dove x corrisponde al carattere che si ottiene togliendo l'ottavo bit al simbolo che invece si vuole ottenere. Quando si preme [Ctrl+\], prima di premere il tasto finale, appare un invito a completare il metacarattere nell'ultima riga dello schermo.

Meta-

Quando si dispone di un terminale configurato correttamente, ci sono poche probabilità di dover utilizzare i caratteri di controllo o i metacaratteri per inserire lettere accentate o altri simboli particolari, dal momento che la tastiera dovrebbe rispondere correttamente. Quando però ci si trova a utilizzare un terminale mal configurato, queste tecniche diventano molto importanti.

Nello stesso modo, se possibile, conviene utilizzare una visualizzazione sullo schermo a 8 bit, in modo da vedere correttamente tutti i simboli che compongono l'insieme di caratteri per cui è configurato il proprio sistema (per l'Italia dovrebbe trattarsi di ISO 8859-1). Se però il terminale non lo consente, la visualizzazione attraverso l'inversione del testo è comunque un'ottima via di scampo.

La tabella 67.13 elenca le corrispondenze tra le lettere accentate e i caratteri corrispondenti quando si elimina l'ottavo bit.

ISO 8859-1 Simbolo corrispondente
à `
è h
é i
ì l
ò r
ù y
À @
È H
É I
Ì L
Ò R
Ù Y

Tabella 67.13: Lettere accentate e simboli corrispondenti nei terminali a 7 bit, quando la codifica a 8 bit di partenza è ISO 8859-1.

67.3.6 Navigazione

La navigazione del cursore all'interno del testo avviene in modo semplice e intuitivo attraverso l'uso dei tasti freccia e pagina, quando possibile, altrimenti con combinazioni di tasti abbastanza facili. Una particolarità importante di questo programma è la possibilità di raggiungere facilmente la zona del testo dove sono state fatte modifiche in precedenza. La tabella 67.14 elenca i tasti e le combinazioni utili per la navigazione del cursore nel testo.

Tasto o combinazione Risultato
tasti freccia Spostano il cursore di una posizione nella direzione indicata dal tasto.
Ctrl+f Spostamento a destra di un carattere.
Ctrl+b Spostamento a sinistra di un carattere.
Ctrl+p Spostamento in alto di una riga.
Ctrl+n Spostamento in basso di una riga.
tasti pagina Spostano il testo in modo verticale di un numero consistente di righe.
Ctrl+u Spostamento alla schermata precedente.
Ctrl+v Spostamento alla schermata successiva.
Ctrl+k u Spostamento all'inizio del file.
Ctrl+k v Spostamento alla fine del file.
Ctrl+k l n Spostamento alla riga n.
Ctrl+k - Spostamento alla posizione della modifica precedente.
Ctrl+k = Spostamento alla posizione della modifica successiva.

Tabella 67.14: Comandi utili per la navigazione con Joe quando è configurato nel modo predefinito.

67.3.7 Gestione dei file e conclusione

Joe permette di gestire diversi file contemporaneamente. Per questo, ogni file viene inserito in una finestra differente. Queste finestre possono essere visibili contemporaneamente, e in tal caso si dividono lo spazio sullo schermo, oppure possono essere semplicemente sovrapposte.

Le operazioni di caricamento e salvataggio riguardano sempre solo la finestra attiva, cioè quella in cui si trova il cursore e che risulta visibile. La finestra che viene creata eredita tutte le sue caratteristiche da quella attiva nel momento della creazione, compreso il file in essa contenuto.

La tabella 67.15 elenca i comandi utili per la gestione di file e finestre.

Comando Descrizione
Ctrl+k e <file> Carica il file indicato in una nuova finestra.
Ctrl+k r <file> Inserisce il file indicato nella posizione del cursore.
Ctrl+k d <file> Salva eventualmente confermando o cambiando il nome del file.
Ctrl+k x Salva ed elimina la finestra attiva.
Ctrl+c Termina il lavoro della finestra attiva senza salvare.
Ctrl+k o Crea una nuova finestra dividendo in due lo schermo.
Ctrl+k i Ingrandisce al massimo la finestra attiva, oppure suddivide lo schermo tra le finestre.
Ctrl+k n Passa alla finestra successiva.
Ctrl+k p Passa alla finestra precedente.

Tabella 67.15: Comandi per la gestione di file e finestre.

La figura 67.9 mostra uno schermo diviso in due finestre.

    IW   AppuntiLinux/esempi/COPYING  Row 1    Col 1   10:37  Ctrl-K H for help

                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                          675 Mass Ave, Cambridge, MA 02139, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

    IW   Unnamed (Modified)           Row 1    Col 11  10:37  Ctrl-K H for help
Ciao mondo_







Figura 67.9: Due finestre che si dividono lo spazio dello schermo.

Vale la pena di tenere a mente quanto segue:

67.3.8 Taglia, copia, incolla e blocchi di testo

Una della caratteristiche più importanti di Joe è quella di poter intervenire attraverso le operazioni consuete di taglia-copia-incolla anche su porzioni verticali di testo.

La segnalazione del testo da tagliare o copiare avviene attraverso le sequenza [Ctrl+k][b], per l'inizio, e [Ctrl+k][k], per la posizione oltre la fine del blocco. Normalmente, il blocco selezionato risulta evidenziato.

Per tutto il tempo in cui il blocco risulta evidenziato, è possibile incollare attraverso [Ctrl+k][c], nella posizione in cui si trova il cursore, tagliare (nel senso di eliminare) attraverso [Ctrl+k][y], o spostare con la sequenza [Ctrl+k][m]. Il testo evidenziato può anche essere salvato in un file differente, attraverso [Ctrl+k][w]

Normalmente, la selezione del testo avviene nel modo tradizionale, verso destra e poi vero il basso, oppure verso sinistra e poi verso l'alto. È possibile attivare la modalità di selezione rettangolare attraverso [Ctrl+t][x]. Quando questa modalità è attivata, si dovrebbe notare una lettera `X' sulla barra di stato, nella parte sinistra.

La possibilità di selezionare un blocco di testo rettangolare (o verticale) fa sì che poi si possa incollare e spostare un blocco del genere, trattando il testo come una tabella.

La tabella 67.16 elenca i comandi utili per la gestione dei blocchi di testo.

Comando Descrizione
Ctrl+k b Segnala l'inizio di un blocco di testo.
Ctrl+k k Segnala la fine di un blocco di testo.
Ctrl+k c Incolla un blocco di testo.
Ctrl+k y Cancella un blocco di testo.
Ctrl+k m Sposta un blocco di testo.
Ctrl+k w Salva un blocco di testo in un file.
Ctrl+t x Passa alla modalità di selezione rettangolare oppure a quella normale.

Tabella 67.16: Comandi per la gestione dei blocchi di testo.

67.3.9 Modalità varie e formattazione del testo

Un programma per la gestione di file di testo può richiedere comportamenti differenti a seconda del tipo di file su cui si opera. In particolare può essere importante che il testo vada a capo da solo, oppure può essere preferibile il contrario. Nello stesso modo, si può desiderare che il testo scritto venga inserito in sovrascrittura, oppure nel modo normale.

La tabella 67.17 elenca alcuni comandi utili per la formattazione del testo.

Comando Descrizione
Ctrl+t w Suddivide automaticamente le righe, o meno.
Ctrl+k j Riformatta il paragrafo in base ai margini stabiliti.
Ctrl+t l n Definisce il margine sinistro (di n colonne).
Ctrl+t r n Definisce il margine destro (di n colonne).
Ctrl+t t Scambio delle modalità di sovrascrittura e inserimento.

Tabella 67.17: Comandi per la formattazione del testo.

67.3.10 Ricerche e sostituzioni

La ricerca di una stringa, o di un modello, si inizia con la sequenza [Ctrl+k][f].

Find (^C to abort):

Dopo l'inserimento della stringa, o del modello, viene richiesto il modo in cui effettuare la ricerca.

(I)gnore (R)eplace (B)ackwards Bloc(K) NNN (^C to abort):

Premendo semplicemente [Invio] si inizia una ricerca in avanti, altrimenti occorre indicare una o più istruzioni, attraverso l'uso di lettere o numeri, in relazione al tipo di azione che si intende compiere:

Quando la ricerca viene fatta con l'opzione `r' allo scopo di sostituire le stringhe, viene richiesta la stringa da utilizzare nella sostituzione.

Replace with (^C to abort):

Una volta inserita e premuto [Invio] inizia la ricerca, e in presenza di una corrispondenza viene richiesto se si intende sostituire o meno il testo.

Replace (Y)es (N)o (R)est (B)ackup (^C to abort)?

Joe consente di utilizzare delle espressioni per la ricerca, in modo da definire un modello particolare. In modo simile, è consentito anche l'utilizzo di espressioni per la sostituzione. Queste espressioni ricordano vagamente le espressioni regolari. Per conoscerne l'utilizzo si può consultare la documentazione: joe(1). Vale la pena di rammentare che `\\' rappresenta una singola barra obliqua inversa, mentre `\n' rappresenta il codice di interruzione di riga.

[Ctrl+l] consente di ripetere una ricerca.

67.3.11 Completamento e storico

Quando il programma propone un invito a inserire qualche tipo di informazione (si pensi a quando si salva o si carica un file), è possibile utilizzare il tasto [Tab] per tentare di ottenere il completamento del nome. Se il nome non può essere completato, la pressione ulteriore di quel tasto fa apparire l'elenco delle possibilità.

Nello stesso modo, si possono usare i tasti [freccia su] o [freccia giù] per recuperare un'informazione inserita in precedenza nella stessa situazione. Si ottiene cioè lo scorrimento dello storico dei dati inseriti.

67.3.12 Considerazioni finali

Joe è un programma per la gestione dei file di testo piuttosto potente. Molte delle sue caratteristiche non sono state analizzate qui, soprattutto non sono analizzate le sue possibilità di configurazione.

Come già suggerito, se si intende utilizzare assiduamente questo programma conviene consultare la sua documentazione originale: joe(1).

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


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


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]