Vim: Comment installer un plugin pour un type de fichier particulier?

4

Hier, je suis tombé sur le plugin Jedi-vim qui fournit une complétion automatique pour python. J'ai installé le plugin en utilisant pathogen en le plaçant dans un bundlerépertoire et tout fonctionne correctement.

Maintenant, comme je l’ai mentionné plus tôt, ce plugin n’est que pour, filetype: pythondonc je ne veux le charger que lorsque j’ouvre des fichiers avec des .pyextensions et non pas lorsque j’ouvre d’autres fichiers comme .java, .perl, .sh.

Alors, comment cela peut-il être réalisé?

Je suis un débutant de Vim / noob mais j'ai googlé avant de demander et j'ai trouvé que cela pouvait être réalisé en utilisant vim ftpluginmais je ne sais absolument pas où placer quel fichier.


la source
En tant qu'écrivain de Jedi et Jedi-Vim, je vous demande: pourquoi voulez-vous faire cela?
David Halter
J'étais sur le point de demander la même chose à propos des plugins. Jedi-vim convient probablement, mais j’ai quelques plugins très simples qui sont chargés indépendamment du type de fichier. Mais lorsque je reçois une solution de plug-in plus complexe pour un type de fichier spécifique (par exemple, Jedi-viim), je souhaite que seul ce dernier soit chargé et que les plugins simples ne soient pas dérangés. Ce dont j'ai besoin, c'est davantage une liste noire de types de fichiers par plugin, pas une liste blanche.
egelev

Réponses:

2

Il y a des gestionnaires de plugins pour Vim qui font ça

Pour votre exemple dans vim-plug .

Plug 'davidhalter/jedi-vim', {'for': 'python'}

où la chaîne est l'auteur / le nom du référentiel github. Tous les scripts de vim.org sont également ré-hébergés sur github via vim-scripts.org sous les scripts utilisateur vim

Bryce Guinta
la source
1

J'ai eu le même problème en voulant charger sous condition jedi-vimet en utilisant le gestionnaire de plugins Vundle. Après quelques recherches, j'ai découvert que Vundletous ses packages / plugins seraient chargés à l'exécution, mais je ne pouvais rien faire à ce sujet.

Cependant, jedi-vima la possibilité d'être automatiquement chargé ou non. J'ai donc décidé de jedi-vimmettre l'option à zéro (non chargé automatiquement) dans mon ~/.vimrcensemble à un dans mon ~/.vim/ftplugin/python.vimfichier.

Cette option est:

" supposing this is the .vim/ftplugin/python.vim file let g:jedi#auto_initialization = 1

Guilherme Marthe
la source
0

Surtout pour les plugins complexes, le plugin doit être écrit de manière à minimiser ses effets sur les autres types de fichiers. Vous n'avez pas indiqué pourquoi vous voulez limiter l'application du plug-in aux fichiers Python (tant qu'elle n'installe pas de mappages globaux qui interfèrent avec d'autres mappages, vous ne vous en souciez pas normalement), mais après avoir trouvé un problème concernant le temps de chargement lent Je suppose que c'est ça.

Jusqu'à ce que l'auteur du plug-in fournisse une solution, vous pouvez essayer de déplacer le plugin/jedi.vimfichier (et le jedi_vim.pyrépertoire correspondant ) vers le haut, afin qu'il ne soit pas automatiquement créé au démarrage de Vim. Lorsque vous souhaitez utiliser le plugin, chargez-le via :runtime jedi.vim. Peut-être que vous pouvez même déplacer les fichiers dans le ftplugin/dossier; ils seraient alors automatiquement recherchés lors de la modification d'un fichier Python; Essaye le.

Alternativement, vous pouvez complètement séparer les .vimrépertoires pour Python et les autres développements, et utiliser deux alias différents pour démarrer vim-with-pythonvs plain vim:

alias vim-with-python='vim --cmd "set rtp^=~/.vim-with-python" --cmd "set rtp+=~/.vim-with-python/after"'
Ingo Karkat
la source
Par un répertoire en vous l' entendez passer de bundle/jedi-vim/pluginla bundle/jedi-vimb'coz cela n'a pas fonctionné. il a montré des erreurs en disantundefined variable ...
Oui, en fait, tout répertoire extérieur plugin/convient, car seuls ceux qui ont été créés au démarrage. Mais comme je l'ai dit, pour des plugins complexes répartis sur de nombreux fichiers, cela peut ne pas être si facile; vous auriez à désosser la structure de dépendance et la séquence d'appel.
Ingo Karkat