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

#1 楼


如何确定是否已安装文件类型插件(例如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'选项后,应会自动激活该功能。您可以检查该选项对于当前缓冲区是否正确:什么是vim等效项?


您可以自定义状态行以使用插件或直接通过选项来显示此类指示,如:help 'statusline'和vi-improved.org中所述。 >

#2 楼

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

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

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

#3 楼

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

所以:scriptname。 las execute()给人的眼睛带来了很多无序的结果。幸运的是,filter()(最近的一项功能)和'runtimepath'得以抢救。在这种情况下,我会使用

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


查找与乳胶相关的vim脚本。另外,如果您使用的是插件管理器,则插件管理器可能会使用:echo &rtp选项。您可以使用:scriptname显示其值。您甚至可以使用以下命令过滤其值:

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


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

#4 楼

一种方法是在runtimepath上执行正则表达式搜索: br />
if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif


用法:

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


评论


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

–卢克·赫米特(Luc Hermitte)
17年11月9日在13:11

#5 楼

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

:set verbose=9


#6 楼

如果您使用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中,例如,如果将其设置为延迟加载,则即使尚未加载nerdtree

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

在启动时仍会打印出来。