Vim Cheat Sheet

Da Guide@Debianizzati.Org.

(Differenze fra le revisioni)
(stupenda sostituzione di testo)
m
 
(17 revisioni intermedie non mostrate.)
Riga 1: Riga 1:
-
= Introduzione =
+
{{Versioni compatibili}}
-
Parlare di Vim non è facile, è complesso, infinito e oltre a questo esiste già una marea di
+
-
documentazione. <br/>
+
-
Perciò questa vuole essere una raccolta di comandi spiegata in modo schematico e di facile
+
-
consultazione in caso di bisogno. <br/>
+
-
La caratteristica fondamentale di Vim è di avere varie modalità differenti; nonostante all'inizio ciò possa far sentire a disagio, è anche uno dei suoi punti forti, che con l'abitudine non faranno rimpiangere nessun altro editor. <br/>
+
-
* '''Modalità comando:''' è la prima che si incontra appena aperto, si possono impartire comandi specifici che spaziano dalle opzioni di configurazione stesse all'editing in modo massiccio, uso di regex e molto altro. In caso si sia in altre modalità, questa si ottiene con il tasto Escape. <br/>
 
-
* '''Modalità inserimento:''' per inserire testo come un normale editor, dalla modalità comando vi si accede con '''i''' (lettera i). <br/>
 
-
* '''Modalità visuale:''' selezione del testo con la possibilità di compiere operazioni su interi blocchi, dalla modalità comando si attiva con '''v''' (lettera v). <br/>
 
-
* '''Modalità sostituzione:''' è simile all'inserimento con la differenza che qualsiasi cosa verrà digitata compierà una sostituzione sovrascrivendo il vecchio testo, dalla modalità comando si attiva con '''R''' (quindi shift-r). Esiste anche una sostituzione temporanea attivabile con la lettera '''r''' seguita da cosa si vuole sostituire, vale solo per un carattere, nello specifico quello sotto il cursore.
 
-
In modalità comando le istruzioni vengono passate tramite una sorta di attivatore, ovvero ''':''' (due punti). Tranne quando si inserisce effettivamente del testo l'abitudine è di restare in modalità comando; infatti nonostante in modalità inserimento i classici tasti di direzione funzionino, trovarsi in modalità comando diventa essenziale per muoversi ed operare velocemente all'interno del documento, grazie alla maggiore quantità di scelte rapide disponibili. <br/>
 
-
C'è la possibilità di usare comandi in modalità inserimento senza premere Esc, ma non l'ho mai
 
-
apprezzata, giacché la scorciatoia è ctrl-o che trovo decisamente scomoda.
 
-
Ora ci vuole una breve legenda affinché ci sia un minimo di chiarezza su quanto andrò ad esporre. <br/>
+
== [[VimCS:Introduzione|Intoduzione]] ==
-
Tutti i comandi sono da intendere in modo letterale, nel senso che vanno digitati così come sono
+
* Le diverse modalità con cui interfacciarsi a Vim
-
scritti, sia quelli preceduti dai due punti che quelli senza, quelli composti da più lettere vanno usati in sequenza e possibilmente senza aspettare troppo tempo tra una e l'altra.
+
-
Fanno eccezione i comandi preceduti da un '''$''' (il prompt bash) che sono invece opzioni da linea di comando da dare in un terminale. <br/>
+
-
ctrl-f significa premere contemporaneamente il tasto Control e il tasto f. <br/>
+
-
ctrl-w c significa premere contemporaneamente il tasto Control e il tasto w, rilasciarli e premere il tasto c (funziona anche senza rilasciare ma le acrobazie da pianista le lasciamo agli utenti emacs :). <br/>
+
-
Per schermo si intende la porzione visibile dell'intero documento, ovvero la parte di testo
+
-
contenuta nella finestra, che ovviamente varia a seconda delle dimensioni del terminale e del
+
-
monitor.
+
-
= Iniziare a scrivere =
+
== [[VimCS: Basi|Basi]] ==
-
Ci sono vari modi di attivare la modalità inserimento, a seconda delle esigenze e della posizione del cursore.
+
* Iniziare a scrivere
 +
* Come muoversi
 +
* Salvare il documento
 +
* Uscire da Vim
-
a sinistra del cursore - '''i''' <br/>
 
-
a destra del cursore - '''a''' <br/>
 
-
a inizio riga - '''I''' <br/>
 
-
a fine riga - '''A''' <br/>
 
-
sulla riga sotto il cursore - '''o''' <br/>
 
-
sulla riga sopra il cursore - '''O''' <br/>
 
 +
== [[VimCS: Gestione|Gestione]] ==
 +
* Buffer
 +
* Finestre
 +
* Tab
-
= Come muoversi =
 
-
sposta cursore a sinistra - '''h''' <br/>
 
-
sposta cursore a destra - '''l''' <br/>
 
-
sposta cursore su - '''j''' <br/>
 
-
sposta cursore giù - '''k'''
 
-
sposta cursore avanti all'inizio della parola successiva - '''w''' <br/>
+
== [[VimCS: Editing|Editing]] ==
-
sposta cursore indietro all'inizio della parola successiva - '''b'''
+
* Sostituzione
 +
* Selezione e inserimento
 +
* Indentazione
 +
* Copia, taglia, incolla, cancella
 +
* Annulla, ripeti, cronologia e ricerca
 +
* Autocompletamento
 +
* Clipboard
-
sposta cursore avanti all'inizio della parola successiva ignorando la punteggiatura - '''W''' <br/>
 
-
sposta cursore indietro all'inizio della parola successiva ignorando la punteggiatura - '''B'''
 
-
sposta cursore tre parole avanti all'inizio della parola - '''3w''' <br/>
+
== [[VimCS: Varie|Varie]] ==
-
sposta cursore tre parole indietro all'inizio della parola - '''3b'''
+
* Differenze
 +
* Creare HTML
 +
* Cifratura testo
 +
* Vim remote
-
sposta cursore avanti alla fine della parola - '''e''' <br/>
 
-
sposta cursore indietro alla fine della parola - '''ge'''
 
-
sposta cursore avanti alla fine della parola successiva ignorando la punteggiatura - '''E''' <br/>
+
== [[VimCS: Configurazione|Configurazione]] ==
-
sposta cursore indietro alla fine della parola successiva ignorando la punteggiatura - '''gE'''
+
* .vimrc
 +
* .vim/
 +
* Gerarchia della directory .vim/
-
sposta cursore tre parole avanti alla fine - '''3e''' <br/>
 
-
sposta cursore al primo carattere della riga - '''|''' <br/>
 
-
sposta cursore al terzo carattere della riga - '''3|''' <br/>
 
-
sposta cursore al primo carattere non bianco - '''^'''
 
-
sposta cursore ad inizio riga - '''0''' <br/>
+
== [[VimCS: Extra|Extra]] ==
-
sposta cursore a fine riga - '''$'''
+
* Extra
 +
* Easter egg
 +
* Riferimenti
-
sposta cursore una pagina avanti - '''ctrl-f''' (oppure '''ctrl-d''') <br/>
+
{{Autori
-
sposta cursore una pagina indietro - '''ctrl-b''' (oppure '''ctrl-u''')
+
|Autore = [[Utente:Skizzhg|skizzhg]]
 +
|Estesa_da =
 +
:Plutonio (revisione e suggerimenti)
 +
|Verificata_da=
 +
:[[Utente:S3v|S3v]] 13:34, 24 mag 2015 (CEST)
 +
|Numero_revisori=1
 +
}}
-
sposta cursore avanti ad inizio frase - ''')''' <br/>
 
-
sposta cursore indietro ad inizio frase - '''('''
 
-
 
-
sposta cursore su ad inizio paragrafo - '''{''' <br/>
 
-
sposta cursore giù a fine paragrafo - '''}'''
 
-
 
-
sposta cursore a inizio documento - '''gg''' (oppure '''[[''') <br/>
 
-
sposta cursore a fine documento - '''G''' (oppure ''']]''') <br/>
 
-
sposta cursore alla riga 33 - '''33 G''' (oppure ''':33''')
 
-
 
-
sposta cursore alla prima riga dello schermo - '''H''' <br/>
 
-
sposta cursore all'ultima riga dello schermo - '''L''' <br/>
 
-
sposta cursore alla riga al centro dello schermo - '''M''' <br/>
 
-
sposta cursore alla terza riga dello schermo - '''3H''' <br/>
 
-
sposta cursore alla terzultima riga dello schermo - '''3L'''
 
-
 
-
sposta il cursore sulla parentesi corrispondente ad una chiusa o aperta - '''%''' <br/>
 
-
 
-
mostra il nome del file, la quantità di righe e la posizione in cui è il cursore - '''ctrl-g'''
 
-
 
-
 
-
Spostandosi da un punto all'altro del documento, Vim ricorda gli ultimi due; paragonando questo
 
-
comportamento a bash, si pensi ai comandi <code>cd</code> e <code>cd -</code> : <br/>
 
-
: torna alla posizione precedente - '''ctrl-o''' <br/>
 
-
: vai alla posizione successiva - '''ctrl-i'''
 
-
 
-
Se invece volessimo una specie di segnalibro per tornare ad un punto preciso: <br/>
 
-
: '''m''' (seguito dal carattere)
 
-
 
-
e quindi tornarvi in qualsiasi momento: <br/>
 
-
: ' (seguito dal carattere)
 
-
 
-
 
-
= Salvare il documento =
 
-
salva file già esistente - ''':w''' <br/>
 
-
salva file non esistente - ''':w nome_file'''
 
-
 
-
salva più file aperti, che siano buffer o tab - ''':wa''' <br/>
 
-
salva con altro nome, fa una copia mantendendo l'originale - ''':sav nome_file'''
 
-
 
-
 
-
= Uscire da Vim =
 
-
esce - ''':q''' <br/>
 
-
esce da tutti, che siano buffer o tab - ''':qa''' <br/>
 
-
salva ed esce - ''':wq''' (oppure ''':x''' oppure '''ZZ''') <br/>
 
-
salva tutti, che siano buffer o tab - ''':wa''' <br/>
 
-
esce senza salvare - ''':q!''' (oppure '''ZQ''')
 
-
 
-
mappa la sequenza di tasti <code>ZW</code> per salvare senza chiudere: <br/>
 
-
: ''':map ZW :w<cr>'''
 
-
 
-
 
-
= Apertura e gestione dei file =
 
-
Si possono aprire molteplici file e gestirli in vari modi: <br/>
 
-
* visualizzandone uno alla volta, questi sono chiamati buffer
 
-
* dividerli in split orizzontali e verticali, questi sono chiamati finestre
 
-
* visualizzazione in tab
 
-
 
-
Proprio come un browser web, l'uso dei tab è preferibilmente confinato a dividere progetti diversi, "un file = un tab" non è nella filosofia di un "vimmer" che si rispetti :) e il passaggio tra uno e l'altro è inoltre più scomodo di quanto si possa pensare. <br/>
 
-
Con l'aiuto di alcune mappe di tasti create apposta o di script, i buffer restano il modo più
 
-
pratico e veloce per tenere aperti tanti file e muoversi tra di essi.
 
-
 
-
apre file - ''':e nome_file'''
 
-
 
-
apre file nuovo - ''':enew'''
 
-
 
-
== Buffer ==
 
-
Aprendo due o più file ci si puo' spostare tra uno e l'altro usando: <br/>
 
-
'''<nowiki>:</nowiki>n''' (successivo) <br/>
 
-
'''<nowiki>:</nowiki>prev''' (precedente) <br/>
 
-
'''<nowiki>:</nowiki>bn''' (successivo) <br/>
 
-
'''<nowiki>:</nowiki>bp''' (precedente) <br/>
 
-
'''<nowiki>:</nowiki>e#''' (consente il passaggio veloce tra il precedente buffer e il corrente)
 
-
 
-
Il passaggio veloce tra l'ultimo buffer e il corrente si ottiene anche con: <br/>
 
-
'''ctrl-^''' (oppure '''ctrl-6''') <br/>
 
-
'''N ctrl-^''' (dove '''N''' è il numero del buffer) <br/>
 
-
 
-
Si può ottenere una lista dei buffer aperti in tre modi diversi: <br/>
 
-
'''<nowiki>:</nowiki>ls''' <br/>
 
-
'''<nowiki>:</nowiki>buffers''' <br/>
 
-
'''<nowiki>:</nowiki>files''' <br/>
 
-
 
-
Verrà mostrata una riga per ogni file aperto con un numero che lo identifica, un indicatore dello stato, il nome del file e la riga in cui è il cursore; si noti che il numero è univoco e non cambia, se si chiude un file rimarrà il "buco" nella sequenza numerica. <br/>
 
-
Per la spiegazione degli indicatori leggere il relativo help. <br/>
 
-
'''<nowiki>:</nowiki>h :ls'''
 
-
 
-
passa a un buffer specifico - ''':b numero_buffer''' <br/>
 
-
chiude il buffer corrente - ''':bd''' <br/>
 
-
chiude un buffer specifico - ''':bd numero_buffer'''
 
-
 
-
 
-
== Finestre ==
 
-
divide finestra orizzontalmente - ''':split''' (oppure '''ctrl-w s''') <br/>
 
-
divide finestra verticalmente - ''':vsplit''' (oppure '''ctrl-w v''')
 
-
 
-
Il comportamento predefinito è di riportare nello split lo stesso file, dopodiché si può aprirne
 
-
uno diverso usando i comandi dei buffer; in caso si voglia subito una finestra vuota possiamo farlo tranquillamente per lo split orizzontale, mentre per il verticale dovremo ricorrere ad una mappa. <br/>
 
-
 
-
divide creando finestra orizzontale vuota - '''ctrl-w n''' <br/>
 
-
mappa la sequenza di tasti <code>ctrl-w V</code> per creare una finestra verticale vuota: <br/>
 
-
: ''':map <C-W>V :vne<cr>'''
 
-
 
-
Come si può vedere il comando è <code>:map</code> seguito dalla scorciatoia desiderata, i caratteri speciali come Control e le eventuali sequenze vanno messe tra less e greater, poi il carattere aggiuntivo, quindi il comando vero e proprio, che è <code>:vne</code>, ed infine <code><cr></code> che è carriage return ed equivale a premere il tasto Return appunto (l'invio, quello che impropriamente chiamiamo Enter, è invece quello sul tastierino numerico :).
 
-
 
-
Tutti i comandi dati in questo modo durano solo per la sessione in corso, per averli permanenti
 
-
vanno inseriti nel file <code>~/.vimrc</code>; i due punti possono essere omessi.
 
-
 
-
È possibile aprire una finestra con una dimensione predefinita (ad esempio, :33split): <br/>
 
-
'''<nowiki>:</nowiki>NUMEROsplit''' <br/>
 
-
'''<nowiki>:</nowiki>NUMEROvsplit'''
 
-
 
-
muoversi tra le finestre - '''ctrl-w w''' <br/>
 
-
muoversi in una finestra precisa: <br/>
 
-
'''ctrl-w h'''  sinistra <br/>
 
-
'''ctrl-w j'''  sotto <br/>
 
-
'''ctrl-w k'''  sopra <br/>
 
-
'''ctrl-w l'''  destra <br/>
 
-
'''ctrl-w t'''  piu' in alto <br/>
 
-
'''ctrl-w b'''  piu' in basso
 
-
 
-
ridimensionare orizzontalmente: <br/>
 
-
'''ctrl-w +''' <br/>
 
-
'''ctrl-w -'''
 
-
 
-
con numero di righe predefinito (ad esempio, 33 ctrl-w +): <br/>
 
-
'''NUMERO ctrl-w +''' <br/>
 
-
'''NUMERO ctrl-w -'''
 
-
 
-
con dimensione predefinita: '''NUMERO ctrl-w _''' <br/>
 
-
 
-
ridimensiona verticalmente: <br/>
 
-
'''NUMERO ctrl-w <''' <br/>
 
-
'''NUMERO ctrl-w >''' <br/>
 
-
'''NUMERO ctrl-w ='''
 
-
 
-
inverte posizione finestra orizzontale: <br/>
 
-
verso l'alto - '''ctrl-w R''' <br/>
 
-
verso il basso - '''ctrl-w r''' <br/>
 
-
indipendente dal focus - '''ctrl-w x'''
 
-
 
-
inverte posizione finestra verticale: <br/>
 
-
muovi a sinistra - '''ctrl-w H''' <br/>
 
-
muovi a destra - '''ctrl-w L''' <br/>
 
-
muovi in alto - '''ctrl-w K''' <br/>
 
-
muovi in basso - '''ctrl-w J'''
 
-
 
-
chiude finestra - ''':close''' (oppure '''ctrl-w c''') <br/>
 
-
chiudi finestra tranne la corrente - '''ctrl-w o'''
 
-
 
-
Si possono aprire in finestre più buffer già presenti: <br/>
 
-
apre tutti in finestre orizzontali - ''':ball''' <br/>
 
-
apre tutti in finestre verticali - ''':vertical ball'''
 
-
 
-
apre più file in finestre orizzontali:
 
-
<pre>
 
-
$ vim -o nome_file1 nome_file2
 
-
</pre>
 
-
apre piu' file in finestre verticali
 
-
<pre>
 
-
$ vim -O nome_file1 nome_file2
 
-
</pre>
 
-
apre finestra corrente in un tab - '''ctrl-w T'''
 
-
 
-
scorre le finestre assieme in stile vimdiff - ''':set scrollbind'''
 
-
 
-
apre esplorazione file - ''':Explore''' <br/>
 
-
apre finestra verticale di esplorazione file - ''':Vexplore'''
 
-
 
-
 
-
== Tab ==
 
-
apre tab - ''':tabnew''' <br/>
 
-
chiude tab - ''':close'''
 
-
 
-
apre file in un nuovo tab - ''':tabedit nome_file'''
 
-
 
-
apre più file in tab:
 
-
<pre>
 
-
$ vim -p nome_file1 nome_file2
 
-
</pre>
 
-
 
-
apre più buffer in tab - ''':tab ball'''
 
-
 
-
muoversi tra tab: <br/>
 
-
successivo - ''':tabn''' (oppure '''gt''') <br/>
 
-
precedente - ''':tabp''' (oppure '''gT''')
 
-
 
-
 
-
= Editing =
 
-
 
-
== Sostituzione ==
 
-
entra in modalità sostituzione - '''R''' <br/>
 
-
sostituisce singolo carattere e torna in modalità comando - '''r''' (seguito dal carattere)
 
-
 
-
maiuscole in minuscole e viceversa - '''~''' <br/>
 
-
tutta la riga minuscola - '''guu''' (oppure '''vu''') <br/>
 
-
solo una parola minuscola - '''vEu''' <br/>
 
-
tutta la riga maiuscola - '''gUU''' (oppure '''VU''') <br/>
 
-
solo una parola maiuscola - '''vEU''' <br/>
 
-
inverte maiuscole e minuscole di una parola - '''vE~''' <br/>
 
-
inverte maiuscole e minuscole di una riga - '''g~~''' <br/>
 
-
intero file minuscolo - '''ggguG''' <br/>
 
-
intero file maiuscolo - '''gggUG'''
 
-
 
-
sostituzione prima corrispondenza sulla riga - ''':s/vecchio/nuovo''' <br/>
 
-
sostituzione su tutta la riga - ''':s/vecchio/nuovo/g <br/>
 
-
sostituzione con richiesta di conferma - ''':s/vecchio/nuovo/gc''' <br/>
 
-
sostituzione in tutto il documento - ''':%s/vecchio/nuovo''' <br/>
 
-
 
-
sostituzione in tutti i buffer - ''':bufdo %s/vecchio/nuovo/ge | update'''
 
-
 
-
elimina le terminazioni di riga in stile dos, ovvero quei simpatici <code>^M</code> - ''':%s/\r/''' <br/>
 
-
se non fossero solo a fine riga, digitare <code>:%s/</code> seguito da <code>ctrl-v</code> e <code>ctrl-m</code>, quindi aggiungere <code>//g</code> e fare la sostituzione: <br/>
 
-
: ''':%s/^M//g'''
 
-
 
-
 
-
dato un file con tante righe nella forma di ''foo bar baz http://bla'' <br/>
 
-
elimina i caratteri prima di 'http' per ogni riga e nell'intero documento:
 
-
: ''':%s/^.\{-}\zehttp//g'''
 
-
 
-
 
-
 
-
ordina testo alfabeticamente - ''':sort'''
 
-
 
-
== Selezione e inserimento ==
 
-
Ora che sappiamo come gestire i file e come muoverci tra di essi è giunto il momento di produrre. <br/>
 
-
Come accennato all'inizio, la modalità visuale seleziona il testo.
 
-
 
-
inizia selezione - '''v''' <br/>
 
-
seleziona intera riga - '''V''' <br/>
 
-
seleziona blocco (salta righe vuote) - '''ctrl-v''' <br/>
 
-
seleziona tutto - '''ggVG''' <br/>
 
-
 
-
Su di essa è anche possibile compiere le stesse operazioni della modalità comando, la differenza è che apparirà un prompt particolare ('<,'>), i comandi vanno inseriti subito dopo, senza spazio. <br/>
 
-
Ecco ad esempio come copiare del testo salvandolo in altro file: <br/>
 
-
'''v''' <br/>
 
-
'''<nowiki>:</nowiki>'<,'>w nome_file'''
 
-
 
-
Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il
 
-
cursore: <br/>
 
-
'''<nowiki>:</nowiki>r nome_file'''
 
-
 
-
 
-
Il punto esclamativo è un attivatore per comandi esterni, seguito da un comando apre una shell in una porzione di finestra e lo esegue: <br/>
 
-
'''<nowiki>:</nowiki>!ls'''
 
-
 
-
Possiamo quindi inserire nel documento qualsiasi output della shell: <br/>
 
-
<nowiki>:</nowiki>r !ls
 
-
 
-
In caso servisse una shell con piena funzionalità: <br/>
 
-
<nowiki>:</nowiki>shell
 
-
 
-
Si noti che è un sotto processo di Vim, ricordarsi dunque di uscire una volta finito :)
 
-
 
-
 
-
== Indentazione ==
 
-
inserisce un'indentazione su riga - ''':>''' <br/>
 
-
inserisce due indentazioni su riga - ''':>>''' <br/>
 
-
toglie un'indentazione su riga - :<''' <br/>
 
-
toglie due indentazioni su riga - ''':<<''' <br/>
 
-
inserisce un'indentazione su 3 righe - ''':>3''' <br/>
 
-
inserisce un'indentazione sulla terza riga - ''':3>''' <br/>
 
-
 
-
scorciatoie: <br/>
 
-
'''>>''' (inserisce) <br/>
 
-
'''<<''' (toglie) <br/>
 
-
'''=''' (toglie)
 
-
 
-
 
-
== Copia, taglia, incolla, cancella ==
 
-
Questo funziona solo all'interno della sessione corrente di Vim. <br/>
 
-
copia testo selezionato - '''y''' <br/>
 
-
copia prima parola di una riga - '''yw''' <br/>
 
-
copia intera riga - '''yy'''
 
-
 
-
incolla testo tagliato sotto la riga dove è il cursore - '''p''' <br/>
 
-
 
-
mette la riga sottostante in coda alla corrente - '''J'''
 
-
 
-
 
-
cancella carattere - '''x''' <br/>
 
-
cancella tre caratteri - '''3x''' <br/>
 
-
cancella parola a destra del cursore - '''dw''' <br/>
 
-
cancella parola a sinistra del cursore - '''db''' <br/>
 
-
cancella ciò che si trova sotto al cursore - '''D''' <br/>
 
-
cancella intera riga - '''d$''' <br/>
 
-
cancella intera riga compreso spazio occupato - '''dd''' <br/>
 
-
cancella tre righe - '''3dd''' <br/>
 
-
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso - '''df''' (seguito dal carattere) <br/>
 
-
cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso - '''dt''' (seguito dal carattere) <br/>
 
-
cancella tutte le righe dello schermo sotto il cursore - '''dL''' <br/>
 
-
cancella dalla riga in cui si trova il cursore alla fine del documento - '''dG''' <br/>
 
-
cancella dalla riga in cui si trova il cursore all'inizio del documento - '''dg''' <br/>
 
-
cancella intero documento - '''ggdG''' <br/>
 
-
cancella parola e passa alla modalità inserimento - '''cw''' <br/>
 
-
cancella riga e passa alla modalità inserimento - '''cc''' <br/>
 
-
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso e passa alla
 
-
modalità inserimento - '''cf''' (seguito dal carattere) <br/>
 
-
cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso e passa alla
 
-
modalità inserimento - '''ct''' (seguito dal carattere)
 
-
 
-
cancella ogni riga che inizia con una certa parola - ''':g/^parola/d''' <br/>
 
-
cancella ogni riga che termina con una certa parola - ''':g/parola$/d''' <br/>
 
-
cancella ogni riga che contiene una certa parola - ''':g/parola/d''' <br/>
 
-
cancella le righe commentate - ''':g/^#/d''' <br/>
 
-
cancella le righe vuote - ''':v/\S/d'''
 
-
 
-
inserisce commento (#) ad inizio riga - ''':s/^/#/'''
 
-
 
-
 
-
== Annulla, ripeti, cronologia e ricerca ==
 
-
Per annullare o ripetere una modifica si userà: <br/>
 
-
undo - '''u''' <br/>
 
-
undo di una riga - '''U'''
 
-
 
-
redo - '''ctrl-r'''
 
-
 
-
 
-
Per l'ultima operazione effettuata, qualunque essa sia, e quindi automatizzare un po'
 
-
le ripetizioni si usa il punto: <br/>
 
-
'''.'''
 
-
 
-
 
-
Per la modalità comando: <br/>
 
-
ripete ultima operazione - '''@:''' <br/>
 
-
mostra la history dei comandi - ''':history''' <br/>
 
-
mostra la history con comandi selezionabili - '''q:''' <br/>
 
-
mostra la history di ricerca con comandi selezionabili - '''q/''' (successivo) <br/>
 
-
mostra la history di ricerca history con comandi selezionabili - '''q?''' (precedente) <br/>
 
-
 
-
mostra la lista dei comandi interni che iniziano per a - ''':a ctrl-d'''
 
-
 
-
La ricerca funziona come per tante altre applicazioni: <br/>
 
-
cerca parola in avanti - '''/parola''' <br/>
 
-
ripete ricerca in avanti - '''n'''
 
-
 
-
cerca parola indietro - '''?parola''' <br/>
 
-
ripete ricerca indietro - '''N'''
 
-
 
-
== Autocompletamento ==
 
-
In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate
 
-
precedentemente. <br/>
 
-
'''ctrl-x''' <br/>
 
-
scorrimento tra i risultati - '''ctrl-n''' / '''ctrl-p''' <br/>
 
-
annulla - '''ctrl-e''' <br/>
 
-
accetta parola selezionata - '''ctrl-y''' (oppure Enter)
 
-
 
-
 
-
== Clipboard ==
 
-
Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono
 
-
utilizzate. <br/>
 
-
* PRIMARY: il testo selezionato e incollato tramite il mouse, ovvero seleziona con il tasto 1
 
-
(sinistro, o destro per i mancini) e incolla con il tasto 2 (centrale).
 
-
* CLIPBOARD: il testo copiato o tagliato e incollato tramite i menu delle applicazioni o le classiche scorciatoie ctrl-c/ctrl-x/ctrl-v. <br/>
 
-
[http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki Specifiche Freedesktop]
 
-
 
-
Ovviamente con il mouse non è prevista una funzione che taglia, ma questa può comunque funzionare ad esempio tra due sessioni diverse di Vim.
 
-
: PRIMARY: <br/>
 
-
copia - '''"*y''' <br/>
 
-
taglia - '''"*x''' <br/>
 
-
incolla - '''"*p'''
 
-
 
-
:CLIPBOARD: <br/>
 
-
copia - '''"+y''' <br/>
 
-
taglia - '''"+x''' <br/>
 
-
incolla - '''"+p'''
 
-
 
-
Per evitare di avere dipendenze extra che riguardano Xorg, la versione di Vim presente in Debian è compilata senza il supporto alla clipboard, lo si può verificare con: <br/>
 
-
'''<nowiki>:</nowiki>version'''
 
-
 
-
cercando <code>clipboard</code> e <code>xterm_clipboard</code> nell'elenco delle funzionalità, oppure con una ricerca mirata, che produrrà '''1''' se presente o '''0''' se non lo è: <br/>
 
-
'''<nowiki>:</nowiki>echo has('clipboard')''' <br/>
 
-
'''<nowiki>:</nowiki>echo has('xterm_clipboard')'''
 
-
 
-
per ottenere questo si dovrà installare una delle interfacce grafiche a scelta tra: <br/>
 
-
* vim-gnome
 
-
* vim-gtk
 
-
* vim-lesstif
 
-
 
-
 
-
= Differenze =
 
-
Una funzione irrinunciabile, controllare le differenze tra due o più file.
 
-
 
-
apre una finestra orizzontale diff - ''':diffsplit''' <br/>
 
-
apre una finestra verticale diff - ''':vert diffsplit''' <br/>
 
-
aggiorna diff dopo cambiamenti - ''':diffupdate'''
 
-
 
-
vimdiff è un modo per richiamare vim con l'opzione -d:
 
-
<pre>
 
-
$ vimdiff nome_file1 nome_file2
 
-
</pre>
 
-
Un paio di hack per controllare le differenze tra directory:
 
-
<pre>
 
-
$ vimdiff <(ls -R $DIR1) <(ls -R $DIR2)
 
-
$ vim -c 'e nome_directory1' -c diffthis -c 'vert split nome_directory2' -c diffthis
 
-
</pre>
 
-
 
-
Apre due tab con il diff di due file in ognuno:
 
-
<pre>
 
-
$ vim -c 'e nome_file1' -c diffthis -c 'vert split nome_file2' -c diffthis -c 'tabnew' \
 
-
-c 'e nome_file3' -c diffthis -c 'vert split nome_file3' -c diffthis
 
-
</pre>
 
-
 
-
 
-
= Creare html =
 
-
Converte in html il buffer corrente, mostrandolo in una finestra orrizzontale, il nuovo file avrà lo stesso nome con l'aggiunta dell'estensione .html, ereditando i colori dello schema in uso: <br/>
 
-
'''<nowiki>:</nowiki>TOhtml'''
 
-
 
-
crea un html da linea di comando:
 
-
<pre>
 
-
$ vim -n -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
 
-
</pre>
 
-
 
-
testo scuro su sfondo chiaro:
 
-
<pre>
 
-
$ vim -n -c 'set background=light' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
 
-
</pre>
 
-
testo chiaro su sfondo scuro:
 
-
<pre>
 
-
$ vim -n -c 'set background=dark' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
 
-
</pre>
 
-
 
-
 
-
= Cifratura testo =
 
-
<pre>
 
-
$ vim -x nome_file
 
-
</pre>
 
-
cifratura senza file swap (più sicuro):
 
-
<pre>
 
-
$ vim -x -n nome_file
 
-
</pre>
 
-
Per aprirlo le volte successive non serve l'opzione ''-x'', Vim aggiunge una stringa per il
 
-
riconoscimento. Per disattivare la cifratura dal file aperto digitare: <br/>
 
-
<nowiki>:</nowiki>set key= <br/>
 
-
 
-
ovvero lasciando campo vuoto, per riattivarla si usa invece: <br/>
 
-
'''<nowiki>:</nowiki>X'''
 
-
 
-
La chiave viene sostituita da asterischi altrimenti sarebbe in chiaro (ma non viene memorizzata
 
-
nella history).
 
-
 
-
ROT13 encoding/decoding - '''g?'''
 
-
 
-
 
-
= Vim remote =
 
-
Vim può funzionare come un server che accetta istruzioni da linea di comando. Aprire un terminale e digitare:
 
-
<pre>
 
-
$ vim --servername debianizzati
 
-
</pre>
 
-
 
-
Il nome dato è assolutamente arbitrario. <br/>
 
-
Ora si può aprire un altro terminale che fungerà da client e fare qualche prova.
 
-
Passiamo in modalità inserimento e scriviamo qualcosa:
 
-
<pre>
 
-
$ vim --servername debianizzati --remote-send 'i La guida su Vim di Debianizzati.org<cr>'
 
-
</pre>
 
-
 
-
Torniamo in modalità comando e apriamo un'altra finestra:
 
-
<pre>
 
-
$ vim --servername debianizzati --remote-send '<esc><c-w>s<cr>'
 
-
</pre>
 
-
Salviamo il file e chiudiamo Vim:
 
-
<pre>
 
-
$ vim --servername debianizzati --remote-send '<esc>:w /tmp/debianizzati<cr>:qa<cr>'
 
-
</pre>
 
-
Non sarà comodissimo ma si può fare anche questo :) <br/>
 
-
Per gli altri comandi leggere l'help. <br/>
 
-
'''<nowiki>:</nowiki>h --remote'''
 
-
 
-
 
-
= Configurazione =
 
-
Personalmente utilizzo una statusbar ben configurata, ma a qualcuno piace avere i numeri delle
 
-
righe alla sinistra del testo: <br/>
 
-
visualizza numeri riga - ''':set number''' <br/>
 
-
rimuove visualizzazione - ''':set nonumber'''
 
-
 
-
C'è anche chi vuole il mouse, ho le convulsioni al solo pensiero :) <br/>
 
-
abilita uso del mouse - ''':set mouse=a''' <br/>
 
-
disabilita - ''':set mouse='''
 
-
 
-
 
-
== .vimrc ==
 
-
Il file di configurazione è una cosa molto personale, citando vimgor, il bot del canale IRC: <br/>
 
-
<skizzhg> vimgor, :kill_kittens <br/>
 
-
<vimgor> The Command that Cannot Be Named. :kill_kittens is what will happen if you use someone
 
-
else's vimrc.
 
-
 
-
Voglio però riportare alcuni stralci del mio, in particolare: <br/>
 
-
* la statusbar che fornisce molte informazioni sul documento
 
-
 
-
'''set laststatus=2''' <br/>
 
-
'''set statusline=(%n)\ %F\ [%{strlen(&fenc)?&fenc:'none'},%{&ff}]%h%m%r%y%=%c,%l/%L\ %P'''
 
-
 
-
(fonte: [http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.html Vim statusline])
 
-
 
-
 
-
* la visualizzazione dei comandi parziali, se stiamo per digitare ZZ per chiudere Vim, verrà
 
-
mostrata la prima Z, in caso ci fossimo sbagliati basterà usare Esc
 
-
 
-
'''set showcmd'''
 
-
 
-
 
-
* la gestione dei buffer, ci sono vari script più o meno comodi o invasivi, ho preferito creare delle semplici scorciatoie
 
-
 
-
questo è indispensabile per muoversi tra uno e l'altro senza doverlo prima salvare
 
-
 
-
'''set hidden'''
 
-
 
-
 
-
la mappatura dei tasti, <Leader> è il backslash <br/>
 
-
* L: elenca i buffer aperti e aspetta un numero per selezionarne uno
 
-
* l: li elenca soltanto
 
-
* b: passa al precedente
 
-
* f: passa al successivo
 
-
* g: alterna tra l'attuale e il precedente, stesso comportamento di ctrl-^
 
-
* D: rimuove un buffer dalla lista
 
-
* numeri: passaggio dal buffer 1 al 10
 
-
 
-
'''nnoremap <Leader>L :buffers<cr>:buffer<space> <br/>
 
-
'''nnoremap <Leader>l :ls<cr>''' <br/>
 
-
'''nnoremap <Leader>b :bp<cr>''' <br/>
 
-
'''nnoremap <Leader>f :bn<cr>''' <br/>
 
-
'''nnoremap <Leader>g :e#<cr>''' <br/>
 
-
'''nnoremap <Leader>D :bd<cr>''' <br/>
 
-
'''nnoremap <Leader>1 :1b<cr>''' <br/>
 
-
'''nnoremap <Leader>2 :2b<cr>''' <br/>
 
-
'''nnoremap <Leader>3 :3b<cr>''' <br/>
 
-
'''nnoremap <Leader>4 :4b<cr>''' <br/>
 
-
'''nnoremap <Leader>5 :5b<cr>''' <br/>
 
-
'''nnoremap <Leader>6 :6b<cr>''' <br/>
 
-
'''nnoremap <Leader>7 :7b<cr>''' <br/>
 
-
'''nnoremap <Leader>8 :8b<cr>''' <br/>
 
-
'''nnoremap <Leader>9 :9b<cr>''' <br/>
 
-
'''nnoremap <Leader>0 :10b<cr>'''
 
-
 
-
 
-
* per la creazione di file html usa la formattazione per mezzo di regole css al posto
 
-
dei tag e attributi di formattazione pesanti e ormai deprecati <br/>
 
-
'''let html_number_lines=0''' <br/>
 
-
'''let html_use_css=1'''
 
-
 
-
 
-
== .vim/ ==
 
-
Normalmente il file di configurazione e quello della cronologia risiedono nella home, mentre tutti gli eventuali plugin e documentazione, schema colori e altro vanno nella directory <code>.vim/</code> con una struttura simile a <code>/usr/share/vim/vim72/</code>. <br/>
 
-
Per coerenza e ordine si farà in modo che i file <code>.viminfo</code> e <code>.vimrc</code> vengano spostati nella directory <code>.vim/</code> insieme a tutto il resto.
 
-
 
-
Per <code>.viminfo</code>, aggiungere la seguente riga in <code>.vimrc</code>:
 
-
<pre>
 
-
set viminfo='55,<55,s11,:99,h,n~/.vim/viminfo
 
-
</pre>
 
-
 
-
I parametri con le relative spiegazioni si trovano nell'help: <br/>
 
-
'''<nowiki>:</nowiki>h 'viminfo''''
 
-
 
-
Per .vimrc inserire la seguente variabile in bash_profile (o .profile):
 
-
<pre>
 
-
export VIMINIT="source $HOME/.vim/vimrc"
 
-
</pre>
 
-
Per ulteriori informazioni si veda: <br/>
 
-
'''<nowiki>:</nowiki>h VIMINIT'''
 
-
 
-
 
-
== Gerarchia della directory <code>.vim/</code> ==
 
-
<code>.vim/colors</code>: dove risiedono gli eventuali schemi colori aggiunti.
 
-
 
-
Visualizza lo schema in uso - ''':colorscheme'''
 
-
 
-
 
-
<code>.vim/doc</code>: la documentazione dei plugin.
 
-
 
-
Per far sì che Vim riconosca i cambiamenti, usare il comando: <br/>
 
-
'''<nowiki>:</nowiki>helptags <code>.vim/doc/</code>'''
 
-
 
-
Per ulteriori informazioni si veda: <br/>
 
-
'''<nowiki>:</nowiki>h :helptags'''
 
-
 
-
 
-
<code>.vim/plugin</code>: i plugin aggiunti
 
-
 
-
Per ulteriori informazioni si veda: <br/>
 
-
'''<nowiki>:</nowiki>h plugin'''
 
-
 
-
Visualizza tutti i plugin, temi e altro caricati - ''':scriptnames'''
 
-
 
-
 
-
<code>.vim/ftdetect</code>: dove ho inserito il menu di gvim, che è ampiamente customizzabile, per evitare che gli aggiornamenti sovrascrivano l'originale in <code>$VIMRUNTIME/menu.vim</code>; in realtà ftdetect servirebbe per la sintassi dei tipi di file ma pare l'unico modo per farglielo vedere.
 
-
 
-
Per ulteriori informazioni si veda: <br/>
 
-
'''<nowiki>:</nowiki>echo $VIMRUNTIME'''
 
-
'''<nowiki>:</nowiki>h ftdetect'''
 
-
'''<nowiki>:</nowiki>h menu.vim'''
 
-
 
-
 
-
<code>lessvim</code>: lo script che utilizza vim in modalità less e richiama <code>$VIMRUNTIME/macros/less.vim</code>. <br/>
 
-
Lo tengo in home per via di una lieve modifica (opzione -n) che evita di aprire un file <code>.swp</code> e mantenere quindi il file impegnato, un alias bash fa il resto: <br/>
 
-
<pre>
 
-
alias less='$HOME/.vim/lessvim'.
 
-
</pre>
 
-
Lo scopo è avere <code>less</code> con gli stessi vantaggi di Vim, sebbene in certe occasioni non funzioni a dovere, una volta dentro premere il tasto '''h''' per l'help.
 
-
 
-
La panoramica è ovviamente parziale e riguarda le mie modeste esigenze.
 
-
 
-
 
-
= Extra =
 
-
Ovviamente uso Vim anche per mutt, in questo modo componendo un nuovo messaggio mi troverò in
 
-
modalità inserimento, con il cursore sotto gli header dell'email e con la limitazione di 73
 
-
caratteri per riga.
 
-
<pre>
 
-
set editor="vim -f -c 'set tw=73' -c '/^$/' -c 'normal o' -c startinsert"
 
-
</pre>
 
-
 
-
apre Vim con limite di lettere per riga (73):
 
-
<pre>
 
-
$ vim -c 'set tw=73'
 
-
</pre>
 
-
apre file alla riga 5:
 
-
<pre>
 
-
$ vim +5 nome_file
 
-
</pre>
 
-
apre file alla riga 5 in insert mode:
 
-
<pre>
 
-
$ vim -c startinsert +5 nome_file
 
-
</pre>
 
-
apre file in insert mode sotto la riga 5:
 
-
<pre>
 
-
$ vim -c 'normal o' -c startinsert +5 nome_file
 
-
</pre>
 
-
dato un file di 8 righe, si posiziona sotto l'ultima creandone una nuova:
 
-
<pre>
 
-
$ vim +9 -c 'put_ | startinsert' nome_file
 
-
</pre>
 
-
apre file cercando la parola foobar:
 
-
<pre>
 
-
$ vim +/foobar nome_file
 
-
</pre>
 
-
apre file cercando corrispondenza della data corrente:
 
-
<pre>
 
-
$ vim +/$(date '+%b %e') nome_file
 
-
</pre>
 
-
cambia variabile lingua e cerca data in formato inglese:
 
-
<pre>
 
-
$ LANG=en_US; vim +/$(date '+%b %e') nome_file
 
-
</pre>
 
-
 
-
col cursore su un link apre sorgente html - '''ctrl-w ctrl-f'''
 
-
 
-
crea un file nuovo come dos invece che unix, permettendo una formattazione leggibile dal notepad di windows - ''':set ff=dos'''
 
-
 
-
crea un file nuovo con codifica iso-8859-1 - ''':set fenc=latin1'''
 
-
 
-
apre un file e ne converte la codifica in iso-8859-1 - ''':e ++enc=latin1'''
 
-
 
-
 
-
= Easter egg =
 
-
'''<nowiki>:</nowiki>h 42''' <br/>
 
-
'''<nowiki>:</nowiki>h!''' <br/>
 
-
'''<nowiki>:</nowiki>h holy-grail''' <br/>
 
-
 
-
 
-
= Riferimenti =
 
-
Vim ha un help interno strepitoso - ''':h help''' <br/>
 
-
Durante la consultazione si trovano dei collegamenti ad altri capitoli o pagine racchiusi tra due pipe, per seguirli posizionarvi sopra il cursore e premere '''ctrl-]'''
 
-
 
-
[http://www.vim.org/ Homepage] <br/>
 
-
[http://vim.wikia.com/wiki/Vim_Tips_Wiki Wiki] <br/>
 
-
[http://www.pluto.it/files/ildp/traduzioni/vimhelp-it/index72.html Help in italiano]
 
-
 
-
<br/><br/>
 
-
: Autore: [[Utente:Skizzhg|skizzhg]]
 
-
: Credits: Plutonio (revisione e suggerimenti)
 
[[Categoria: Elaborazione_testi]]
[[Categoria: Elaborazione_testi]]

Versione attuale delle 00:18, 15 dic 2015

Debian-swirl.png Versioni Compatibili
Tutte le versioni supportate di Debian


Indice

Intoduzione


Basi


Gestione


Editing


Varie


Configurazione


Extra




Guida scritta da: skizzhg

Swirl-auth40.png Debianized 40%

Estesa da:
Plutonio (revisione e suggerimenti)
Verificata da:
S3v 13:34, 24 mag 2015 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Risorse
Strumenti