在 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 ""
我正在使用 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 ""