Vim Cheat Sheet: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Riga 132: Riga 132:
apre file - ''':e nome_file'''
apre file - ''':e nome_file'''


apre file nuovo - ''':enew'''


== Buffer ==
== Buffer ==
Riga 231: Riga 232:
apre finestra corrente in un tab - '''ctrl-w T'''
apre finestra corrente in un tab - '''ctrl-w T'''


Scorrere le finestre assieme:
scorre le finestre assieme in stile vimdiff - ''':set scrollbind'''
<pre>:set scrollbind</pre>
 
apre esplorazione file - ''':Explore'''
apre finestra verticale di esplorazione file - ''':Vexplore'''
 


== Tab ==
== Tab ==
Riga 278: Riga 282:
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/>
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'''
: ''':%s/^M//g'''
ordina testo alfabeticamente - ''':sort'''




Riga 386: Riga 392:
mostra la history di ricerca history con comandi selezionabili - '''q?''' (precedente) <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''
mostra la lista dei comandi interni che iniziano per a - ''':a ctrl-d'''


La ricerca funziona come per tante altre applicazioni: <br/>
La ricerca funziona come per tante altre applicazioni: <br/>
Riga 605: Riga 611:
Per <code>.viminfo</code>, aggiungere la seguente riga in <code>.vimrc</code>:
Per <code>.viminfo</code>, aggiungere la seguente riga in <code>.vimrc</code>:
<pre>
<pre>
set viminfo='100,<50,s10,h,n~/.vim/viminfo
set viminfo='55,<55,s11,:99,h,n~/.vim/viminfo
</pre>
</pre>


I numeri sono i parametri predefiniti, copiati dall'help dove si trova anche la spiegazione: <br/>
I parametri con le relative spiegazioni si trovano nell'help: <br/>
'''<nowiki>:</nowiki>h 'viminfo''''
'''<nowiki>:</nowiki>h 'viminfo''''


Riga 701: Riga 707:
</pre>
</pre>


col cursore su un link apre sorgente html - ctrl-w ctrl-f
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 come dos invece che unix, permettendo una formattazione leggibile dal notepad di windows - ''':set ff=dos'''

Versione delle 19:43, 8 nov 2010

Introduzione

Parlare di Vim non è facile, è complesso, infinito e oltre a questo esiste già una marea di documentazione.
Perciò questa vuole essere una raccolta di comandi spiegata in modo schematico e di facile consultazione in caso di bisogno.
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.

  • 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.
  • Modalità inserimento: per inserire testo come un normale editor, dalla modalità comando vi si accede con i (lettera i).
  • Modalità visuale: selezione del testo con la possibilità di compiere operazioni su interi blocchi, dalla modalità comando si attiva con v (lettera v).
  • 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.
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.
Tutti i comandi sono da intendere in modo letterale, nel senso che vanno digitati così come sono 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.
ctrl-f significa premere contemporaneamente il tasto Control e il tasto f.
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 :).
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

Ci sono vari modi di attivare la modalità inserimento, a seconda delle esigenze e della posizione del cursore.

a sinistra del cursore - i
a destra del cursore - a
a inizio riga - I
a fine riga - A
sulla riga sotto il cursore - o
sulla riga sopra il cursore - O


Come muoversi

sposta cursore a sinistra - h
sposta cursore a destra - l
sposta cursore su - j
sposta cursore giù - k

sposta cursore avanti all'inizio della parola successiva - w
sposta cursore indietro all'inizio della parola successiva - b

sposta cursore avanti all'inizio della parola successiva ignorando la punteggiatura - W
sposta cursore indietro all'inizio della parola successiva ignorando la punteggiatura - B

sposta cursore tre parole avanti all'inizio della parola - 3w
sposta cursore tre parole indietro all'inizio della parola - 3b

sposta cursore avanti alla fine della parola - e
sposta cursore indietro alla fine della parola - ge

sposta cursore avanti alla fine della parola successiva ignorando la punteggiatura - E
sposta cursore indietro alla fine della parola successiva ignorando la punteggiatura - gE

sposta cursore tre parole avanti alla fine - 3e
sposta cursore al primo carattere della riga - |
sposta cursore al terzo carattere della riga - 3|
sposta cursore al primo carattere non bianco - ^

sposta cursore ad inizio riga - 0
sposta cursore a fine riga - $

sposta cursore una pagina avanti - ctrl-f (oppure ctrl-d)
sposta cursore una pagina indietro - ctrl-b (oppure ctrl-u)

sposta cursore avanti ad inizio frase - )
sposta cursore indietro ad inizio frase - (

sposta cursore su ad inizio paragrafo - {
sposta cursore giù a fine paragrafo - }

sposta cursore a inizio documento - gg (oppure [[)
sposta cursore a fine documento - G (oppure ]])
sposta cursore alla riga 33 - 33 G (oppure :33)

sposta cursore alla prima riga dello schermo - H
sposta cursore all'ultima riga dello schermo - L
sposta cursore alla riga al centro dello schermo - M
sposta cursore alla terza riga dello schermo - 3H
sposta cursore alla terzultima riga dello schermo - 3L

sposta il cursore sulla parentesi corrispondente ad una chiusa o aperta - %

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 cd e cd - :

torna alla posizione precedente - ctrl-o
vai alla posizione successiva - ctrl-i

Se invece volessimo una specie di segnalibro per tornare ad un punto preciso:

m (seguito dal carattere)

e quindi tornarvi in qualsiasi momento:

' (seguito dal carattere)


Salvare il documento

salva file già esistente - :w
salva file non esistente - :w nome_file

salva più file aperti, che siano buffer o tab - :wa
salva con altro nome, fa una copia mantendendo l'originale - :sav nome_file


Uscire da Vim

esce - :q
esce da tutti, che siano buffer o tab - :qa
salva ed esce - :wq (oppure :x oppure ZZ)
salva tutti, che siano buffer o tab - :wa
esce senza salvare - :q! (oppure ZQ)

mappa la sequenza di tasti ZW per salvare senza chiudere:

:map ZW :w<cr>


Apertura e gestione dei file

Si possono aprire molteplici file e gestirli in vari modi:

  • 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.
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:
:n (successivo)
:prev (precedente)
:bn (successivo)
:bp (precedente)
: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:
ctrl-^ (oppure ctrl-6)
N ctrl-^ (dove N è il numero del buffer)

Si può ottenere una lista dei buffer aperti in tre modi diversi:
:ls
:buffers
:files

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.
Per la spiegazione degli indicatori leggere il relativo help.
:h :ls

passa a un buffer specifico - :b numero_buffer
chiude il buffer corrente - :bd
chiude un buffer specifico - :bd numero_buffer


Finestre

divide finestra orizzontalmente - :split (oppure ctrl-w s)
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.

divide creando finestra orizzontale vuota - ctrl-w n
mappa la sequenza di tasti ctrl-w V per creare una finestra verticale vuota:

:map <C-W>V :vne<cr>

Come si può vedere il comando è :map 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 è :vne, ed infine <cr> 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 ~/.vimrc; i due punti possono essere omessi.

È possibile aprire una finestra con una dimensione predefinita (ad esempio, :33split):
:NUMEROsplit
:NUMEROvsplit

muoversi tra le finestre - ctrl-w w
muoversi in una finestra precisa:
ctrl-w h sinistra
ctrl-w j sotto
ctrl-w k sopra
ctrl-w l destra
ctrl-w t piu' in alto
ctrl-w b piu' in basso

ridimensionare orizzontalmente:
ctrl-w +
ctrl-w -

con numero di righe predefinito (ad esempio, 33 ctrl-w +):
NUMERO ctrl-w +
NUMERO ctrl-w -

con dimensione predefinita: NUMERO ctrl-w _

ridimensiona verticalmente:
NUMERO ctrl-w <
NUMERO ctrl-w >
NUMERO ctrl-w =

inverte posizione finestra orizzontale:
verso l'alto - ctrl-w R
verso il basso - ctrl-w r
indipendente dal focus - ctrl-w x

inverte posizione finestra verticale:
muovi a sinistra - ctrl-w H
muovi a destra - ctrl-w L
muovi in alto - ctrl-w K
muovi in basso - ctrl-w J

chiude finestra - :close (oppure ctrl-w c)
chiudi finestra tranne la corrente - ctrl-w o

Si possono aprire in finestre più buffer già presenti:
apre tutti in finestre orizzontali - :ball
apre tutti in finestre verticali - :vertical ball

apre più file in finestre orizzontali:

$ vim -o nome_file1 nome_file2

apre piu' file in finestre verticali

$ vim -O nome_file1 nome_file2

apre finestra corrente in un tab - ctrl-w T

scorre le finestre assieme in stile vimdiff - :set scrollbind

apre esplorazione file - :Explore apre finestra verticale di esplorazione file - :Vexplore


Tab

apre tab - :tabnew
chiude tab - :close

apre file in un nuovo tab - :tabedit nome_file

apre più file in tab:

$ vim -p nome_file1 nome_file2

apre più buffer in tab - :tab ball

muoversi tra tab:
successivo - :tabn (oppure gt)
precedente - :tabp (oppure gT)


Editing

Sostituzione

entra in modalità sostituzione - R
sostituisce singolo carattere e torna in modalità comando - r (seguito dal carattere)

maiuscole in minuscole e viceversa - ~
tutta la riga minuscola - guu (oppure vu)
solo una parola minuscola - vEu
tutta la riga maiuscola - gUU (oppure VU)
solo una parola maiuscola - vEU
inverte maiuscole e minuscole di una parola - vE~
inverte maiuscole e minuscole di una riga - g~~
intero file minuscolo - ggguG
intero file maiuscolo - gggUG

sostituzione prima corrispondenza sulla riga - :s/vecchio/nuovo
sostituzione su tutta la riga - :s/vecchio/nuovo/g
sostituzione con richiesta di conferma - :s/vecchio/nuovo/gc
sostituzione in tutto il documento - :%s/vecchio/nuovo

sostituzione in tutti i buffer - :bufdo %s/vecchio/nuovo/ge | update

elimina le terminazioni di riga in stile dos, ovvero quei simpatici ^M - :%s/\r/
se non fossero solo a fine riga, digitare :%s/ seguito da ctrl-v e ctrl-m, quindi aggiungere //g e fare la sostituzione:

:%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.
Come accennato all'inizio, la modalità visuale seleziona il testo.

inizia selezione - v
seleziona intera riga - V
seleziona blocco (salta righe vuote) - ctrl-v
seleziona tutto - ggVG

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.
Ecco ad esempio come copiare del testo salvandolo in altro file:
v
:'<,'>w nome_file

Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il cursore:
: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:
:!ls

Possiamo quindi inserire nel documento qualsiasi output della shell:
:r !ls

In caso servisse una shell con piena funzionalità:
:shell

Si noti che è un sotto processo di Vim, ricordarsi dunque di uscire una volta finito :)


Indentazione

inserisce un'indentazione su riga - :>
inserisce due indentazioni su riga - :>>
toglie un'indentazione su riga - :<
toglie due indentazioni su riga - :<<
inserisce un'indentazione su 3 righe - :>3
inserisce un'indentazione sulla terza riga - :3>

scorciatoie:
>> (inserisce)
<< (toglie)
= (toglie)


Copia, taglia, incolla, cancella

Questo funziona solo all'interno della sessione corrente di Vim.
copia testo selezionato - y
copia prima parola di una riga - yw
copia intera riga - yy

incolla testo tagliato sotto la riga dove è il cursore - p

mette la riga sottostante in coda alla corrente - J


cancella carattere - x
cancella tre caratteri - 3x
cancella parola a destra del cursore - dw
cancella parola a sinistra del cursore - db
cancella ciò che si trova sotto al cursore - D
cancella intera riga - d$
cancella intera riga compreso spazio occupato - dd
cancella tre righe - 3dd
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso - df (seguito dal carattere)
cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso - dt (seguito dal carattere)
cancella tutte le righe dello schermo sotto il cursore - dL
cancella dalla riga in cui si trova il cursore alla fine del documento - dG
cancella dalla riga in cui si trova il cursore all'inizio del documento - dg
cancella intero documento - ggdG
cancella parola e passa alla modalità inserimento - cw
cancella riga e passa alla modalità inserimento - cc
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso e passa alla modalità inserimento - cf (seguito dal carattere)
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
cancella ogni riga che termina con una certa parola - :g/parola$/d
cancella ogni riga che contiene una certa parola - :g/parola/d
cancella le righe commentate - :g/^#/d
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à:
undo - u
undo di una riga - U

redo - ctrl-r


Per l'ultima operazione effettuata, qualunque essa sia, e quindi automatizzare un pò le ripetizioni si usa il punto:
.


Per la modalità comando:
ripete ultima operazione - @:
mostra la history dei comandi - :history
mostra la history con comandi selezionabili - q:
mostra la history di ricerca con comandi selezionabili - q/ (successivo)
mostra la history di ricerca history con comandi selezionabili - q? (precedente)

mostra la lista dei comandi interni che iniziano per a - :a ctrl-d

La ricerca funziona come per tante altre applicazioni:
cerca parola in avanti - /parola
ripete ricerca in avanti - n

cerca parola indietro - ?parola
ripete ricerca indietro - N


Autocompletamento

In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate precedentemente.
ctrl-x
scorrimento tra i risultati - ctrl-n / ctrl-p
annulla - ctrl-e
accetta parola selezionata - ctrl-y (oppure Enter)


Clipboard

Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono utilizzate.

  • 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.

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:

copia - "*y
taglia - "*x
incolla - "*p

CLIPBOARD:

copia - "+y
taglia - "+x
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:
:version

cercando clipboard e xterm_clipboard nell'elenco delle funzionalità, oppure con una ricerca mirata, che produrrà 1 se presente o 0 se non lo è:
:echo has('clipboard')
:echo has('xterm_clipboard')

per ottenere questo si dovrà installare una delle interfacce grafiche a scelta tra:

  • vim-gnome
  • vim-gtk
  • vim-lesstif


Differenze

Una funzione irrinunciabile, controllare le differenze tra due o più file.

apre una finestra orizzontale diff - :diffsplit
apre una finestra verticale diff - :vert diffsplit
aggiorna diff dopo cambiamenti - :diffupdate

vimdiff è un modo per richiamare vim con l'opzione -d:

$ vimdiff nome_file1 nome_file2

Un paio di hack per controllare le differenze tra directory:

$ vimdiff <(ls -R $DIR1) <(ls -R $DIR2)
$ vim -c 'e nome_directory1' -c diffthis -c 'vert split nome_directory2' -c diffthis

Apre due tab con il diff di due file in ognuno:

$ 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


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:
:TOhtml

crea un html da linea di comando:

$ vim -n -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1

testo scuro su sfondo chiaro:

$ vim -n -c 'set background=light' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1

testo chiaro su sfondo scuro:

$ vim -n -c 'set background=dark' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1


Cifratura testo

$ vim -x nome_file

cifratura senza file swap (più sicuro):

$ vim -x -n nome_file

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:
:set key=

ovvero lasciando campo vuoto, per riattivarla si usa invece:
: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:

$ vim --servername debianizzati

Il nome dato è assolutamente arbitrario.
Ora si può aprire un altro terminale che fungerà da client e fare qualche prova. Passiamo in modalità inserimento e scriviamo qualcosa:

$ vim --servername debianizzati --remote-send 'i La guida su Vim di Debianizzati.org<cr>'

Torniamo in modalità comando e apriamo un'altra finestra:

$ vim --servername debianizzati --remote-send '<esc><c-w>s<cr>'

Salviamo il file e chiudiamo Vim:

$ vim --servername debianizzati --remote-send '<esc>:w /tmp/debianizzati<cr>:qa<cr>'

Non sarà comodissimo ma si può fare anche questo :)
Per gli altri comandi leggere l'help.
:h --remote


Configurazione

Personalmente utilizzo una statusbar ben configurata, ma a qualcuno piace avere i numeri delle righe alla sinistra del testo:
visualizza numeri riga - :set number
rimuove visualizzazione - :set nonumber

C'è anche chi vuole il mouse, ho le convulsioni al solo pensiero :)
abilita uso del mouse - :set mouse=a
disabilita - :set mouse=


.vimrc

Il file di configurazione è una cosa molto personale, citando vimgor, il bot del canale IRC:
<skizzhg> vimgor, :kill_kittens
<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:

  • la statusbar che fornisce molte informazioni sul documento

set laststatus=2
set statusline=(%n)\ %F\ [%{strlen(&fenc)?&fenc:'none'},%{&ff}]%h%m%r%y%=%c,%l/%L\ %P

(fonte: 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

  • 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>
nnoremap <Leader>l :ls<cr>
nnoremap <Leader>b :bp<cr>
nnoremap <Leader>f :bn<cr>
nnoremap <Leader>g :e#<cr>
nnoremap <Leader>D :bd<cr>
nnoremap <Leader>1 :1b<cr>
nnoremap <Leader>2 :2b<cr>
nnoremap <Leader>3 :3b<cr>
nnoremap <Leader>4 :4b<cr>
nnoremap <Leader>5 :5b<cr>
nnoremap <Leader>6 :6b<cr>
nnoremap <Leader>7 :7b<cr>
nnoremap <Leader>8 :8b<cr>
nnoremap <Leader>9 :9b<cr>
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
let html_number_lines=0
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 .vim/ con una struttura simile a /usr/share/vim/vim72/.
Per coerenza e ordine si farà in modo che i file .viminfo e .vimrc vengano spostati nella directory .vim/ insieme a tutto il resto.

Per .viminfo, aggiungere la seguente riga in .vimrc:

set viminfo='55,<55,s11,:99,h,n~/.vim/viminfo

I parametri con le relative spiegazioni si trovano nell'help:
:h 'viminfo'

Per .vimrc inserire la seguente variabile in bash_profile (o .profile):

export VIMINIT="source $HOME/.vim/vimrc"

Per ulteriori informazioni si veda:
:h VIMINIT


Gerarchia della directory .vim/

.vim/colors: dove risiedono gli eventuali schemi colori aggiunti.

Visualizza lo schema in uso - :colorscheme


.vim/doc: la documentazione dei plugin.

Per far sì che Vim riconosca i cambiamenti, usare il comando:
:helptags .vim/doc/

Per ulteriori informazioni si veda:
:h :helptags


.vim/plugin: i plugin aggiunti

Per ulteriori informazioni si veda:
:h plugin

Visualizza tutti i plugin, temi e altro caricati - :scriptnames


.vim/ftdetect: dove ho inserito il menu di gvim, che è ampiamente customizzabile, per evitare che gli aggiornamenti sovrascrivano l'originale in $VIMRUNTIME/menu.vim; in realtà ftdetect servirebbe per la sintassi dei tipi di file ma pare l'unico modo per farglielo vedere.

Per ulteriori informazioni si veda:
:echo $VIMRUNTIME :h ftdetect :h menu.vim


lessvim: lo script che utilizza vim in modalità less e richiama $VIMRUNTIME/macros/less.vim.
Lo tengo in home per via di una lieve modifica (opzione -n) che evita di aprire un file .swp e mantenere quindi il file impegnato, un alias bash fa il resto:

alias less='$HOME/.vim/lessvim'.

Lo scopo è avere less 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.

set editor="vim -f -c 'set tw=73' -c '/^$/' -c 'normal o' -c startinsert"

apre Vim con limite di lettere per riga (73):

$ vim -c 'set tw=73'

apre file alla riga 5:

$ vim +5 nome_file

apre file alla riga 5 in insert mode:

$ vim -c startinsert +5 nome_file

apre file in insert mode sotto la riga 5:

$ vim -c 'normal o' -c startinsert +5 nome_file

dato un file di 8 righe, si posiziona sotto l'ultima creandone una nuova:

$ vim +9 -c 'put_ | startinsert' nome_file

apre file cercando la parola foobar:

$ vim +/foobar nome_file

apre file cercando corrispondenza della data corrente:

$ vim +/$(date '+%b %e') nome_file

cambia variabile lingua e cerca data in formato inglese:

$ LANG=en_US; vim +/$(date '+%b %e') nome_file

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

:h 42
:h!
:h holy-grail


Riferimenti

Vim ha un help interno strepitoso - :h help
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-]

Homepage
Wiki
Help in italiano



Autore: skizzhg
Credits: Plutonio (revisione e suggerimenti)