Inizio  >  Docs  >  Linux  >  Trucchi veloci  >  Vim  
VimVim

Index

vim

https://www.verona.linux.it/index.php?title=Vim

 

Introduzione

Vim e` una versione potenziata, e un po' piu` user-friendly, di uno dei due editor standard dei sistemi Unix, vi (l'altro è Emacs). Vim è l'ideale per modificare rapidamente file di testo, cosa necessaria per l'amministrazione di sistema; personalmente consiglio di usare sempre vim come editor per Linux. All'inizio vi sembrerà un po' ostico, ma l'ubiquità degli editor in "stile vi" nei sistemi Unix, e la velocità con cui editerete, vi ricompenseranno dei vostri sforzi.

Questo articolo non vuole in alcun modo essere esauriente; vuole invece essere un invito a provare vim almeno qualche volta; il resto verrà da se', con la lettura di "vimtutor" o con i consigli di un amico che usa vim quotidianamente.

[modifica]

Primo file con vim

$ vim commedia.txt [invio]

Con questo comando iniziate una sessione di vim editando il file commedia.txt: vi appare una schermata nera se commedia.txt e` vuoto o non esiste, del testo se contiene qualcosa. vim è un editor a tutto schermo, e in genere a parte il testo da editare non mostra alcuna informazione, se non nell'ultima riga in basso.

In vim si lavora alternamente in due modalità: inserimento, cioè quando si sta immettendo testo nel file, e comandi, quando si compiono sul file azioni come aggiungere o cancellare righe, salvare, etc. All'avvio di vim ci si trova sempre nella modalità comandi. Per ritornarvi, in qualsiasi momento, basta premere il tasto esc. Anzi, a volte nel dubbio non guasta premere esc apposta per essere sicuri di trovarsi in modalità comandi.

Dunque, avete appena aperto il file commedia.txt. Vi trovate in modalità comandi. Con il tasto i (comando insert) passate ora alla modalità inserimento, e iniziate l'immissione di testo. Se premete altre lettere, vedrete che compare del testo all'interno del file. Tanto per esempio, inserite tre versi:

O Muse, o alto Ingegno, or m'aiutate; [invio]
o mente che scrivesti ciò ch'io vidi, [invio]
qui si parrà la tua nobilitate. [invio]

Se l'ambiente è configurato bene, dovrebbero funzionare correttamente anche i tasti delete e backspace, come in qualsiasi editor che si rispetti. Sul mio sistema funzionano a dovere anche le freccette, e io le uso sistematicamente, anche se un purista di vi non sarebbe d'accordo (lui userebbe i tasti h j k l).

Bene, avete inserito del testo. Ora premete esc per tornare alla modalità comandi. Il tasto i che avete usato è un comando "rapido" formato da una lettera sola; in vim ci sono parecchi di questi comandi svelti (di qui deriva la sua agilità), che servono perlopiù ad eseguire azioni locali, come cancellare un carattere (x), cancellare una riga (dd), etc. Esiste però tutta un'altra serie di comandi, di forma piu` complessa, che investono il file editato nella sua globalità. Buona parte di questi iniziano con i due punti (:). Nota bene: gli stessi "due punti" compaiono anche nei comandi less e man.

In modalità comandi, inserite :wq (quello che scrivete dopo i due punti viene visualizzato nell'ultima riga in basso) e date un invio. Per tutta risposta, vim dovrebbe salvare il file e uscire (wq sta infatti per "write and quit"). Avete appena editato il vostro primo file con vim, come potete verificare digitando alla shell:

$ cat commedia.txt

[modifica]

Qualche esperimento

Aprite il file che avete appena editato:

$ vim commedia.txt

che contiene il testo

O Muse, o alto Ingegno, or m'aiutate;
o mente che scrivesti ciò ch'io vidi,
qui si parrà la tua nobilitate.

Supponiamo che vogliate aggiungere altri versi. Posizionatevi dunque sull'ultima riga (qui si parra`...) e date il comando o. o sta per "open new line", cioe` "apri una riga" dopo quella su cui si trova il cursore. E via con un'altra terzina:

Io cominciai: "poeta che mi guidi,
guardda la nia virtu` s'ell'e` possente
prima ch'a l'alto passo tu mi fidi.

Nel secondo verso ho inserito apposta due errori: una doppia e una lettera sbagliata. Nel caso vi sbagliaste anche voi :) potete correggere rapidamente come segue. Mettetevi - in modalita` comandi - sulla "d" incriminata, e premete x: x serve a cancellare un carattere (restando in modalita` comandi). Ora mettetevi sulla "n" e impartite il comando r m

r*, dove * e` un carattere qualsiasi, serve a sostituire con * il carattere su cui si trova il cursore, sempre restando in modalita` comandi (r sta per replace).

Qualche altro esperimento. Il comando dd (due d) serve a cancellare un'intera riga. Provate con un verso... poi un altro... Provate a cancellare l'ultima terzina a forza di dd.

"Oh, no! Ho cancellato una terzina... Era importante!!". Nessun problema. Qualsiasi editor che si rispetti, quindi anche vim, ha una funzione "undo" che annulla l'ultima modifica. In vim quale sara` la lettera da premere? Indovinato, la lettera u. Digitate u u u e i tre versi tornano indietro, uno alla volta.

Riproviamo in un altro modo. Posizionatevi sul primo verso della seconda terzina e digitate 3dd. Questo cancella tre righe. Capito il trucco? 3dd cancella 3 righe, 3x cancella 3 caratteri, 3u annulla le ultime 3 modifiche... e cosi` via. Un sacco di comandi vim ammettono qualche numerino qui e la` per estendere la loro azione su piu` oggetti del testo.

Esercizi per casa: uscite salvando. Tornate a editare il file. Cancellate la prima terzina con un colpo solo. E siccome la terzina vi piaceva, invece di annullare le modifiche e poi salvare, uscite direttamente senza salvare, con il comando :q! (quit!).

Ancora esperimenti: il copia e incolla. Per "copiare" la riga su cui si trova il cursore si usa il comando yy (y sta per yank, cioe` "strappa"), e per incollarla sulla riga successiva il comando p (paste cioe` "incolla"). La riga "copiata" viene "incollata" sulla riga successiva a quella in cui si trova il cursore. Provate con un verso, poi con un altro, e annullate le modifiche quando avete preso confidenza.

Posizionatevi sul primo verso, e date il comando 3yy. Che cosa avrete mai copiato? Bravi: l'intera prima terzina, come potete verificare incollando la sezione copiata da qualche parte.

[modifica]

Ricerca e sostituzione di stringhe

Tutti gli editor degni di questo nome, quindi ovviamente anche vim, hanno dei comandi per ricercare stringhe all'interno del testo. Per esempio, supponiamo che vogliate scoprire a quale porta si mette in ascolto il servizio ssh su un sistema Unix. Date in pasto alla shell:

$ vim -R /etc/services 

Il file si apre in sola lettura, prima di tutto perché non avete i permessi per modificarlo (i file in /etc sono di root), e poi perché l'opzione -R serve a dichiararlo esplicitamente.

/etc/services è un file piuttosto grosso, quindi vale la pena di delegare la ricerca del servizio a vim. Mettetevi in modalità comandi, digitate /ssh e date un invio. I comandi che iniziano con / appartengono alla famiglia "ricerca e sostituzione"; quello che avete appena digitato serve ovviamente a cercare la stringa "ssh". Nello specifico, vim posiziona il cursore sulla prima occorrenza di "ssh" all'interno del file, mettendola in evidenza.

_ssh      22/tcp
ssh 22/udp

E le altre? Il comando n serve a spostarsi a quella successiva, il comando N a quella precedente. Premete n e...

 ssh      22/tcp
_ssh 22/udp

Ora poniamoci in un caso diverso. Uscite da /etc/services (:q) ed editate un vostro file:

vi è un editor bellissimo e molto veloce; vi
ha un sacco di comandi; inoltre vi è uno standard
dei sistemi Linux, quindi imparerò bene vi e userò
sempre vi come editor di sistema.

Uh oh! Va bene, vi è tanto bello ma noi intendevamo dire vim. Nessun problema. Posizionatevi sulla prima riga in modalità comandi e date il comando :s/vi/vim/g. Questo strano garbuglio, con cui non tarderete a familiarizzare, significa: sostituisci vi con vim globalmente. Il risultato sarà:

vim è un editor bellissimo e molto veloce; vim
ha un sacco di comandi; inoltre vi è uno standard
dei sistemi Linux, quindi imparerò bene vi e userò
sempre vi come editor di sistema.

Annullate le modifiche (u). La sostituzione è avvenuta sì "globalmente", ma sulla sola riga in cui si trova il cursore. Ora che lo sapete potete impartire il comando definitivo (attenzione quando lo usate...) :%s/vi/vim/g. La % sta per "su tutte le righe", quindi otterrete:

vim è un editor bellissimo e molto veloce; vim
ha un sacco di comandi; inoltre vim è uno standard
dei sistemi Linux, quindi imparerò bene vim e userò
sempre vim come editor di sistema.

Vim ha un sacco di comandi come questi; si possono cercare e sostituire espressioni regolari, su una riga, su tutto il file, in tutte le righe dalla 7 alla 23, in tutte le righe successive ad una riga che contiene "pippo", nelle 8 righe successive alla prossima riga che contiene "pippo", etc...

[modifica]

Riassunto

esc

Passa alla modalita` comandi

i

Passa in modalita` inserimento nel punto in cui si trova il cursore

o

Apre in inserimento una nuova linea sotto la posizione corrente

x

Cancella un carattere

r*

Sostituisce con * il carattere su cui si trova il cursore

dd

Taglia una riga (vale come selezione)

3dd

Taglia 3 righe (vale come selezione)

yy

Copia una riga

3yy

Copia 3 righe

p

Incolla la selezione nella riga sotto il cursore

/pippo

Cerca le occorrenze di "pippo" nel file

n

Si posiziona sull'occorrenza successiva

N

Si posiziona sull'occorrenza precedente

:s/pippo/pluto/g

Sostituisce "pippo" con "pluto" nella riga corrente

:%s/pippo/pluto/g

Sostituisce "pippo" con "pluto" in tutto il file

:q

Esce (solo se non si sono fatte modifiche)

:w

Salva

:wq

Salva ed esce

:q!

Esce senza salvare

[modifica]

Un file .vimrc di esempio

Il file .vimrc, collocato nella home directory, contiene alcune impostazioni di default dell'editor vim, tipo se spezzare le righe o no, se colorare la sintassi, etc. Personalmente trovo che le opzioni piu` utili siano:

...

Potete prendere questo testo e inserirlo a mano in .vimrc. E sarebbe bello che provaste a farlo proprio con vim(!):

$ vim ~/.vimrc

[modifica]

Dove si trovano altre informazioni su vim?

Direi che, dopo i pochi esperimenti di questo articolo, potreste passare subito alla lettura del "vim tutor". Lasciate perdere per il momento man vim, che descrive solo i parametri della riga di comando, e digitate invece alla shell:

$ vimtutor it

si aprirà una guida semi-interattiva, con la quale diverrete produttivi in meno di una settimana spendendo una decina di minuti al giorno.

Un'altra guida pratica a vim è presente in quel "Linux in a Nutshell" della O'Reilly, che si trova un po' dappertutto: casomai vi capitasse fra le mani. Esiste anche un libro edito da SAMS e interamente dedicato a vim: Vi iMproved, di Steve Oualline. Interessante acquisto, per quando avrò qualche quattrino in più da spendere.

Torna sù