Comment voir si un plugin est actif

15

Comment puis-je déterminer si un plugin de type de vim-latexsuitefichier (tel que ) a été installé et activé lorsque j'ouvre le fichier approprié? Un autre éditeur populaire indiquerait que le "mode mineur" correspondant est actif. Quel est l'équivalent vim?

SabreWolfy
la source

Réponses:

20

Comment puis-je déterminer si un plugin de type de fichier (tel que vim-latexsuite) a été installé

Vous pouvez utiliser la :scriptnamesliste de tous les fichiers d'origine.

Une autre option consiste à vérifier la variable indiquant si le plugin a été chargé tel quel recommended practice to allow the user to disable the loading of a given plugin.. Vous pouvez généralement trouver des g:loaded_...variables dans le <plugin_name>/plugindossier. Pour le plugin que vous avez mentionné, vous pouvez utiliser echo exists("loaded_libList").

et activé lorsque j'ouvre le fichier approprié?

S'il s'agit d'un plugin de type de fichier, il doit être activé automatiquement lorsque l' 'filetype'option est définie. Vous pouvez vérifier si l'option est correcte pour le tampon actuel:

:set filetype?

Un autre éditeur populaire indiquerait que le "mode mineur" correspondant est actif. Quel est l'équivalent vim?

Vous pouvez personnaliser votre ligne d'état pour afficher une telle indication, soit en utilisant des plugins, soit directement via des options, comme expliqué dans :help 'statusline'et sur vi-improved.org .

mMontu
la source
6

Les plugins Vim ne sont accompagnés d'aucune indication d'activation, et dans une configuration appropriée, cela n'est pas nécessaire.

Vous pouvez rapidement vérifier si un plugin est actif en recherchant ses effets secondaires, généralement des mappages. Ainsi, par exemple, je sais que les mappages NERDCommenter commencent par <Leader>c, donc une requête pour son activation serait :nmap <Leader>c. Si les mappages sont répertoriés, le plugin est actif. La même chose peut être obtenue pour les commandes personnalisées et :autocmddans le groupe du plugin. La plupart des plugins définissent également une variable de garde d'inclusion g:loaded_pluginnamequi peut être vérifiée.

La même chose s'applique aux plugins de type de fichier (et les effets doivent alors tous être de portée tampon). Le facteur le plus important pour déterminer les plugins actifs est la détection correcte du type de fichier. Vous pouvez l'interroger via :setlocal filetype?, ou même le mettre dans votre 'statusline'via l' élément %y/ %Y.

Ingo Karkat
la source
6

Dans ce cas particulier, je ne jouerais qu'avec :scriptnames. Nous ne pouvons pas nous attendre à utiliser une variable globale pour vérifier si un plugin ft a été chargé - LaTeXSuite peut avoir des plugins, je ne me souviens pas, ce qui est sûr, c'est qu'il a beaucoup de scripts ftplugin. Beaucoup de ftplugins utilisent b:did_ftplugin(ceux livrés avec Vim au moins), mais cette approche n'est certainement pas évolutive: en conséquence, tous les ftplugins n'utilisent pas cette variable inutile, et nous ne pouvons pas vérifier un nom de variable générique pour savoir si un ftplugin donné a été chargé - par exemple, pour C seul, j'ai 22 plugins, ils n'utilisent définitivement pas le même protecteur anti-réinclusion.

Alors :scriptname. Hélas, :scriptnamedonne beaucoup de résultats non ordonnés, pour nos yeux humains. Heureusement execute()(une fonction très récente), et filter()venez à la rescousse. Dans ce cas, je chercherais des scripts vim liés au latex avec

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

De plus, si vous utilisez un gestionnaire de plugins, il est probable que le gestionnaire de plugins utilise l' 'runtimepath'option. Vous pouvez afficher sa valeur avec :echo &rtp. Vous pouvez même filtrer sa valeur avec:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(Cela vous dira si votre gestionnaire de plugins a activé votre plugin, LaTeX-suite dans votre cas. Cela ne vous dira pas si les ftplugins associés ont été correctement chargés. :scriptnameVous donnera ces informations.)

Luc Hermitte
la source
3

Si vous activez les plugins de type de fichier par des autocommandes, vous pouvez définir le verbose = 9 afin que Vim répète les autocommandes lors de leur exécution:

:set verbose=9
qingchen
la source
3

Une façon consiste à effectuer une recherche d'expression régulière sur runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

Si vous utilisez vim-plug , voici une méthode générale pour vérifier:

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

Usage:

if PlugLoaded('MY-PLUGIN')
    " ...
endif
Mateen Ulhaq
la source
Ce n'est pas assez. En outre, il ne prend en charge que les plugins installés avec les gestionnaires de plugins. Dans tous les cas, il ne prend pas en charge les scripts ftplugin livrés dans les plugins, ce qui était une question OP.
Luc Hermitte
0

Si vous utilisez vim-plug , il définit une variable appelée plugsqui répertorie tous vos plugins chargés et quelques informations à leur sujet. J'ai résolu votre question par moi-même lorsque je devais vérifier si j'utilisais YCM ou coc.nvim. Vous pouvez voir si un plugin est chargé en exécutant has_key(plugs, "name"), par exemple:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

Remarque: cela ne montre que s'il est actuellement répertorié dans votre vimrc, et non, par exemple, si vous l'avez défini sur la charge paresseuse, donc

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

imprimera toujours cela au démarrage, même s'il nerdtreen'a pas encore été chargé.

Max Coplan
la source