如何查看插件是否处于活动状态


15

vim-latexsuite打开适当的文件时,如何确定是否已安装并激活文件类型插件(例如)?另一个受欢迎的编辑器将指示相关的“次要模式”处于活动状态。什么是vim等效项?

Answers:


20

如何确定是否已安装文件类型插件(如vim-latexsuite)

您可以使用:scriptnames哪个列出所有源文件。

另一种选择是检查指示插件是否已加载的变量recommended practice to allow the user to disable the loading of a given plugin.。通常,您可以g:loaded_...<plugin_name>/plugin文件夹内找到变量。对于您提到插件,您可以使用echo exists("loaded_libList")

并在我打开相应文件时激活?

如果是文件类型插件,则应在'filetype'设置选项后自动将其激活。您可以检查该选项对于当前缓冲区是否正确:

:set filetype?

另一个受欢迎的编辑器将指示相关的“次要模式”处于活动状态。什么是vim等效项?

您可以通过选择自定义状态行显示这样的指示,或者使用插件或直接,在解释:help 'statusline'vi-improved.org


6

Vim插件没有任何激活指示,在适当的设置下,这是没有必要的。

您可以通过查询插件的副作用(通常是映射)来快速检查插件是否处于活动状态。因此,举例来说,我知道NERDCommenter映射以开头<Leader>c,因此对其激活的查询为:nmap <Leader>c。如果列出了映射,则该插件处于活动状态。对于自定义命令和:autocmd插件组也可以实现相同的目的。大多数插件还定义了g:loaded_pluginname可以检查的包含保护变量。

这同样适用于文件类型插件(然后所有效果都应在缓冲区范围内进行)。确定活动插件的最重要因素是正确检测文件类型。您可以通过进行查询,:setlocal filetype?甚至可以'statusline'通过%y/ %Y项将其放入您的网站。


6

在那种情况下,我只会玩:scriptnames。我们不能期望使用全局变量来检查ft插件是否已加载-LaTeXSuite可能有插件,我不记得了,可以肯定的是,它具有很多ftplugin脚本。许多ftplugins使用b:did_ftplugin(至少是Vim附带的),但是这种方法肯定不能扩展:因此,并非所有ftplugins都使用这个无意义的变量,并且我们无法检查通用变量名称来知道给定的ftplugin是否具有已加载-例如,仅对于C而言,我就有22个ftplugins,它们肯定没有使用相同的防重新插入防护。

所以:scriptname。las :scriptname,对于我们的人眼来说,给出了许多无序的结果。幸运的是execute()(一个非常新的功能),filter()来救援。在那种情况下,我会寻找与乳胶有关的vim脚本,

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

另外,如果您使用的是插件管理器,则插件管理器可能正在使用'runtimepath'选项。您可以使用显示其值:echo &rtp。您甚至可以使用以下方法过滤其值:

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

(这将告诉您插件管理器是否已激活您的插件LaTeX-suite。这不会告诉您相关的ftplugins是否已正确加载。:scriptname将为您提供此信息。)


3

如果通过自动命令激活文件类型插件,则可以设置verbose = 9,以便Vim在执行自动命令时回显自动命令:

:set verbose=9

3

一种方法是对进行正则表达式搜索runtimepath

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

如果您使用的是vim-plug,这是一种通用方法来检查:

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

用法:

if PlugLoaded('MY-PLUGIN')
    " ...
endif

这不够。此外,它仅照顾与插件管理器一起安装的插件。在所有情况下,它都不会处理插件中附带的ftplugin脚本,这是OP的问题。
卢克·赫米特

0

如果使用vim-plug,它将设置一个名为的变量plugs,其中列出了所有已加载的插件以及一些有关它们的信息。当我需要检查是否正在运行YCM或coc.nvim时,我自己为您解决了问题。您可以通过运行查看插件是否已加载has_key(plugs, "name"),例如:

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

注意:仅显示当前是否列在vimrc,而不显示(例如,如果您将其设置为延迟加载),因此

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

即使nerdtree尚未加载,仍会在启动时将其打印出来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.