Comment puis-je faire en sorte que Vim ignore toute la configuration utilisateur, comme s'il venait d'être installé?

21

Afin de m'assurer que le comportement n'est pas affecté par ma configuration personnelle, je veux démarrer Vim d'une manière qui ignore tous mes fichiers de configuration installés par l'utilisateur, comme si Vim venait juste d'être fraîchement installé pour la première fois et que l'utilisateur l'avait exécuté immédiatement.

Ceci est résolu dans la FAQ qui suggère que la réponse est de démarrer Vim avec la commande suivante:

vim -u NONE -U NONE -N -i NONE

Cela arrive la plupart du temps, mais l' runtimepathoption contient toujours ~/.vimet, notamment, ~/.vim/after(donc par exemple si j'active ensuite la détection de type de fichier et change le type de fichier, le code ~/.vim/after/syntax/the_relevant_filetype.vimsera exécuté).

Je peux contourner ce problème spécifique en appelant les commandes suivantes au démarrage *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... mais je ne sais pas si:

  1. Il s'agit d'une solution robuste: sont-ce les seuls chemins qui peuvent faire en sorte que la configuration utilisateur prenne effet? Y a-t-il autre chose auquel je n'ai pas pensé?
  2. Il existe une meilleure façon d'atteindre le résultat souhaité.

* En utilisant --cmdou en -u vimrcshell des arguments, ou simplement en les tapant manuellement.

EDIT : Voici un exemple spécifique du type de problème que j'essaie de résoudre. (Bien que j'aimerais que la solution corrige tout autre problème possible que je n'ai peut-être pas encore rencontré.):

  1. Créez un fichier ~ / .vim / after / ftplugin / c.vim, contenant le contenu:

    noremap i :echom "This is not default behaviour"<CR>
    

    Nous avons maintenant une configuration installée par l'utilisateur que nous voulons ignorer. Testons la solution proposée par la FAQ.

  2. Exécutez Vim avec la commande:

    vim -u NONE -U NONE -N -i NONE
    
  3. Entrez les commandes:

    :filetype plugin on
    :set ft=c
    i
    

Comportement souhaité : Vim doit passer en mode Insertion. C'est ce qu'il ferait si aucune configuration utilisateur n'existait.

Comportement observé : Vim affiche "Ce n'est pas un comportement par défaut"

Riches
la source
Sur un système Unix, si vous faites: HOME=/dev/null vim -u NONE?
muru
@muru Belle idée, et mérite probablement d'être ajoutée comme réponse, mais elle n'est pas parfaite . Vous perdez évidemment la possibilité, par exemple :cd ~, mais également l'emplacement par défaut du viminfofichier est dans $ HOME, ce qui peut provoquer E138. Je suppose que créer un nouveau répertoire vide et l'utiliser pour $ HOME pourrait être la meilleure solution.
Rich
@muru Je viens de penser que si vous définissez $ HOME, vous n'avez probablement pas besoin de spécifier également -u NONE?
Rich
1
dans ce cas /tmp, ça pourrait être mieux, c'était ma première pensée, mais j'ai ensuite choisi / dev / null comme trou noir. ... Ou quelque chose comme HOME=$(mktemp -d) vim ....
muru
Ne lira-t-il pas le système vimrc si vous ne l'utilisez pas -u NONE? Cela dépend du comportement dont vous avez besoin, je suppose.
muru

Réponses:

16

Depuis Vim 8.0.1554 (malheureusement pas encore Neovim), vous pouvez l'utiliser vim --clean. Cette méthode est recommandée par :help bugs.

:help --clean documents:

Similaire à "-u DEFAULTS -U NONE -i NONE":
- les initialisations à partir des fichiers et des variables d'environnement sont ignorées
- 'runtimepath' et 'packpath' sont définies pour exclure les entrées du répertoire personnel (ne se produit pas avec -u DEFAULTS).
- le | defaults.vim | le script est chargé, ce qui implique «non compatible»: utilisez les valeurs par défaut de Vim
- no | gvimrc | le script est chargé
- aucun fichier viminfo n'est lu ou écrit

jasonszhao
la source
1
Agréable! C'est beaucoup plus simple que de jouer avec la $HOMEvariable. Développeurs Goodjob Vim. Et merci à vous pour la réponse!
Rich
1
--cleanfonctionne également avec neovimon master maintenant ( github.com/neovim/neovim/commit/… , à inclure dans la version 0.4.0), mais n'exclut pas le répertoire personnel.
Christian Clason
(pourtant, ce patch attend d'être porté)
Christian Clason
11

Une façon d'éliminer les fichiers spécifiques à l'utilisateur serait d'utiliser une valeur différente de $HOME. Pour ne rien lire ni écrire (comme viminfo), vous pouvez utiliser /dev/null:

HOME=/dev/null vim -u NONE

Cela entraînera des erreurs viminfo, vous pouvez donc créer un dossier temporaire ou utiliser un dossier existant (comme /tmp):

HOME=$(mktemp -d) vim -u NONE

Avec un tel $HOME, -u NONEpeut ne pas être nécessaire, selon ce que votre administrateur a ajouté à l'ensemble du système vimrc. Par exemple, sur tous les systèmes de laboratoire que j'administre, j'ai ajouté une /etc/vim/vimrc.local(source par défaut du Vim emballé /etc/vim/vimrc) qui a nocompatible, syntax, etc., ensemble, et filetype onaussi bien.

muru
la source
3
vim -i AUCUN pour empêcher le chargement de viminfo
Christian Brabandt
1

Je ne peux pas répondre à beaucoup de cela, mais un point que je ne vois pas mentionné, et répondre à une interprétation de ce qui est dans le titre

Comment puis-je faire en sorte que Vim ignore toute la configuration utilisateur, comme s'il venait d'être installé?

certains ont suggéré vim -u NONE ouvim -u NORC

c'est à certains égards un peu plus dépouillé qu'un simple fichier vimrc. Lorsque je tape «i», cela ne dit pas «insérer». Vous voudrez peut-être qu'il dise toujours «insérer». Si vous avez démarré vim avec votre fichier vimrc vierge, il affichera insert

c'est parce que vim charge d'abord une configuration par défaut.

Vous pouvez pointer vim vers ce fichier par défaut pour obtenir l'effet de la suppression de votre fichier vimrc. Vérifiez que vous avez /etc/vim/vimrc, et vous pouvez le faire vim -u /etc/vim/vimrc ou sur osx, le fichier par défaut est/usr/share/vim/vicmrc

barlop
la source
Je pense que c'est exactement ce que vim --clean fera pour vous.
quemeraisc
@quemeraisc vim --cleanva se charger defaults.vim. Cette réponse se réfère au système vimrc (Voir :help system-vimrc.), Qui je pense n'est pas chargé par vim --clean.
Rich
@barlap: Pour éviter toute confusion avec defaults.vim (voir :help defaults.vim), il serait préférable de changer le libellé default configen system vimrcdans cette réponse. Ou encore mieux, discutez des deux dans la réponse!
Rich
0

De Vim-FAQ 2.5 :

2.5. J'ai un problème "xyz" (certains) avec Vim. Comment puis-je déterminer qu'il s'agit d'un problème avec ma configuration ou avec Vim? / Ai-je trouvé un bug dans Vim?

Tout d'abord, vous devez savoir si l'erreur se trouve dans les fichiers d'exécution réels ou dans tout plugin distribué avec Vim ou s'il s'agit d'un simple effet secondaire d'une option de configuration de votre .vimrc ou .gvimrc. Alors d'abord, lancez vim comme ceci:

vim -u NONE -U NONE -N -i NONE

cela démarre Vim en mode non compatible (-N), sans lire votre fichier viminfo (-i NONE), sans lire aucun fichier de configuration (-u NONE pour ne pas lire le fichier .vimrc et -U NONE pour ne pas lire un fichier .gvimrc) ou même plugin.

mMontu
la source
1
Bien qu'il soit dans la FAQ, cela ne fonctionne pas réellement, pour les raisons mentionnées dans la question.
Rich
@Rich D'après votre commentaire sur la question: ensure that none of the behaviour I'm seeing is caused by user config- alors il semble que vous essayez de faire exactement ce qui est expliqué dans cette FAQ. J'ai relu votre question et je ne comprends toujours pas quelles sont les raisons que vous avez mentionnées.
mMontu
J'essaie en effet de faire exactement ce qui est expliqué dans la FAQ. Mais la solution qu'il donne ne fonctionne pas, en raison du runtimepathparamètre.
Rich
Qu'est-ce qui ne va pas exactement runtimepath? Cela semble être la valeur par défaut pour cette option, comme expliqué dans :help rtp. Comment cette valeur affecte-t-elle votre test?
mMontu
@ Je veux dire, voyez-vous des différences par rapport à une nouvelle installation après avoir activé la détection de type de fichier?
mMontu