Il .vimrc: farsi un Vim su misura
Vim appena installato è volutamente spartano. Bastano una trentina di righe di configurazione per renderlo comodo — e sapere cosa stai attivando è più utile che copiare il file di configurazione di qualcun altro.
Dove vive la configurazione
| Programma e sistema | File |
|---|---|
| Vim, Linux e macOS | ~/.vimrc · le cose accessorie in ~/.vim/ |
| Vim, versioni recenti | anche ~/.vim/vimrc, più ordinato |
| Neovim | ~/.config/nvim/init.vim (o init.lua) |
| Vim, Windows | ~/_vimrc |
| Vim 9.2 e successivi | anche ~/.config/vim/vimrc, secondo lo standard XDG |
Per scoprire quale file sta usando la tua installazione, senza indovinare:
:echo $MYVIMRC. E per aprirlo al volo, :e $MYVIMRC.
Dopo averlo modificato, :source $MYVIMRC lo ricarica senza riavviare.
Una base ragionevole
" --- comportamento di base --- set nocompatible " niente emulazione del vecchio vi syntax on " colori della sintassi filetype plugin indent on " regole diverse per linguaggio set encoding=utf-8 set hidden " buffer non salvati restano in memoria set backspace=indent,eol,start set mouse=a " il mouse funziona, se ti serve " --- aspetto --- set number relativenumber " numeri assoluti + relativi (lezione 2) set cursorline " evidenzia la riga del cursore set showcmd " mostra i tasti che stai premendo set laststatus=2 " statusline sempre visibile set scrolloff=5 " tieni 5 righe di margine sopra e sotto set wrap linebreak " a capo, ma senza spezzare le parole " --- ricerca (lezione 6) --- set incsearch hlsearch set ignorecase smartcase " --- indentazione --- set expandtab " spazi invece di tabulazioni set tabstop=4 shiftwidth=4 softtabstop=4 set autoindent " --- file e ricerca file (lezione 7) --- set path+=** set wildmenu set wildmode=longest:full,full set wildignore+=**/node_modules/**,**/.git/** " --- niente file sparsi nelle cartelle di lavoro --- set undofile " undo persistente tra le sessioni set undodir=~/.vim/undo// set directory=~/.vim/swap// set nobackup
mkdir -p ~/.vim/undo ~/.vim/swap. La doppia barra finale
non è un errore di battitura: dice a Vim di costruire il nome del file dal
percorso completo, così due file omonimi in cartelle diverse non si scontrano.
Mappature: aggiungere i tuoi comandi
Una mappatura assegna una sequenza di tasti a un'altra. La forma da usare è
quasi sempre nnoremap: n indica il modo NORMAL,
nore significa «non ricorsiva», cioè non rimappare a sua volta i
tasti a destra — è la differenza tra una configurazione stabile e una che si
rompe quando aggiungi un plugin.
| Prefisso | Modo in cui vale la mappatura |
|---|---|
| nnoremap | NORMAL |
| inoremap | INSERT |
| vnoremap | VISUAL |
| cnoremap | riga di comando |
| nmap, imap… | versioni ricorsive: da evitare finché non sai perché ti servono |
Il tasto leader
<Leader> è un tasto-prefisso per le tue scorciatoie personali,
così non ti scontri con i comandi di Vim. L'impostazione predefinita è la barra
rovescia; quasi tutti la cambiano nella barra spaziatrice, che è grande e non fa
nulla di utile in NORMAL.
let mapleader = " " " file nnoremap <Leader>w :w<CR> nnoremap <Leader>q :q<CR> nnoremap <Leader>e :e $MYVIMRC<CR> " spegni l'evidenziazione della ricerca nnoremap <Leader>h :nohlsearch<CR> " muoversi tra le finestre senza il Ctrl-w nnoremap <C-h> <C-w>h nnoremap <C-j> <C-w>j nnoremap <C-k> <C-w>k nnoremap <C-l> <C-w>l " buffer nnoremap <Leader>b :ls<CR>:b<Space> " in VISUAL: sposta le righe selezionate su e giù vnoremap J :m '>+1<CR>gv=gv vnoremap K :m '<-2<CR>gv=gv " mantieni la selezione dopo aver indentato vnoremap < <gv vnoremap > >gv
.vimrc di trecento
righe copiato da internet è pieno di scorciatoie che non userai e che ti
nasconderanno comandi standard. La regola sana: quando ti accorgi di ripetere la
stessa sequenza per la terza volta in un giorno, allora mappala.
I plugin, se e quando
Vim moderno carica i plugin da solo se li metti in
~/.vim/pack/plugins/start/ — un semplice git clone
lì dentro basta, senza nessun gestore. Se preferisci qualcosa di più comodo,
vim-plug è il più usato e sta in un file solo. Due plugin che
quasi tutti finiscono per tenere: vim-surround (aggiungere e
cambiare virgolette, parentesi e tag attorno a un oggetto di testo) e
vim-commentary (gcc per commentare una riga,
gc più un movimento).
:verbose: chi ha impostato questa cosa?
Prima o poi succede: un'opzione ha un valore che non ti aspetti, o un tasto fa
qualcosa di strano, e in mezzo hai un .vimrc, sei plugin e i file di
tipo. Invece di cercare a tentoni, chiedilo a Vim.
:set shiftwidth? shiftwidth=2 # e io ne avevo messo 4... :verbose set shiftwidth? shiftwidth=2 Last set from ~/.vim/ftplugin/html.vim line 12 :verbose map <Leader>w n <Space>w *@:w<CR> Last set from ~/.vimrc line 34 :verbose autocmd BufWritePre # chi tocca il file al salvataggio
:verbose premesso a qualsiasi comando di interrogazione aggiunge la
riga «Last set from», cioè file e numero di riga del colpevole. In tre secondi
sai dove intervenire.
| Comando | A cosa serve |
|---|---|
| :set opzione? | mostra il valore corrente |
| :set opzione& | la riporta al valore di fabbrica |
| :options | apre un elenco navigabile di tutte le opzioni, con le descrizioni |
| :map | elenca tutte le mappature attive |
| :scriptnames | elenca ogni file caricato, nell'ordine in cui è stato letto |
| vim -u NONE -N file | avvia Vim ignorando ogni configurazione: il test decisivo |
vim -u NONE -N. Se il problema sparisce, è configurazione;
se resta, è Vim o il file stesso. Poi si dimezza — commenta metà del
.vimrc, ricarica, ripeti.