Vim Cheat Sheet
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
dato un file con tante righe nella forma di foo bar baz http://bla
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.
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 po'
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.
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)