Vimscript变量未设置或使用autocmd设置时未检测到

Vimscript变量未设置或使用autocmd设置时未检测到,vim,Vim,我只想在某些插件可用时设置变量。为此,我使用: augroup plugin_initialize autocmd! autocmd BufEnter * call LoadPluginSettings() augroup END function! LoadPluginSettings() if exists(':NERDTree') let NERDTreeIgnore = ['\.pyc$', '\.class$'] nnorema

我只想在某些插件可用时设置变量。为此,我使用:

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
augroup插件\u初始化
自动驾驶!
autocmd BufEnter*调用LoadPluginSettings()
螺旋端
功能!LoadPluginSettings()
如果存在(“:NERDTree”)
让NERDTreeIgnore=['\.pyc$','\.class$']
nnoremap d:NERDTreeCWD
恩迪夫
如果有('python')
如果存在(“:UltiSnipsEdit”)
设g:UltiSnipsExpandTrigger=“”
设g:UltiSnipsJumpForwardTrigger=“”
设g:UltiSnipsJumpBackardTrigger=“”
恩迪夫
恩迪夫
端功能
对于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
函数!LoadPluginSettings()
如果存在(“:NERDTree”)
设g:NERDTreeIgnore=['\.pyc$','\.class$']
nnoremap d:NERDTreeCWD
恩迪夫
如果有('python')
如果存在(“:UltiSnipsEdit”)
设g:UltiSnipsExpandTrigger=“”
设g:UltiSnipsJumpForwardTrigger=“”
设g:UltiSnipsJumpBackardTrigger=“”
恩迪夫
恩迪夫
端功能

至于为什么设置不起作用。BufEnter发生在插件加载之后。加载插件时,它会检查变量并适当设置值。在事实发生后更改变量不会产生任何效果


我认为您应该将变量留在vimrc中。几个额外的变量不会使vim减速。如果需要,您仍然可以有条件地加载映射。

您没有向
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
函数!LoadPluginSettings()
如果存在(“:NERDTree”)
设g:NERDTreeIgnore=['\.pyc$','\.class$']
nnoremap d:NERDTreeCWD
恩迪夫
如果有('python')
如果存在(“:UltiSnipsEdit”)
设g:UltiSnipsExpandTrigger=“”
设g:UltiSnipsJumpForwardTrigger=“”
设g:UltiSnipsJumpBackardTrigger=“”
恩迪夫
恩迪夫
端功能

至于为什么设置不起作用。BufEnter发生在插件加载之后。加载插件时,它会检查变量并适当设置值。在事实发生后更改变量不会产生任何效果


我认为您应该将变量留在vimrc中。几个额外的变量不会使vim减速。如果需要,您仍然可以有条件地加载映射。

您没有向
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
函数!LoadPluginSettings()
如果存在(“:NERDTree”)
设g:NERDTreeIgnore=['\.pyc$','\.class$']
nnoremap d:NERDTreeCWD
恩迪夫
如果有('python')
如果存在(“:UltiSnipsEdit”)
设g:UltiSnipsExpandTrigger=“”
设g:UltiSnipsJumpForwardTrigger=“”
设g:UltiSnipsJumpBackardTrigger=“”
恩迪夫
恩迪夫
端功能

至于为什么设置不起作用。BufEnter发生在插件加载之后。加载插件时,它会检查变量并适当设置值。在事实发生后更改变量不会产生任何效果


我认为您应该将变量留在vimrc中。几个额外的变量不会使vim减速。如果需要,您仍然可以有条件地加载映射。

您没有向
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
函数!LoadPluginSettings()
如果存在(“:NERDTree”)
设g:NERDTreeIgnore=['\.pyc$','\.class$']
nnoremap d:NERDTreeCWD
恩迪夫
如果有('python')
如果存在(“:UltiSnipsEdit”)
设g:UltiSnipsExpandTrigger=“”
设g:UltiSnipsJumpForwardTrigger=“”
设g:UltiSnipsJumpBackardTrigger=“”
恩迪夫
恩迪夫
端功能

至于为什么设置不起作用。BufEnter发生在插件加载之后。加载插件时,它会检查变量并适当设置值。在事实发生后更改变量不会产生任何效果


我认为您应该将变量留在vimrc中。几个额外的变量不会使vim减速。如果需要,您仍然可以有条件地加载映射。

是的,这似乎解决了第一个问题。你看到问题的第二部分了吗,代码下面?:)谢谢是的,这似乎解决了第一个问题。你看到问题的第二部分了吗,代码下面?:)谢谢是的,这似乎解决了第一个问题。你看到问题的第二部分了吗,代码下面?:)谢谢是的,这似乎解决了第一个问题。你看到问题的第二部分了吗,代码下面?:)谢谢