Dans mon .vimrc
, j'essaie d'utiliser ftplugin
et évidemment d'utiliser certaines commandes liées à cela sous l'hypothèse qu'il a été chargé avec succès. Cependant, j'ai maintenant rencontré quelques vieilles machines sur lesquelles le plugin n'est pas installé. Puis-je en quelque sorte rendre le chargement de ce plug-in conditionnel et ajouter filetype on
des directives similaires dans le même bloc conditionnel?
J'ai vu qu'il y avait des conditions pour les jeux de couleurs et la version Vim, mais je n'ai pas vu d'exemple qui vérifierait le plugin (ou ne l'a pas reconnu).
NB: Soyez doux, je suis un débutant VimScript.
~/.vimrc
, vous ne serez donc pas en mesure de tester les effets d'un plugin au sein de votre,~/.vimrc
sauf si vous testez l'existence du fichier de plugin ou différez le test jusqu'à ce que les plugins aient été chargés avec une autocommande telle que VimEnter.Réponses:
Vous pouvez encapsuler ce bloc dans un conditionnel qui utilise la
exists()
fonction pour vérifier si une variable, une commande ou une fonction définie par le plugin est connue de vim.Voici quelques bits que j'ai dans des fichiers sous ~ / .vim:
Notez que les bits ci-dessus sont dans des fichiers qui sont évalués après des plugins normaux, ici un ftplugin et un fichier dans le
after/plugin
répertoire.Une autre option serait d'utiliser des blocs try / catch, bien que cela nécessite au moins vim 7.0:
Une fois que quelque chose dans la
try
section de ce bloc échoue, il passera à lacatch
section. Étant donné que lacatch
section est vide, elle continuera simplement avec le reste du fichier d'initialisation après l'endtry
instruction.Comme il s'agit de charger manuellement du code plutôt que de compter sur un plugin déjà chargé, cela peut être fait dans le fichier .vimrc lui-même.
la source
try
construction? Le vieux Vim comprendrait-il cela? C'est-à-dire quand a-t-il été introduit. Merci et +1 pour l'instant.try
devrait fonctionner. Merci beaucoup. Voyons si une autre réponse arrivera toujours. Sinon, je vais bien sûr accepter le vôtre.:silent! {cmd}
, qui supprime l'erreur lorsqu'il{cmd}
n'existe pas. Cela fonctionne même dans Vim 6.Ma méthode préférée consiste simplement à vérifier l'existence du fichier de plugin. Je trouve cela plus simple.
la source
Je voulais y parvenir tout en conservant ma configuration Vim ensemble
.vimrc
, plutôt que dans un tas deafter/
répertoires. Voici la solution que j'ai trouvée:Vérifiez l'existence de chaque plugin en recherchant toute commande unique qu'il fournit
exists()
et définissez ses options si elle existe. (C'est comme dans la réponse acceptée.)Mettez toutes les options définies de la manière ci-dessus dans une fonction (appelée
SetPluginOptionsNow()
dans mon code).Appelez cette fonction sur l'
VimEnter
événement, qui se déclenche lors de l'entrée dans une nouvelle session Vim - mais surtout, une fois les plugins chargés. De ce fait, notreexists()
vérifications peuvent vérifier les fonctions du plugin sans problème.Voici un échantillon de cette partie de mon
.vimrc
.la source
airline_theme
semble induire un tas d'erreurs ... Je ne sais pas vraiment pourquoi.Pourtant, une autre alternative utilise
:silent! {cmd}
, qui supprime l'erreur lorsque{cmd}
n'existe pas. Le principal avantage est qu'il s'agit d'une courte commande unique. Cela fonctionne même dans Vim 6, et est idéal pour les éléments facultatifs.Par exemple, il est utilisé par des plugins qui utilisent repeat.vim de Tim Pope pour rendre les mappages reproductibles.
la source
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
travail pour fermer toutes les commandes suivant le!silent
ou est-ce toujours spécifique à la commande suivante?:silent!
pas le cas!silent
et cela s'applique à toutes les commandes contenues, sauf quand:unsilent
est utilisé quelque part à l'intérieur. (Mais c'est rare.)Initialement publié dans une autre question: /programming//a/48178537/2843583
Tout comme une alternative, vous pouvez également utiliser une expression rationnelle pour décider si le plugin à portée de main est dans votre
runtimepath
:Cela a l'avantage de fonctionner avec des plugins qui n'ont que du code vimscript dans le
autoload
répertoire, qui à son tour ne peut pas être détecté lorsque .vimrc est initialement analysé car les extraits de chargement automatique sont chargés au moment d'un appel de fonction.la source