Vim Cheat Sheet: differenze tra le versioni

nuova veste divisa in sottopagine
mNessun oggetto della modifica
(nuova veste divisa in sottopagine)
Riga 25: Riga 25:




= 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
sposta cursore una pagina avanti - '''ctrl-f''' (oppure '''ctrl-d''') <br/>
* Riferimenti
sposta cursore una pagina indietro - '''ctrl-b''' (oppure '''ctrl-u''')
 
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/>
<br/><br/>
271

contributi