在 vim 中有效的命令在 vimrc 中无效

Commands that work in vim don't work in vimrc

我正在使用 Pathogen to set up bundles in vim. One such bundle I use is vdebug。我想设置 vdebug,使其默认没有 "server" 选项。在 vim 内,我可以使用

中的任何一个来做到这一点
VdebugOpt server ""
let g:vdebug_options['server'] = ""

但是如果我在 ~/.vimrc 中设置其中一个命令,当我第一次启动 vim 时它会失败。这是重现问题的非常简单的 .vimrc:

execute pathogen#infect()
syntax on
filetype plugin indent on
call pathogen#helptags()
VdebugOpt server ""

这样,我得到了

Error detected while processing /home/editor/.vimrc:
line    5:
E492: Not an editor command: VdebugOpt server ""

或者,如果我将最后一行更改为

let g:vdebug_options['server'] = ''

我明白了

Error detected while processing /home/editor/.vimrc:
line    5:
E121: Undefined variable: g:vdebug_options

但是一旦 vim 启动,这些命令中的任何一个都有效。是什么导致了这种差异,如何在启动时为 vim 设置我想要的默认值?

您可以在 :h initialization 中看到 Vim 将在启动时 运行 .vimrc(第 3 步),然后 运行 插件(第 4 步). VdebugOpt 根本没有在 .vimrc 中定义,g:vdebug_options 也没有定义(因此您不能添加新选项)。

但是,您可以定义 g:vdebug_options:

let g:vdebug_options = {
  \   'server' = ''
  \ }

或等同于

let g:vdebug_options = {}
let g:vdebug_options['server'] = ''

如另一个答案所述,当 .vimrc 为 运行 时,插件命令尚未定义。您可以通过在 VimEnter autocmd 中调用命令来解决此问题:

autocmd VimEnter * VdebugOpt server ""