Answers:
如何确定是否已安装文件类型插件(如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。
Vim插件没有任何激活指示,在适当的设置下,这是没有必要的。
您可以通过查询插件的副作用(通常是映射)来快速检查插件是否处于活动状态。因此,举例来说,我知道NERDCommenter映射以开头<Leader>c
,因此对其激活的查询为:nmap <Leader>c
。如果列出了映射,则该插件处于活动状态。对于自定义命令和:autocmd
插件组也可以实现相同的目的。大多数插件还定义了g:loaded_pluginname
可以检查的包含保护变量。
这同样适用于文件类型插件(然后所有效果都应在缓冲区范围内进行)。确定活动插件的最重要因素是正确检测文件类型。您可以通过进行查询,:setlocal filetype?
甚至可以'statusline'
通过%y
/ %Y
项将其放入您的网站。
在那种情况下,我只会玩: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
将为您提供此信息。)
一种方法是对进行正则表达式搜索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
如果使用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
尚未加载,仍会在启动时将其打印出来。