我如何测试插件并且只包含它们(如果它们存在于 .vimrc 中)?

0xC*_*22L 14 vim vimrc

在我的假设中,.vimrc我正在尝试使用ftplugin并且显然使用一些与此相关的命令,前提是它已成功加载。但是,我现在遇到了一些没有安装插件的旧机器。我可以以某种方式加载这个插件有条件并将filetype on类似的指令添加到同一个条件块中吗?

我已经看到有配色方案和 Vim 版本的条件,但我还没有看到可以检查插件的示例(或无法识别它)。

注意:温柔点,我是 VimScript 初学者。

qqx*_*qqx 20

您可以将该块包装在一个条件中,该条件使用该exists()函数来检查由插件定义的变量、命令或函数是否为 vim 所知。

这是我在 ~/.vim 下的文件中的一些内容:

" after/plugin/speeddating.vim
if exists(':SpeedDatingFormat')
    SpeedDatingFormat %-d %B %Y
endif

" ftplugin/ruby.vim
if exists('g:loaded_surround') && !exists('b:surround_'.char2nr(':'))
  let b:surround_{char2nr(':')} = ":\r"
endif
Run Code Online (Sandbox Code Playgroud)

请注意,上述位位于在普通插件之后评估的文件中,这里是一个 ftplugin,以及目录中的一个文件after/plugin

另一种选择是使用 try/catch 块,尽管这至少需要 vim 7.0:

if v:version >= 700
    try
        runtime bundle/pathogen/autoload/pathogen.vim
        call pathogen#infect()
    catch
    endtry
endif
Run Code Online (Sandbox Code Playgroud)

一旦try该块部分中的某些内容失败,它将跳到该 catch部分。由于该catch部分是空的,它将在endtry语句之后继续执行初始化文件的其余部分。

由于这是手动加载代码而不是依赖已加载的插件,因此可以在 .vimrc 文件本身中完成。


小智 8

我的首选方法是检查插件文件是否存在。我觉得这更简单。

if !empty(glob("path/to/plugin.vim"))
   echo "File exists."
endif
Run Code Online (Sandbox Code Playgroud)