vim
Configurazione di Vim
Ricerca…
Il file vimrc
Il file .vimrc
(pronunciato Vim-wreck) è un file di configurazione di Vim. Mantiene i comandi che verranno eseguiti da Vim ogni volta che inizia.
Di default il file è vuoto o inesistente; puoi usarlo per personalizzare il tuo ambiente Vim.
Per scoprire dove Vim si aspetta che il file vimrc sia archiviato, apri Vim ed esegui:
:echo $MYVIMRC
Unix: su un sistema Unix come Mac o Linux il tuo vimrc sarà chiamato .vimrc
e di solito si troverà nella tua directory home ( $HOME/.vimrc
).
Windows: su Windows sarà chiamato _vimrc
e si trova nella directory home ( %HOMEPATH%/_vimrc
).
All'avvio, Vim cercherà in più posti per un file vimrc. Il primo che esiste è usato, gli altri sono ignorati. Per un riferimento completo, consultare l'articolo della documentazione di :h $MYVIMRC
.
Quali opzioni posso usare?
Se non sai quali opzioni dovresti usare, potresti essere interessato al comando :options
.
Questo aprirà una divisione con tutte le opzioni di Vim elencate e con il loro valore attuale visualizzato. Ci sono 26 sezioni per visualizzare tutte le opzioni che puoi provare.
per esempio
4 displaying text
scroll number of lines to scroll for CTRL-U and CTRL-D
(local to window)
set scr=20
scrolloff number of screen lines to show around the cursor
set so=5
wrap long lines wrap
set nowrap wrap
...
Su una riga di valore (ad es. set nowrap
) è possibile premere CR per commutare il valore (se si tratta di un valore binario). Su una linea di opzioni (ad es. wrap long line wrap
ritorno a wrap long line wrap
) è possibile premere CR per accedere alla documentazione di questa opzione.
File e directory
Qualunque cosa tu faccia per personalizzare Vim, non dovrebbe MAI accadere al di fuori di $HOME
:
- su Linux, BSD e Cygwin,
$HOME
è in genere/home/username/
, - su Mac OS X,
$HOME
è/Users/username/
, - su Windows,
$HOME
è in genereC:\Users\username\
.
La posizione canonica per la tua directory vimrc
e la tua directory vim
è alla radice della directory $HOME
:
su sistemi simil-Unix
$HOME/.vimrc <-- the file $HOME/.vim/ <-- the directory
Su Windows
$HOME\_vimrc <-- the file $HOME\vimfiles\ <-- the directory
Il layout sopra è garantito per funzionare, ora e in futuro.
Vim 7.4 ha permesso di mantenere il tuo bel vimrc
nella tua directory di vim
. È davvero una buona idea, se non altro perché rende più facile spostare la tua configurazione.
Se utilizzi esclusivamente 7.4, quanto segue sarà sufficiente:
su sistemi simil-Unix
$HOME/.vim/vimrc
Su Windows
$HOME\vimfiles\vimrc
Se vuoi i vantaggi di un vim/
autonomo vim/
ma usare sia la versione 7.4 che una versione precedente, o solo una versione precedente, la soluzione più semplice e a prova di futuro è quella di mettere questa linea e solo questa linea:
runtime vimrc
in questo file:
su sistemi simil-Unix
$HOME/.vimrc
Su Windows
$HOME\_vimrc
e fai la tua configurazione in $HOME/.vim/vimrc
o $HOME\vimfiles\vimrc
.
Opzioni
Ci sono tre tipi di opzioni:
- opzioni booleane,
- opzioni di stringa,
- numero di opzioni.
Per verificare il valore di un'opzione,
- utilizzare
:set option?
per verificare il valore di un'opzione, - utilizzare
:verbose set option?
per vedere anche dove era l'ultima volta.
Impostazione delle opzioni booleane
set booloption " Set booloption.
set nobooloption " Unset booloption.
set booloption! " Toggle booloption.
set booloption& " Reset booloption to its default value.
Impostazione delle opzioni di stringa
set stroption=baz " baz
set stroption+=buzz " baz,buzz
set stroption^=fizz " fizz,baz,buzz
set stroption-=baz " fizz,buzz
set stroption= " Unset stroption.
set stroption& " Reset stroption to its default value.
Impostazione delle opzioni di numero
set numoption=1 " 1
set numoption+=2 " 1 + 2 == 3
set numoption-=1 " 3 - 1 == 2
set numoption^=8 " 2 * 8 == 16
Usare un'espressione come valore
utilizzando la concatenazione:
execute "set stroption=" . my_variable
utilizzando
:let
:let &stroption = my_variable
Vedi :help :set
e :help :let
.
Mapping
- Non inserire commenti dopo la mappatura, si romperà le cose.
- Usa
:map <F6>
per vedere cosa è mappato a<F6>
e in quale modalità. - Usa
:verbose map <F6>
per vedere anche dove è stata mappata l'ultima volta. -
:map
e:map!
sono troppo generici Usa:n[nore]map
per i mapping in modalità normale,::i[nore]map
per la modalità di inserimento:x[nore]map
per la modalità visiva, ecc.
Mappature ricorsive
Utilizzare i mapping ricorsivi solo se si intende utilizzare altri mapping nei mapping:
nnoremap b B
nmap <key> db
In questo esempio, b
è fatto per funzionare come B
in modalità normale. Dato che usiamo b
in una mappatura ricorsiva , premendo <key>
funzionerà come dB
, non come db
.
Mappature non ricorsive
Utilizza i mapping non ricorsivi solo se intendi utilizzare i comandi predefiniti nei tuoi mapping, che è quasi sempre quello che desideri:
nnoremap <key> db
In questo esempio, usiamo b
in una mappatura non ricorsiva, quindi premendo il tasto funzionerà sempre come db
, sia che rimappiamo b
oppure no.
Esecuzione di un comando da una mappatura
nnoremap <key> :MyCommand<CR>
Esecuzione di più comandi da una mappatura
nnoremap <key> :MyCommand <bar> MyOtherCommand <bar> SomeCommand<CR>
Chiamare una funzione da una mappatura
nnoremap <key> :call SomeFunction()<CR>
Mappatura di una mappatura <Plug>
map <key> <Plug>name_of_mapping
Vedi :help map-commands
:help key-notation
e :help <plug>
.
vedi Key Mappings in Vim per ulteriori letture
variabili
Come la maggior parte dei linguaggi di scripting, vimscript ha variabili.
Si può definire una variabile con il comando: :let
:
let variable = value
ed eliminalo con :unlet
:
unlet variable
In Vim, le variabili possono essere esaminate anteponendo una singola lettera e due punti al loro nome. Gli autori di plug-in utilizzano questa funzionalità per simulare le opzioni:
let g:plugin_variable = 1
Vedi :help internal-variables
.
comandi
- Non dimenticare il botto per consentire a Vim di sovrascrivere quel comando la prossima volta che ricarichi il tuo vimrc.
- I comandi personalizzati devono iniziare con un carattere maiuscolo.
Esempi
command! MyCommand call SomeFunction()
command! MyOtherCommand command | Command | command
- Vedi
:help user-commands
.
funzioni
- Non dimenticare il botto per consentire a Vim di sovrascrivere quella funzione la prossima volta che ricarichi lo script in cui è definita la funzione.
- Le funzioni personalizzate devono iniziare con caratteri maiuscoli (funzioni globali) o con
s:
(funzioni locali di script) oppure devono essere preceduti dal nome associato al plug-in di caricamento automatico dove sono definiti (ad es. In{&rtp}/autoload/foo/bar.vim
potremmo definirefoo#bar#functionname()
). - Per poter utilizzare i parametri nella funzione, utilizzare
a:parameter_name
. Le funzioni variabili possono essere definite con i puntini di sospensione...
, per accedere ai parametri utilizzarea:000
(elenco di tutti i parametri) oa:0
(numero di parametri uguale alen(a:000)
),a:1
prima senza nome parametri e così via. - Le funzioni possono essere chiamate in questo modo
:call MyFunction(param1, param2)
- Ogni riga di una funzione inizia implicitamente con a
:
quindi tutti i comandi sono comandi di due punti - Per evitare che la funzione continui la sua esecuzione in caso di errore, è meglio annotare la firma della funzione con
abort
Esempio
function! MyFunction(foo, bar, ... ) abort
return a:foo . a:bar . (a:0 > 0 ? a:1 : '')
endfunction
Funzioni dello script
Se pensi di utilizzare la tua funzione solo nel file in cui è definita (o perché hai rotto una funzione più grande in parti più piccole, o perché la userai in un comando, una mappatura, ...), puoi prefisso con s:
:, evitando di sporcare il tuo namespace globale con funzioni interne inutili:
function! s:my_private_function() " note we don't need to capitalize the first letter this time
echo "Hi!"
endfunction
Usando s: funzioni dalle mappature
Se la funzione locale dello script verrà utilizzata in una mappatura, è necessario fare riferimento utilizzando il prefisso <SID>
speciale:
nnoremap <your-mapping-key> :call <SID>my_private_function()<CR>
Vedi :help user-functions
.
Si noti, tuttavia, che dal Vim 7 è considerata una buona pratica definire abbreviazioni di mapping, comandi e menu nei plugin (ft) e definire funzioni nei plugin di caricamento automatico, ad eccezione delle funzioni che i plugin devono utilizzare al momento del caricamento. Ciò significa che al giorno d'oggi la necessità di richiamare le funzioni locali degli script dalle mappature non è così pertinente come una volta.
Gruppi di autocomando
- I gruppi di autocommand sono validi per l'organizzazione ma possono essere utili anche per il debug. Pensali come piccoli spazi dei nomi che puoi abilitare / disabilitare a piacimento.
Esempio
augroup MyGroup
" Clear the autocmds of the current group to prevent them from piling
" up each time you reload your vimrc.
autocmd!
" These autocmds are fired after the filetype of a buffer is defined to
" 'foo'. Don't forget to use 'setlocal' (for options) and '<buffer>'
" (for mappings) to prevent your settings to leak in other buffers with
" a different filetype.
autocmd FileType foo setlocal bar=baz
autocmd FileType foo nnoremap <buffer> <key> :command<CR>
" This autocmd calls 'MyFunction()' everytime Vim tries to create/edit
" a buffer tied to a file in /'path/to/project/**/'.
autocmd BufNew,BufEnter /path/to/project/**/* call MyFunction()
augroup END
Vedi :help autocommand
.
Condizionali
if v:version >= 704
" Do something if Vim is the right version.
endif
if has('patch666')
" Do something if Vim has the right patch-level.
endif
if has('feature')
" Do something if Vim is built with 'feature'.
endif
Vedi :help has-patch
e :help feature-list
.
Impostazione delle opzioni
Comunemente useresti :set
per impostare le opzioni a tuo piacimento nel tuo .vimrc
. Ci sono molte opzioni che possono essere cambiate.
Ad esempio, per utilizzare gli spazi per il rientro:
:set expandtab
:set shiftwidth=4
:set softtabstop=4
Evidenziazione della sintassi
Attiva l'evidenziazione della sintassi, quando il terminale ha colori
if &t_Co > 2 || has("gui_running")
syntax on
end
Mostra spazi bianchi e tabulati finali. La visualizzazione delle schede può essere particolarmente utile quando si cercano errori nei Makefile.
set list listchars=tab:\|_,trail:.
highlight SpecialKey ctermfg=DarkGray
Combinazioni di colori
Vim viene fornito con diversi schemi di colori preinstallati. In Linux, le combinazioni di colori fornite con Vim sono memorizzate in /usr/share/vim/vim74/colors/
(dove 74 è il numero della versione, i periodi sans); MacVim li memorizza in /Applications/MacVim.app/Contents/Resources/vim/runtime/colors
.
Modifica delle combinazioni di colori
Il comando colorscheme
cambia la colorscheme
colori corrente.
Ad esempio, per impostare la combinazione di colori su "robokai":
:colorscheme robokai
Lo schema dei colori di default è creativamente nome default
, quindi, per tornare esso uso
:colorscheme default
Per visualizzare tutte le combinazioni di colori attualmente installate, digitare :colorscheme
seguito da spazio e quindi tab o ctrl d .
Installazione di combinazioni di colori
Le combinazioni di colori installate dall'utente possono essere inserite in ~/.vim/colors/
. Una volta che una colorscheme
colori viene aggiunta a questa directory, verrà visualizzata come opzione per il comando colorscheme
.
Per trovare nuove combinazioni di colori, ci sono siti come i vimcolors che contengono una varietà di combinazioni di colori. Ci sono anche strumenti come vim.ink e Vivify per aiutarti a creare i tuoi schemi colore, oppure puoi crearli a mano.
Attiva / disattiva l'enumerazione delle righe
Per abilitare - digitare:
:set number
o :set nu
.
Per disabilitare - digitare:
:set nonumber
o :set nonu
.
Per abilitare l'enumerazione relativa alla posizione del cursore, digitare:
:set relativenumber
.
Per disabilitare l'enumerazione relativa alla posizione del cursore, digitare:
:set norelativenumber
.
Nota: per modificare se la riga corrente mostra il numero di linea effettivo o 0
, utilizzare :set number
e :set nonumber
comandi non :set nonumber
mentre l'attributo relativenumber
è attivo.
plugin
I plugin Vim sono addon che possono essere usati per cambiare o migliorare la funzionalità di vim.
C'è una buona lista di plugin su vimawesome