Vim Cheat Sheet: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(18 versioni intermedie di 4 utenti 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'''
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 23:18, 14 dic 2015

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian


Intoduzione

  • Le diverse modalità con cui interfacciarsi a Vim


Basi

  • Iniziare a scrivere
  • Come muoversi
  • Salvare il documento
  • Uscire da Vim


Gestione

  • Buffer
  • Finestre
  • Tab


Editing

  • Sostituzione
  • Selezione e inserimento
  • Indentazione
  • Copia, taglia, incolla, cancella
  • Annulla, ripeti, cronologia e ricerca
  • Autocompletamento
  • Clipboard


Varie

  • Differenze
  • Creare HTML
  • Cifratura testo
  • Vim remote


Configurazione

  • .vimrc
  • .vim/
  • Gerarchia della directory .vim/


Extra

  • Extra
  • Easter egg
  • Riferimenti




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