Un'operazione comune, editare i file con "vim"
✍ Scritto: Giansante Gabriele, 2001 ↺ Aggiornato: 06/10/2016
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,
Manpage di VIM (1)
).
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' principali di funzionamento: la
modalita' di inserimento dei comandi (quella di default) e la
modalita'
di scrittura o modifica del contenuto. Ne esiste anche una terza, la
modalita' visuale, ma verra' esaminata brevemente piu' avanti.
La prima serve ad inserire dei comandi particolari quali il salvataggio
di un file, l'annullamento (
undo) 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
A seconda della modalita' in cui ci si trova e' possibile compiere le azioni descritte nella seguente tabella
Tasto |
Nuova modalita' |
Effetto |
Modalita' inserimento comandi |
i |
scrittura/inserimento |
Apparira' la scritta "INSERT" e sara' possibile
inserire il proprio testo alla posizione indicata dal cursore, senza sovrascrivere quello eventualmente gia' presente |
INS |
scrittura/inserimento |
Analogo ad "i" |
INS INS oppure i INS |
scrittura/sostituzione |
Apparira' la scritta "REPLACE" e sara'
possibile inserire il proprio testo alla posizione indicata dal cursore, sovrascrivendo, pero', quello eventualmente gia'
presente |
o (lettera) |
scrittura/inserimento |
Verra' aggiunta una linea vuota sotto quella dove e' posizionato il cursore e si entrera' nella modalita'
di scrittura/inserimento (vedi tasto "i") |
O (lettera) |
scrittura/inserimento |
Come "o" ma verra' inserita la linea sopra a quella dove e' posizionato il cursore |
a |
scrittura/sostituzione |
Entra nella modalita' di scrittura/inserimento e si iniziera ad inserire il proprio testo dopo il carattere
sul quale e' posizionato il cursore |
A |
scrittura/inserimento |
Entra nella modalita' di scrittura/inserimento e si iniziera' a scrivere alla fine della riga su cui
e' posizionato il cursore |
s |
scrittura/inserimento |
Entra nella modalita' di scrittura/inserimento e si sostituira'
il carattere presente alla posizione del cursore con il testo che verra' digitato |
S |
scrittura/inserimento |
Entra nella modalita' di scrittura/inserimento e verra' sostituita la riga sulla quale e' posizionato il
cursore con il nuovo testo che si sta per digitare |
C |
scrittura/inserimento |
Entra nella modalita' di scrittura/inserimento e verra' cancellato il testo a partire dalla posizione
del cursore fino alla fine della riga |
v |
visuale |
Apparira' la scritta "VISUALE" e sara' possibile
effettuare operazioni come selezione del testo, copia, incolla, eliminazione. Alcuni comandi relativi a questa modalita' verranno descritti piu' avanti |
Modalita' di scrittura |
ESC |
comandi |
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
Per spostarsi all'interno del testo, dalla
modalita' comandi, premere i tasti (o scrivere letteralmente per i comandi)
secondo il seguente schema:
Tasto |
Comando |
Effetto |
Modalita' inserimento comandi |
FRECCIA ALTO oppure k |
|
Muove il cursore verso l'alto |
FRECCIA BASSO oppure j |
|
Muove il cursore verso il basso |
FRECCIA DESTRA oppure l |
|
Muove il cursore verso destra |
FRECCIA SINISTRA oppure h |
|
Muove il cursore verso sinistra |
INIZIO oppure ^ |
|
Sposta il cursore all'inizio della riga |
FINE oppure $ |
|
Sposta il cursore alla fine della riga |
PAG ALTO |
|
Sposta il cursore velocemente verso l'alto (una "pagina" alla volta) |
PAG BASSO |
|
Sposta il cursore velocemente verso il basso (una "pagina" alla volta) |
w |
|
Sposta il cursore all'inizio della parola successiva |
b |
|
Sposta il cursore all'inizio della parola precedente |
e |
|
Sposta il cursore alla fine della parola su cui e' posizionato il cursore |
( |
|
Sposta il cursore all'inizio della frase precedente. Attenzione, una frase finisce con
un punto seguito da uno spazio |
) |
|
Sposta il cursore alla fine della frase successiva. Attenzione, una frase finisce con
un punto seguito da uno spazio |
G |
|
Sposta il cursore alla fine del documento |
|
:<num> |
Posiziona il cursore sulle riga numero "<num>" (numero intero). Premere
"INVIO" dopo aver scritto il comando |
|
<num>G |
Come ":<num>" |
Modalita' scrittura |
FRECCIA ALTO |
|
Muove il cursore verso l'alto |
FRECCIA BASSO |
|
Muove il cursore verso il basso |
FRECCIA DESTRA |
|
Muove il cursore verso destra |
FRECCIA SINISTRA |
|
Muove il cursore verso sinistra |
INIZIO |
|
Sposta il cursore all'inizio della riga |
FINE |
|
Sposta il cursore alla fine della riga |
PAG ALTO |
|
Sposta il cursore velocemente verso l'alto (una "pagina" alla volta) |
PAG BASSO |
|
Sposta il cursore velocemente verso il basso (una "pagina" alla volta) |
Funzioni di editing
Cancellare testo, copiarlo, incollarlo, ecc., rappresentano le classiche funzioni di editing.
Dalla
modalita' comandi, premere i tasti (o scrivere letteralmente per i comandi)
secondo il seguente schema:
Tasto |
Comando |
Effetto |
Modalita' inserimento comandi |
|
d<num>d |
Cancella "<num>" (numero intero) righe a partire dalla posizione del
cursore |
|
dd |
Cancella la riga su cui e' posizionato il cursore |
CANC oppure x |
|
Cancella il carattere alla posizione del cursore |
BACKSPACE |
|
Sposta il cursore a sinistra di un carattere e cancella il nuovo carattere su cui e' posizionato il cursore stesso ("BACKSPACE" e' il tasto per cancellare, usualmente posto sopra "INVIO") |
u |
|
Annulla le modifiche in ordine cronologico inverso, cioe' a partire dall'ultima effettuata |
CTRL+r |
|
Riscrive quanto annullato. Utile, ad esempio, se ci si e' sbagliati ad annullare una
modifica con "u" |
v |
|
Entra nella modalita' visuale. Sara' possibile selezionare del testo, a partire dalla posizione del cursore,
muovendosi con i tasti di movimento (frecce, tasti "Pag", ecc.) |
Modalita' visuale |
ESC oppure v |
|
Interrompe la selezione nella modalita' visuale ed esce da tale modalita' |
y |
|
Copia in un buffer il testo evidenziato |
x |
|
Taglia il testo evidenziato e lo copia in un buffer |
p |
|
Incolla alla posizione del cursore il testo tagliato con "x" o copiato con "y" |
> |
|
Indenta il testo selezionato una volta a destra |
< |
|
Indenta il testo selezionato una volta a sinistra |
|
<num>> |
Indenta il testo selezionato "<num>" (numero intero) volte a destra (es. "3>" indenta tre volte) |
|
<num>< |
Indenta il testo selezionato "<num>" (numero intero) volte a sinistra (es. "3<" indenta tre volte) |
Modalita' scrittura |
CANC |
|
Cancellare il carattere alla posizione del cursore |
BACKSPACE |
|
Sposta il cursore a sinistra di un carattere e cancella il nuovo 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, scrivere una delle seguenti sequenze di caratteri e premere "INVIO" per ottenere l'effetto indicato:
Comando |
Effetto |
:w |
Salva il file. Attenzione, che "w" scrive il file anche se non ci sono state modifiche |
:w! |
Come "w", ma forza il salvataggio (o almeno ci prova) anche quando non e' consentito (es. file di
sola lettura) |
:w <nomeFile> |
Salva il file con il nome nuovo "<nomeFile>" |
:r <nomeFile> |
Inserisce alla posizione del cursore il contenuto del file "<nomeFile>" |
:r !<comando> |
Inserisce l'output del comando di sistema "<comando>" all'interno del testo, alla posizione del cursore.
Esempio: ":r !ps -aux" |
:badd <nomeFile> |
Aggiunge il file "<nomeFile>" alla buffer list |
:bnext |
Passa al file successivo nella buffer list |
:bprevious |
Passa al file precedente nella buffer list |
:files |
Mostra quali file sono presenti nella buffer list, associandoli ad un numero |
:b<num> |
Passa 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 |
:bdelete <num> |
Elimina il file numero <num> dalla buffer list. L'associazione
numero-file puo' essere trovata con ":files" |
:x |
Salva il file ed esce dall'editor |
:q |
Esce dall'editor |
:q! |
Forza l'uscita dall'editor. Attenzione, eventuali modifiche non salvate potrebbero essere perse. A
differenza di "q", non viene chiesto di salvare eventuali modifiche non salvate in precedenza |
Altre funzioni o comandi
Dalla
modalita' comandi, premere i tasti secondo il seguente schema:
Tasto |
Effetto |
CTRL+g |
Mostra statistiche sulla posizione del cursore (numero di linea, numero di colonna, percentuale del
testo a cui si trova, nome del file, altro) |
/ oppure ? |
Seguito da un'espressione regolare, effettua la ricerca della prima occorrenza di testo che soddisfa l'espressione inserita.
Esempio: "/192\.168\.0\.1" effettua la ricerca della prima occorrenza di "192.168.0.1". Non e' scopo di questo articolo mostrare come scrivere espressioni regolari |
n |
Cercare l'occorrenza successiva a quella gia' trovata con "/" |
N |
Cercare l'occorrenza precedente a quella gia' trovata con "/" |
£ oppure * |
Cerca l'occorrenza successiva della parola su cui e' posizionato il cursore |
# |
Cerca l'occorrenza precedente della parola su cui e' posizionato il cursore |
% (per cento) |
Effettua il matching delle parentesi, ovvero trova dov'e' 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 la possibilita' di filtrare 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 il comando a cui inviare il testo selezionato
Il testo selezionato con "v" sara' sostituito con il risultato dell'elaborazione del comando indicato.
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 (cioe' dalla modalita' visuale), 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 (o del piu' semplice "vi").
Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!