Ho un problema in Vim e penso che potrebbe essere nel mio vimrc
file (o mi è stato detto che potrebbe essere il mio vimrc
file).
Come posso verificare questo? Se è il mio vimrc
file, come faccio a sapere esattamente dove si trova il problema?
Ho un problema in Vim e penso che potrebbe essere nel mio vimrc
file (o mi è stato detto che potrebbe essere il mio vimrc
file).
Come posso verificare questo? Se è il mio vimrc
file, come faccio a sapere esattamente dove si trova il problema?
Risposte:
La prima cosa che vuoi fare è avviare Vim con le impostazioni predefinite:
vim -u NONE -U NONE -N
Le -u NONE
impedisce Vim da caricare il tuo vimrc, -U NONE
impedisce Vim di caricare il vostro gvimrc, e -N
dice a Vim di usare no-compatibili modalità (questo non è richiesto, ma la maggior parte degli utenti di Vim non sono abituati al modo "compatibile"). Si noti che NONE
è necessario essere in maiuscolo.
In Windows è possibile aggiungere questi flag creando un nuovo collegamento 1 .
Se il problema persiste, allora sai che non è qualcosa nel tuo vimrc.
Se il problema scompare, ora è causato da qualcosa nel tuo file vimrc.
Evviva! Vai e fai la tua domanda. Ricorda che hai provato ad avviare Vim senza un file vimrc!
Se non lo hai già fatto, probabilmente vorrai prima salvare una copia di backup del tuo file vimrc.
La prossima cosa che probabilmente vorresti fare è disabilitare prima tutti i plugin; i plugin possono cambiare abbastanza in Vim. Se questo risolve il problema, prova a scoprire
quale plug-in riattivandoli uno a uno. Dopo aver scoperto quale plugin causa esattamente il problema, puoi provare a risolverlo leggendo la documentazione di questo plugin e / o ponendo una domanda contrassegnata con plugin-<name>
.
Se si tratta di non un plugin, e non si ha alcuna idea di che cosa sta causando il problema, allora si tratta di un procedimento per tentativi ed errori. Commenta una o più righe nel tuo vimrc, avvia Vim, controlla se si verifica il problema e ripeti questa procedura fino a quando il problema non si interrompe. Il modo più veloce per farlo è:
Alla fine dovresti avere una singola opzione o una combinazione di alcune opzioni che causano il tuo problema. Puoi scoprire di più su qualsiasi opzione in Vim usando:
:help 'option_name'
Le virgolette sono importanti qui, di solito funziona senza di esse, ma a volte finisci sulla pagina sbagliata se le ometti.
Se sei ancora confuso dopo aver letto la pagina di aiuto, sai dove porre una domanda ;-)
Se vuoi isolare un singolo plugin, magari per fare una domanda al riguardo, vuoi caricare il meno possibile ma comunque caricare il plugin; puoi farlo facilmente con la funzione dei pacchetti di Vim. Ciò richiede Vim 8 o una versione abbastanza recente di Neovim.
Crea una nuova directory vuota; useremo il ~/plugin
percorso in questo esempio. Ora metti il plugin nella pack/plugins/start/$name
directory normale . Per esempio:
git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
Creare un test-vimrc
file con i seguenti contenuti; questo assicurerà che Vim caricherà i plugin dalla ~/plugin
directory e non dalla ~/.vim
directory:
set nocompatible
set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
packloadall!
syntax on
filetype plugin indent on
Inizia Vim con:
vim -U NONE -u ~/test-vimrc
Ora hai un vimrc minimo con questo singolo plugin.
Le note
1 Ad esempio: a 64 bit di Windows, la scorciatoia sarebbe simile a questa: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N
. Per crearlo, fai clic con il pulsante destro del mouse in Esplora file nel punto in cui desideri il collegamento, quindi seleziona Nuovo -> Collegamento e incolla il testo del collegamento. Potrebbe essere necessario modificare il percorso di Vim se Vim è installato in un'altra posizione.
-U NONE
se hai -u NONE
.
Esiste un -D
parametro Vim appositamente per il debug che passerà alla modalità di debug dopo aver eseguito il primo comando da uno script.
Ad esempio per eseguire Vim in modalità debug senza plug-in, eseguire come:
vim --noplugin -D
Digitare n
/ next
per analizzare la riga successiva e continuare a premere Enter.
E cont
o q
per tornare vim
all'interfaccia.
Se stai usando una versione della GUI, inserisci un gui
comando in vimrc per avviare il debug subito dopo quel comando.
Premere Ctrl+ dper l'elenco dei comandi disponibili
Leggi di più:
:help debug-scripts
Come già accennato, prima cerca vim -u NONE -U NONE -N
di assicurarti che la tua vaniglia vim funzioni bene.
Quindi avviare vim normalmente e controllare
:messages
dall'interno di vim dopo il problema, che mostrerà tutti gli avvisi e gli errori.
Infine avvia vim con il seguente comando
vim -V9logfile.log
che creerà un file di registro chiamato logfile.log
, -V9
è il livello di registrazione e tenta di riprodurre il problema.
Un altro consiglio: per quanto possa sembrare un uomo delle caverne, mi piace aggiungere: echom "messaggio" al mio .vimrc per vedere cosa viene eseguito e cosa no.
Per esempio
if executable('ag')
:echom "AG FOUND"
...
endif
Questo mi aiuta a vedere rapidamente se il blocco if è in esecuzione, ecc. Il messaggio verrà stampato sulla console al prossimo avvio di vim.
echom
un altro comando interessante è :messages
quello di ottenere l'eco del registro completo dei messaggi. A volte può essere utile guardarli dopo l'avvio.
Una cosa che ho trovato aiuta è mantenere una raccolta di variabili che commutano parti del tuo in .vimrc
modo da poter disabilitare o abilitare parti di esso senza dover commentare cose. Ha anche il piacevole effetto collaterale di costringerti a pensare all'organizzazione del tuo .vimrc
.
" feature toggles in vimrc
let g:vimrc_feat_pathogen = 1
let g:vimrc_feat_core_minimal = 1
let g:vimrc_feat_matchit = 1
let g:vimrc_feat_options = 1
let g:vimrc_feat_colors_and_highlight = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding = 1
let g:vimrc_feat_autocommand_group = 1
let g:vimrc_feat_custom_definitions = 1
let g:vimrc_feat_load_opam = 1
Ecco un esempio di una sezione protetta da un if
:
if g:vimrc_feat_core_minimal
set nocompatible
filetype plugin indent on
syntax on
endif
Il mio tempo di caricamento di vimrc è stato molto lento, circa 400 ms, e l'ho ridotto a 20 ms solo rimuovendo questa riga:
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
Assicurati di non avere chiamate a comandi esterni come quello.
Ecco una semplice procedura per iniziare.
:source %
o:so $MYVIMRC