Vim 在设置之前测试选项是否有效

Vim 在设置之前测试选项是否有效

.vimrc在许多不同的机器上使用我的 vim,这些机器的 vim 版本都有很大差异。大多数版本都可以正常启动,但其中一个版本在启动时报告了以下(篡改过的)错误列表:

Error detected while processing ~/.vimrc:
Undefined variable: pathogen
Invalid expression: pathogen#infect()
Invalid :syntax subcommand: enable
Unknown function: executable
Invalid expression: executable('xclip')
:else without :if: else
:endif without :if: endif
Invalid argument: indent on
Invalid argument: plugin on
Invalid argument: nrformats=alpha,hex,octal
Illegal arguments: fromstart
Not an editor command: colorscheme zobean
Unknown option: foldenable
Unknown option: foldcolumn=0
Unknown option: cursorline
Unknown option: winminwidth=0
Ambiguous mapping, conflicts with "^V<silent>"
Ambiguous mapping, conflicts with "^V<leader>"
Ambiguous mapping, conflicts with "j"

我知道我可以使用来测试鼠标支持是否已启用。我是否可以对其他命令(如)以及通常缺少的设置和选项if has('mouse')进行类似的测试?pathogen

请注意,我没有权限在所有这些机器上安装程序,因此安装最新版本vim不是一个有效的选项。

我打算只为所有机器维护一个.vimrc,以便根据可用的情况适当地定制选项。

附录:vimrc内容

我不会包含我的整个文件.vimrc,因为它大约有 250 行长,但下面是导致上面列出的每个错误的代表性行和部分:

execute pathogen#infect()
syntax enable
if has('win32')
    ...
elseif executable('xclip')
    ...
else
    ...
endif
filetype indent on
filetype plugin on
set nrformats=alpha,hex,octal
syn sync fromstart
colorscheme zobean
set foldenable foldnestmax=5 foldmethod=indent
set foldcolumn=0
set cursorline
set winminwidth=0
vnoremap < <gv
nnoremap <leader>~ vwb<esc>~
vnoremap jk <esc>

答案1

if exists('*pathogen#infect')
" The function pathogen#infect() exists
else
" The function pathogen#infect() does not exist
endif

用于:help exists()获取更多信息。除了变量之外,exists()还可以测试&选项、*函数、:命令、#事件自动命令。

相关内容