如何有条件地加载插件


14

我正在寻找答案,但是还没有找到任何东西,因此,如果我错过了明显的内容,我深表歉意。我认为这将是Google的快速搜索,所以它可能比我想象的要复杂。

我希望能够根据我正在编辑的文件类型有条件地加载插件。例如,当编辑python时,我不希望vim-sexp安装的键绑定,但是在使用clojure时,我确实希望加载该插件。

我目前正在使用neovim和病原体,但是如果有其他插件管理器可以为我完成这项工作,那么我会愿意进行切换。另外,如果确实存在,是否会:set syntax whatever切换插件?因为那将是超级:)

在此先感谢您的帮助/指导!


1
您是在问一个问题,但实际上是在描述另一个问题:如果插件安装了全局键绑定,请禁用它们(请阅读插件文档以了解操作方法),然后仅针对您所用的文件类型在本地重新启用它们(例如,使用autocmds)想。如果插件编写正确,则通过延迟其初始化不会获得太多收益。但是,如果您不禁用由插件激活的不需要的全局键绑定,则它们加载插件仍然会影响您。
VanLaser

Answers:


18

您可以使用Vim-Plug做到这一点。请参阅自述文件

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

我认为您必须使用:set filetype whatever而不是set syntax whatever启用插件。

(某些其他插件管理器可能允许您执行此操作,请参见vim插件管理器之间有什么区别?


8

而不是调用execute pathogen#infect()加载所有插件,而是调用pathogen#interpose每个插件,即:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

病原体API并未在源代码之外进行文档记录,但是它足够简单(即使函数名晦涩且不具描述性)。您也可以使用pathogen#surround()绝对路径。

您可以有条件地使用基本加载插件autocmd

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

如果发现其中有许多情况,您甚至可以将其分解为不同的路径:

  • ~/.vim/bundle/always 对于您一直想要的插件
  • ~/.vim/bundle/<filetype> 用于特定文件类型的插件
  • 然后像这样加载它:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

这样,您不必autocmd为每个文件类型/插件添加一堆。

如果确实存在,是否:set syntax whatever切换插件?因为那将是超级:)

  • 插件加载后,即会加载。A“插件”仅仅是集合functioncommandmap。定义。我不知道有什么简单的方法可以“卸载”它。

  • 为您使用的文件类型加载插件:set filetype;在一般情况下,你总是希望使用:set filetype :set syntax作为syntax将只设置语法高亮,而不是缩进和其他设置(例如iskeywordformatexpr等)。

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.