Comment déboguer mon fichier vimrc?

80

J'ai un problème dans Vim et je pense que c'est peut-être dans mon vimrcdossier (ou on m'a dit que cela pourrait être mon vimrcdossier).

Comment puis-je vérifier cela? Si c'est mon vimrcfichier, comment puis-je savoir où exactement le problème réside?

Martin Tournoij
la source

Réponses:

79

La première chose à faire est de lancer Vim avec les paramètres par défaut:

vim -u NONE -U NONE -N

Les -u NONEempêche ViM de se charger votre vimrc, -U NONEempêche de charger votre Vim gvimrc, et -Nindique à Vim d'utiliser sans compatible avec le mode (ce n'est pas nécessaire, mais la plupart des utilisateurs ne sont pas utilisés Vim en mode « compatible »). Notez que le NONEdoit obligatoirement être en majuscule.

Sous Windows, vous pouvez ajouter ces indicateurs en créant un nouveau raccourci 1 .

  • Si le problème persiste, alors vous savez que ce n'est pas quelque chose dans votre vimrc.

  • Si le problème disparaît, il est maintenant causé par quelque chose dans votre fichier vimrc.

Ce n'est pas mon vimrc!

Hourra! Allez poser votre question. N'oubliez pas de mentionner que vous avez essayé de démarrer Vim sans fichier vimrc!

C'est donc mon vimrc, et maintenant?

Si vous ne l'avez pas déjà fait, vous souhaiterez probablement d'abord enregistrer une copie de sauvegarde de votre fichier vimrc.

Vérifiez les plugins

La prochaine chose que vous voudrez probablement faire est de désactiver d’abord tous les plugins; les plugins peuvent changer un peu dans Vim. Si cela résout le problème, essayez de trouver quel plugin en le réactivant un par un. Une fois que vous avez trouvé quel plugin est à l'origine du problème, vous pouvez essayer de le réparer en lisant la documentation de ce plugin et / ou en posant une question étiquetée plugin-<name>.

Si ce n'est pas un plugin et que vous n'avez aucune idée de la cause de votre problème, alors c'est une procédure d'essai et d'erreur. Mettez en commentaire une ou plusieurs lignes de votre vimrc, démarrez Vim, vérifiez si le problème se produit et répétez cette procédure jusqu'à ce que le problème ne se produise plus. Le moyen le plus rapide de le faire est:

  1. Commentez (ou supprimez) environ la moitié de votre fichier vimrc.
  2. Redémarrez Vim ou ouvrez un nouveau Vim (recharger le fichier vimrc n’est pas suffisant, car les paramètres ne sont pas effacés).
  3. Le problème est-il maintenant parti? Remettez en place la partie que vous avez retirée (maintenir Vim ouvert et utiliser annuler est utile ici) et répétez l'étape 1 de la partie que vous avez rajoutée.
  4. Le problème persiste-t-il? Passez à l'étape 1.

En fin de compte, vous devriez avoir une seule option ou une combinaison de quelques options qui cause votre problème. Vous pouvez en savoir plus sur toutes les options de Vim en utilisant:

:help 'option_name'

Les citations sont importantes ici, cela fonctionne généralement sans elles, mais parfois vous vous retrouvez sur la mauvaise page si vous les omettez.

Si vous êtes toujours confus après avoir lu la page d'aide, vous savez où poser une question ;-)

Débogage d'un seul plugin

Si vous souhaitez isoler un seul plug-in, peut-être poser une question à ce sujet, vous souhaitez charger le moins possible, tout en chargeant le plug-in; vous pouvez facilement le faire avec la fonctionnalité de paquets de Vim. Cela nécessite Vim 8 ou une version raisonnablement récente de Neovim.

  1. Créer un nouveau répertoire vide; nous allons utiliser le ~/pluginchemin dans cet exemple. Maintenant, placez le plugin dans le pack/plugins/start/$namerépertoire normal . Par exemple:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Créez un test-vimrcfichier avec le contenu suivant; Cela garantira que Vim chargera des plugins à partir du ~/pluginrépertoire et non du ~/.vim répertoire:

    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
    
  3. Commencez Vim avec:

    vim -U NONE -u ~/test-vimrc
    

    Vous avez maintenant un vimrc minimal avec seulement ce plugin.


Notes de bas de page

1 Par exemple: sur 64 bits de Windows, le raccourci ressemblerait à quelque chose comme ceci: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N. Pour le créer, cliquez avec le bouton droit de la souris sur l'Explorateur de fichiers à l'endroit où vous souhaitez utiliser le raccourci, puis sélectionnez Nouveau -> Raccourci et collez le texte du raccourci. Vous devrez peut-être modifier le chemin Vim si votre Vim est installé ailleurs.

Martin Tournoij
la source
7
Cette technique s'appelle la localisation d'erreur de recherche binaire .
tommcdo
2
Une fois que vous avez identifié votre bogue, ce serait un bon moment pour garder votre fichier .vimrc sous contrôle de version :) Il s’agira presque toujours de l’un des derniers changements que vous avez apportés qui a provoqué un comportement étrange.
escrafford
1
Vous n'avez pas besoin -U NONEsi vous avez -u NONE.
Antony
@MartinTournoij J'ai suggéré une édition afin de faciliter la compréhension du premier lecteur. J'espère que tu aimes. Merci!
Jpaugh
1
Merci @ jpaugh; Je pense que cet ordre a plus de sens.
Martin Tournoij le
31

Il existe un -Dparamètre Vim spécialement conçu pour le débogage qui passera en mode débogage après l'exécution de la première commande à partir d'un script.

Par exemple, pour exécuter Vim en mode débogage sans plug-ins, exécutez-vous en tant que:

vim --noplugin -D

Tapez n/ nextpour analyser la ligne suivante et maintenez enfoncé Enter.

Et contou qpour revenir à l' viminterface.

Si vous utilisez une version graphique, insérez une guicommande dans votre vimrc pour démarrer le débogage juste après cette commande.

Appuyez sur Ctrl+ dpour obtenir la liste des commandes disponibles

Lire la suite:

Kenorb
la source
1
Cela a été très utile pour trouver une simple erreur dans le fichier .vimrc qui provoquait un message d'erreur. Ça vaut le coup d'essayer d'abord car c'est rapide à faire.
RichVel
1
@kenorb cette commande est géniale, évite-moi d'aller dans un autre éditeur.
TheLazyChap
11

Comme déjà mentionné, essayez d’abord vim -u NONE -U NONE -Nde vous assurer que votre vanilla vim fonctionne bien.

Ensuite, démarrez vim normalement et vérifiez

:messages

depuis vim après le problème, qui affichera tous les avertissements et les erreurs.

Enfin, lancez vim avec la commande suivante

vim -V9logfile.log

qui créera un fichier journal appelé logfile.log, -V9correspond au niveau de journalisation et tente de reproduire votre problème.

RSabet
la source
11

Encore un conseil: aussi caveman que cela puisse paraître, j'aime bien ajouter: echom "message" à mon fichier .vimrc pour voir ce qui est exécuté et ce qui ne l'est pas.

Par exemple

if executable('ag')
  :echom "AG FOUND"

  ...
endif

Cela m'aide à voir rapidement si le bloc if est en cours d'exécution, etc. Le message sera imprimé sur la console lors du prochain démarrage de vim.

Edy Bourne
la source
6
Et si vous utilisez echomune autre commande intéressante, :messagesvous obtenez le journal complet des messages en écho. Il peut parfois être utile de les regarder après le démarrage.
statox
C'est presque ce dont j'avais besoin, je veux voir quelle est la valeur de cpoptions à un moment donné de mon vimrc, comment puis-je faire écho à la sortie de ": set cpoptions?" ?
Mike Lippert
10

Une chose que j’ai trouvée utile est de conserver une collection de variables qui bascule d’une partie à l’autre de .vimrcsorte que vous puissiez la désactiver ou la réactiver sans avoir à commenter. Cela a aussi l’effet secondaire agréable de vous obliger à réfléchir à l’organisation de votre .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

Voici un exemple de section gardée par un if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif
Gregory Nisbet
la source
1

Mon temps de chargement de vimrc était très lent, environ 400 ms, et je l'ai réduit à 20 ms uniquement en supprimant cette ligne:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

Assurez-vous de ne pas avoir d'appels à des commandes externes de ce type.

Kristijan
la source
1
Bienvenue sur le site! Ceci est une information utile, mais elle est un peu plus spécifique que la question très générale posée. Il pourrait être préférable d’ajouter comme réponse à cette question , par exemple , ou, si vous cherchez simplement à partager des connaissances, vous pourriez peut-être poser votre propre question et y répondre?
Rich
0

Voici une procédure simple pour vous aider à démarrer.

  1. commenter le contenu de l'ensemble de votre fichier .vimrc
  2. Rechargez votre fichier .vimrc en exécutant :source %ou:so $MYVIMRC
  3. décommenter une partie discrète du fichier (généralement en partant du haut)
  4. Répétez les étapes 2 et 3 jusqu'à ce que vous trouviez l'erreur.
  5. corriger l'erreur.
Mike Wilding
la source
1
Cette réponse pourrait être bien meilleure si vous la capitalisiez correctement et la ponctuiez.
Recommande fortement de le faire avec une recherche binaire.
D. Ben Knoble le