Un'operazione comune, editare i file con "vim"
Programmare e configurare applicazioni, il tutto comporta la scrittura di testo,
linee di codice, opzioni di configurazione. Riuscire ad editare e' fondamentale.
Esiste un editor molto popolare e fornito con tutte le distribuzioni Linux, cioe' vim (VIM - Vi IMproved).
Fornito con Linux RedHat, Linux Mandrake ed altre,
rappresenta l'editor ancora oggi piu' usato sotto Linux, specialmente per lavorare in remoto, grazie alla potenza
ed alle scarse risorse occupate. In realta', "vim" e' un'interfaccia all'editor di linea "ed"
Si tratta di un editor un po' complicato da usare, soprattutto perche' non molto intuitivo da comprendere. Una
volta abituati, pero', non se ne puo' quasi fare a meno.
"vi" ha due modalita' di funzionamento: la modalita' di inserimento dei comandi (quella di default) e la modalita'
di scrittura o modifica del contenuto. La prima serve ad inserire dei comandi particolari quali il salvataggio
di un file, l'undo (annullamento) delle modifiche fatte, la ricerca del testo, il posizionamento ad una
linea ben precisa, il matching delle parentesi, ecc. La modalita' di scrittura o modifica, invece, serve a creare o
alterare il contenuto del file scrivendolo direttamente.
In pratica, tutto cio' che viene scritto nella modalita' di comando, viene interpretato come un comando per "vi",
mentre quello che viene scritto nell'altra modalita', viene considerato testo.
Supponiamo di aprire il file "qualcosa.conf" con vim: "vim qualcosa.conf".
Appena entrati in vim, ci si trova in modalita' di inserimento dei comandi, con il file visualizzato a partire dalla
prima riga.
Cambiamento modalita' di funzionamento
Il cambiamento della modalita' di funzionamento avviene in modo diverso a seconda di quella in cui ci si trova.
Vediamo i comandi principali.
Dalla Modalita' di inserimento comandi, premere
- [i], per passare alla modalita' di scrittura/inserimento: apparira' la scritta "INSERT". Sara' possibile
inserire il proprio testo alla posizione indicata dal cursore, senza sovrascrivere quello eventualmente gia' presente
- [INS], stesso effetto di "i"
- [due volte INS], per passare alla modalita' di scrittura/sostituzione: apparira' la scritta "REPLACE". Sara'
possibile inserire il proprio testo alla posizione indicata dal cursore, sovrascrivendo, pero', quello eventualmente gia'
presente
- [o], per aggiungere una linea vuota sotto quella dove e' posizionato il cursore e per entrare nella modalita'
di scrittura/inserimento (vedi comando "i")
- [O], come "o" ma inserisce la linea sopra a quella dove e' posizionato il cursore
- [a], per entrare nella modalita' di scrittura/inserimento ed iniziare ad inserire il proprio testo dopo il carattere
sul quale e' posizionato il cursore
- [A], per entrare nella modalita' di scrittura/inserimento ed iniziare a scrivere alla fine della riga su cui
e' posizionato il cursore
- [s], per entrare nella modalita' di scrittura/inserimento e sostituire
il carattere presente alla posizione del cursore con il testo digitato in seguito
- [S], per entrare nella modalita' di scrittura/inserimento e sostituire la riga sulla quale e' posizionato il
cursore con il testo digitato successivamente
- [C], per entrare nella modalita' di scrittura/inserimento e cancellare il testo a partire dalla posizione
del cursore, fino alla fine della riga
Dalla Modalita' di scrittura, premere
- [ESC], per passare alla modalita' di inserimento dei comandi. Non sara' piu' possibile inserire testo digitandolo
con la tastiera, fino al successivo ritorno alla modalita' di scrittura
Movimento all'interno del testo
Dalla Modalita' di inserimento comandi, premere (o scrivere se c'e' "*")
- [FRECCIA ALTO], per muovere il cursore verso l'alto
- [FRECCIA BASSO], per muovere il cursore verso il basso
- [FRECCIA DESTRA], per muovere il cursore verso destra
- [FRECCIA SINISTRA], per muovere il cursore verso sinistra
- [k], per muovere il cursore verso l'alto
- [j], per muovere il cursore verso il basso
- [l], per muovere il cursore verso destra
- [h], per muovere il cursore verso sinistra
- [^], per spostare il cursore all'inizio della riga
- [HOME], come "^" ("HOME" e' il tasto sopra "FINE" ed accanto ad "INS" nella maggior parte delle tastiere)
- [$], per spostare il cursore alla fine della riga
- [FINE], come "$"
- [PAG ALTO], per spostarsi velocemente verso l'alto
- [PAG BASSO], per spostarsi velocemente verso il basso
- [w], per spostare il cursore all'inizio della parola successiva
- [b], per spostare il cursore all'inizio della parola precedente
- [e], per spostare il cursore alla fine della parola su cui e' posizionato il cursore
- [(], per spostare il cursore all'inizio della frase precedente. Attenzione, che una frase finisce con
un punto seguito da uno spazio
- [)], per spostare il cursore alla fine della frase successiva. Attenzione, che una frase finisce con
un punto seguito da uno spazio
- * [:num], dove "num" e' un numero intero, per posizionare il cursore sulle riga numero "num". Premere
"INVIO" alla fine
- * [numG], come ":num"
Dalla Modalita' di scrittura, premere
- [FRECCIA ALTO], per muovere il cursore verso l'alto
- [FRECCIA BASSO], per muovere il cursore verso il basso
- [FRECCIA DESTRA], per muovere il cursore verso destra
- [FRECCIA SINISTRA], per muovere il cursore verso sinistra
- [HOME], per spostare il cursore all'inizio della riga ("HOME" e' il tasto sopra "FINE" ed accanto ad
"INS" nella maggior parte delle tastiere)
- [FINE], per spostare il cursore alla fine della riga
- [PAG ALTO], per spostarsi velocemente verso l'alto
- [PAG BASSO], per spostarsi velocemente verso il basso
Funzioni di editing
Cancellare testo, copiarlo, incollarlo, ecc., rappresentano le classiche funzioni di editing.
Dalla Modalita' di inserimento comandi, premere (o scrivere se c'e' "*")
- * [dnumd], dove "num" e' un numero intero, per cancellare "num" righe a partire dalla posizione del
cursore
- * [dd], per cancellare la riga su cui e' posizionato il cursore
- [CANC], per cancellare il carattere alla posizione del cursore
- [BACKSPACE], per spostare il cursore di un carattre a sinistra e per cancellare, successivamente allo spostamento,
il carattere su cui e posizionato il cursore stesso ("BACKSPACE" e' il tasto per cancellare, usualmente posto sopra "INVIO")
- [x], come "CANC"
- [u], per annullare le modifiche in ordine cronologico inverso, cioe' a partire dall'ultima effettuata
- [CTRL+r], per riscrivere quanto annullato. Utile, ad esempio, se ci si e' sbagliati ad annullare una
modifica con "u"
- [v], per iniziare ad evidenziare del testo. Muoversi nel testo per evidenziare la parte voluta
- [ y], per copiare in un buffer il testo evidenziato (da usare appena e' stato evidenziato il testo voluto con "v")
- [x], per tagliare il testo evidenziato con "v" e copiarlo in un buffer
- [p], per incollare alla posizione del cursore il testo tagliato con "x" o copiato con "y"
Dalla Modalita' di scrittura, premere
- [CANC], per cancellare il carattere alla posizione del cursore
- [BACKSPACE], per spostare il cursore di un carattre a sinistra e per cancellare, successivamente allo spostamento,
il carattere su cui e posizionato il cursore stesso ("BACKSPACE" e' il tasto per cancellare, usualmente posto sopra "INVIO")
Comandi relativi al filesystem
Fanno parte di questi comandi quelli relativi al salvataggio, al caricamento, all'inserimento da un file esterno, ecc.
Per la gestione di piu' file, si usa una buffer list, con un sistema di navigazione da un file all'altro.
Dalla Modalita' di inserimento comandi, premere (o scrivere se c'e' "*")
- * [:w], per salvare il file. Attenzione, che "w" scrive il file anche se non ci sono state modifiche. Premere "INVIO"
alla fine
- * [:w!], come "w", ma forza il salvataggio (o almeno ci prova) anche quando non e' consentito (es. file di
sola lettura). Premere "INVIO" alla fine
- * [:w nomefile], per salvare il file con un nome nuovo. Premere "INVIO" alla fine
- * [:r nomefile], per inserire alla posizione del cursore il file indicato in "nomefile". Premere "INVIO"
alla fine
- * [:r !com], per inserire l'output del comando "com" all'interno del testo, alla posizione del cursore.
Esempio: ":r !ps -aux". Premere "INVIO" alla fine
- * [:badd], per aggiungere un file alla buffer list. Premere "INVIO" alla fine
- * [:bnext], per passare al file successivo. Premere "INVIO" alla fine
- * [:bprevious], per passare al file precedente. Premere "INVIO" alla fine
- * [:files], per vedere quali file sono presenti nella buffer list. Premere "INVIO" alla fine
- * [:bnum], per passare direttamente ad un file particolare fra quelli presenti nella buffer list. L'associazione
numero-file puo' essere trovata con ":files". "num" e' il numero del file. Premere "INVIO" alla fine
- * [:bdelete num], per eliminare il file numero "num" dalla buffer list. L'associazione numero-file puo'
essere trovata con ":files". Premere "INVIO" alla fine
- * [:x], per salvare il file ed uscire da vi. Premere "INVIO" alla fine
- * [q], per uscire da "vim". Premere "INVIO" alla fine
- * [q!], per forzare l'uscita da "vim". Attenzione, eventuali modifiche non salvate potrebbero essere perse. A
differenza di "q", non viene chiesto di salvare eventuali modifiche non salvate in precedenza. Premere "INVIO" alla fine>
Altre funzioni o comandi
Dalla Modalita' di inserimento comandi, premere (o scrivere se c'e' "*")
- [CTRL+g], per ottenere statistiche sulla posizione del cursore (numero di linea, numero di colonna, percentuale del
testo a cui si trova, nome del file, altro
- [/], seguito da un'espressione regolare (che puo' anche essere un semplice testo) per cercare la prima occorrenza
del testo/espressione inserito. Premere "INVIO" alla fine
- [n], per cercare l'occorrenza successiva a quella gia' trovata con "/"
- [£], per cercare la successiva occorrenza della parola su cui e' posizionato il cursore<
- [%], per fare il matching delle parentesi, ovvero per trovare dove sia l'apertura (o la chiusura) della parentesi
sulla quale e' posizionato il cursore. Funziona con parentesi tonde, quadre e graffe
Filtrare testo attraverso comandi esterni
Un'ultima potenzialita' che mi piacerebbe esporre, riguarda il filtraggio di parte del testo attraverso dei comandi esterni.
Dopo aver mostrato la regola generale, seguira' un esempio particolare e molto utile.
- Selezionare con "v" il testo da filtrare (vedi "Funzioni di editing")
- Appena selezionato il testo, premere "!"
- Scrivere di seguito il comando il cui input deve essere il testo selezionato
Il testo selezionato con "v" sara' sostituito con il risultato dell'elaborazione del comando fornito.
Ad esempio, supponiamo di avere un elenco disordinato di nomi,
Giovanni
Aldo
Mario
Elena
Valeria
Alessandra
e di volerlo ordinare alfabeticamente. Tutto cio' puo' essere fatto con l'ausilio del comando esterno "sort".
Seguendo la procedura indicata, scrivendo "!sort" dopo aver selezionato l'elenco, si otterra' il seguente risultato
Aldo
Alessandra
Elena
Giovanni
Mario
Valeria
Conclusione
I comandi messi a disposizione da "vim" sono tantissimi e non si esauriscono con quei pochi mostrati. Ho cercato di
illustrare i comandi principali, ovvero quelli che consentono di lavorare da subito in modo decente.
Per ottenere un aiuto completo, digitare ":help" dalla modalita' di inserimento comandi e premere [INVIO].
Si aprira' una finestra con le istruzioni per chiuderla e per visualizzare i vari argomenti.
Notare, che non tutti i comandi potrebbero essere attivi o supportati in tutte le versioni di vim.
|