if exists(“:command”)在启动时失败,使用Pathogen

时间:2011-02-15 22:17:01

标签: vim

我正在使用exists()来检查Vim中是否安装了插件(我将;映射到:):

if exists(":NERDTree")
    map <F4> ;NERDTreeToggle<CR>
endif

除非我手动获取.vimrc文件,否则映射不起作用。我正在使用Pathogen在启动时加载我的插件,我想这与它有关?

我的完整.vimrc文件:https://github.com/ElbertF/dotfiles/blob/master/.vimrc

2 个答案:

答案 0 :(得分:23)

您对exists()的调用不起作用,因为 vim处理完.vimrc后,仅加载 - 请参阅:help startup。此外,病原体实际上并未加载您的插件,它只是将其包含的文件夹添加到runtimepath选项中,以便在.vimrc之后加载它们。

你可以创建一个VimEnter autocmd来在vim加载完成后设置你的映射:

autocmd VimEnter * if exists(":NERDTree") | exe "map <F4> ;NERDTreeToggle\<CR>" | endif

答案 1 :(得分:1)

MacVim 中,您可以在.gvimrc文件中定义一些映射,该文件在.vimrc之后解析。重新定义GUI菜单命令非常有用,例如文件→打开... 文件→保存
以下是.gvimrc文件的示例,该文件重新定义 Command + o 热键以打开NERDTree:

if has('gui_running')
    if exists(':NERDTree')
        " Command+O shows the NERDTree instead of the open dialog
        macm File.Open\.\.\. key=<nop>
        nnoremap <D-o> :NERDTree<CR>
        inoremap <D-o> <Esc>:NERDTree<CR>
        vnoremap <D-o> <Esc>:NERDTree<CR>
    endif
endif

其中macm File.Open\.\.\. key=<nop>命令取消绑定菜单项文件→打开中的任何热键。
?noremap <D-o> ...命令绑定 Command + o 以在正常/插入/可视模式下显示NERDTree。