使用 autocmd 设置时未设置或未检测到 Vimscript 变量
Vimscript variables not set or not being detected when set with autocmd
我只想在某些插件可用时设置变量。为此,我使用:
augroup plugin_initialize
autocmd!
autocmd BufEnter * call LoadPluginSettings()
augroup END
function! LoadPluginSettings()
if exists(':NERDTree')
let NERDTreeIgnore = ['\.pyc$', '\.class$']
nnoremap <silent> <Leader><Leader>d :NERDTreeCWD<CR>
endif
if has('python')
if exists(':UltiSnipsEdit')
let g:UltiSnipsExpandTrigger="<C-l>"
let g:UltiSnipsJumpForwardTrigger="<C-l>"
let g:UltiSnipsJumpBackwardTrigger="<C-h>"
endif
endif
endfunction
对于 NERDTree,我得到了映射但没有变量(我相信是因为范围的原因 - 有替代方案吗?)。最奇怪的是,对于 UltiSnips,我正确设置了所有变量,但它们不能用作触发器(触发器是默认值,)。
有什么想法吗?谢谢!
您没有向 NERDTreeIgnore
添加范围修饰符。它默认为函数内部的局部变量。要使其成为全局变量,您需要在其前面加上 g:
。所以它将是 g:NERDTreeIgnore
function! LoadPluginSettings()
if exists(':NERDTree')
let g:NERDTreeIgnore = ['\.pyc$', '\.class$']
nnoremap <silent> <Leader><Leader>d :NERDTreeCWD<CR>
endif
if has('python')
if exists(':UltiSnipsEdit')
let g:UltiSnipsExpandTrigger="<C-l>"
let g:UltiSnipsJumpForwardTrigger="<C-l>"
let g:UltiSnipsJumpBackwardTrigger="<C-h>"
endif
endif
endfunction
至于为什么设置不起作用。 BufEnter 发生在插件加载之后。加载插件时,它会检查变量并适当地设置值。事后更改变量没有任何作用。
我认为你应该将变量留在 vimrc 中。一些额外的变量不会减慢 vim 的速度。如果需要,您仍然可以有条件地加载映射。
我只想在某些插件可用时设置变量。为此,我使用:
augroup plugin_initialize
autocmd!
autocmd BufEnter * call LoadPluginSettings()
augroup END
function! LoadPluginSettings()
if exists(':NERDTree')
let NERDTreeIgnore = ['\.pyc$', '\.class$']
nnoremap <silent> <Leader><Leader>d :NERDTreeCWD<CR>
endif
if has('python')
if exists(':UltiSnipsEdit')
let g:UltiSnipsExpandTrigger="<C-l>"
let g:UltiSnipsJumpForwardTrigger="<C-l>"
let g:UltiSnipsJumpBackwardTrigger="<C-h>"
endif
endif
endfunction
对于 NERDTree,我得到了映射但没有变量(我相信是因为范围的原因 - 有替代方案吗?)。最奇怪的是,对于 UltiSnips,我正确设置了所有变量,但它们不能用作触发器(触发器是默认值,)。
有什么想法吗?谢谢!
您没有向 NERDTreeIgnore
添加范围修饰符。它默认为函数内部的局部变量。要使其成为全局变量,您需要在其前面加上 g:
。所以它将是 g:NERDTreeIgnore
function! LoadPluginSettings()
if exists(':NERDTree')
let g:NERDTreeIgnore = ['\.pyc$', '\.class$']
nnoremap <silent> <Leader><Leader>d :NERDTreeCWD<CR>
endif
if has('python')
if exists(':UltiSnipsEdit')
let g:UltiSnipsExpandTrigger="<C-l>"
let g:UltiSnipsJumpForwardTrigger="<C-l>"
let g:UltiSnipsJumpBackwardTrigger="<C-h>"
endif
endif
endfunction
至于为什么设置不起作用。 BufEnter 发生在插件加载之后。加载插件时,它会检查变量并适当地设置值。事后更改变量没有任何作用。
我认为你应该将变量留在 vimrc 中。一些额外的变量不会减慢 vim 的速度。如果需要,您仍然可以有条件地加载映射。