So sehen Sie, ob ein Plugin aktiv ist

15

Wie kann ich feststellen, ob ein Dateityp-Plugin (z. B. vim-latexsuite) installiert und aktiviert wurde, wenn ich die entsprechende Datei öffne? Ein anderer beliebter Editor würde anzeigen, dass der entsprechende "Nebenmodus" aktiv ist. Was ist das vim-Äquivalent?

SabreWolfy
quelle

Antworten:

20

Wie kann ich feststellen, ob ein Dateityp-Plugin (z. B. vim-latexsuite) installiert wurde?

Sie könnten :scriptnamesdie Liste aller Quellen verwenden.

Eine andere Möglichkeit besteht darin, nach der Variablen zu suchen, die angibt, ob das Plugin so geladen wurde, wie es ist recommended practice to allow the user to disable the loading of a given plugin.. Normalerweise finden Sie g:loaded_...Variablen im <plugin_name>/pluginOrdner. Für das von Ihnen erwähnte Plugin könnten Sie verwenden echo exists("loaded_libList").

und aktiviert, wenn ich die entsprechende Datei öffne?

Wenn es sich um ein Dateityp-Plugin handelt, sollte es automatisch aktiviert werden, wenn die 'filetype'Option aktiviert ist. Sie können überprüfen, ob die Option für den aktuellen Puffer korrekt ist:

:set filetype?

Ein anderer beliebter Editor würde anzeigen, dass der entsprechende "Nebenmodus" aktiv ist. Was ist das vim-Äquivalent?

Sie können Ihre Statuszeile so anpassen, dass diese Anzeige entweder mithilfe von Plugins oder direkt über Optionen angezeigt wird , wie in :help 'statusline'und auf vi-improved.org erläutert .

mMontu
quelle
6

Vim-Plugins werden ohne Aktivierungsanzeige ausgeliefert. In einem ordnungsgemäßen Setup ist dies nicht erforderlich.

Sie können schnell überprüfen, ob ein Plug-in aktiv ist, indem Sie nach seinen Nebenwirkungen, normalerweise Zuordnungen, fragen. So weiß ich zum Beispiel, dass NERDCommenter-Zuordnungen mit beginnen <Leader>c, also wäre eine Abfrage nach ihrer Aktivierung :nmap <Leader>c. Wenn die Zuordnungen aufgelistet sind, ist das Plugin aktiv. Das gleiche kann für benutzerdefinierte Befehle und :autocmdin der Gruppe des Plugins erreicht werden. Die meisten Plugins definieren auch eine Inklusionsschutzvariable g:loaded_pluginname, die überprüft werden kann.

Dasselbe gilt für Plugins vom Typ "Dateityp" (und die Effekte sollten dann alle pufferspezifisch sein). Der wichtigste Faktor bei der Bestimmung der aktiven Plugins ist die korrekte Erkennung des Dateityps. Sie können das über abfragen :setlocal filetype?oder es sogar 'statusline'über %y/ in Ihr %YElement einfügen.

Ingo Karkat
quelle
6

In diesem speziellen Fall würde ich nur damit spielen :scriptnames. Wir können nicht erwarten, eine globale Variable zu verwenden, um zu überprüfen, ob ein ft- Plugin geladen wurde. LaTeXSuite verfügt möglicherweise über Plugins. Viele ftplugins verwenden b:did_ftplugin(zumindest die mit Vim gelieferten ), aber dieser Ansatz ist definitiv nicht skalierbar: Infolgedessen verwenden nicht alle ftplugins diese sinnlose Variable, und wir können nicht nach einem generischen Variablennamen suchen, um festzustellen, ob ein bestimmtes ftplugin diesen Namen hat B. für C allein habe ich 22 ftplugins, sie verwenden definitiv nicht den gleichen Anti-Reinclusion-Guard.

Also :scriptname. Leider :scriptnamegibt es eine Menge ungeordneter Ergebnisse für unsere menschlichen Augen. Zum Glück execute()(eine sehr neue Funktion) und filter()zur Rettung kommen. In diesem Fall würde ich nach latexbezogenen vim-Skripten mit suchen

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

Auch wenn Sie einen Plug-in-Manager verwenden, verwendet der Plug-in-Manager wahrscheinlich die 'runtimepath'Option. Sie können den Wert mit anzeigen :echo &rtp. Sie können den Wert sogar filtern mit:

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

(Hier erfahren Sie, ob Ihr Plugin-Manager Ihr Plugin, in Ihrem Fall LaTeX-Suite, aktiviert hat. Hier erfahren Sie nicht, ob die zugehörigen ftplugins korrekt geladen wurden. Hier erhalten :scriptnameSie diese Informationen.)

Luc Hermitte
quelle
3

Wenn Sie Dateityp-Plug-ins durch Autobefehle aktivieren, können Sie die Verbose = 9 setzen, damit Vim die Autobefehle bei ihrer Ausführung wiedergibt:

:set verbose=9
Qingchen
quelle
3

Eine Möglichkeit ist eine Regex-Suche nach runtimepath:

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

Wenn Sie vim-plug verwenden , können Sie dies anhand der folgenden allgemeinen Methode überprüfen:

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

Verwendung:

if PlugLoaded('MY-PLUGIN')
    " ...
endif
Mateen Ulhaq
quelle
Es ist nicht genug. Außerdem werden nur Plugins berücksichtigt, die mit Plugin-Managern installiert wurden. In allen Fällen kümmert es sich nicht um ftplugin-Skripte, die innerhalb von Plugins ausgeliefert werden, was OP-Frage war.
Luc Hermitte
0

Wenn Sie vim-plug verwenden , wird eine Variable namens gesetzt, plugsdie alle Ihre geladenen Plugins und einige Informationen dazu auflistet. Ich habe Ihre Frage für mich gelöst, als ich überprüfen musste, ob ich YCM oder coc.nvim ausführte. Sie können feststellen, ob ein Plugin geladen ist, indem Sie Folgendes has_key(plugs, "name")ausführen:

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

Hinweis: Dies wird nur angezeigt, wenn es derzeit in Ihrem aufgeführt ist vimrc, und nicht, wenn Sie es beispielsweise auf verzögertes Laden eingestellt haben

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

wird das beim Start immer noch drucken, obwohl es nerdtreenoch nicht geladen wurde.

Max Coplan
quelle