开发者

if exists(":command") fails on startup, using Pathogen

开发者 https://www.devze.com 2023-02-11 05:00 出处:网络
I\'m using exists() to check if plugins are installed i开发者_开发问答n Vim (I mapped ; to :):

I'm using exists() to check if plugins are installed i开发者_开发问答n Vim (I mapped ; to :):

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

The mapping doesn't work unless I source the .vimrc file manually. I'm using Pathogen to load my plugins on startup, I imagine that has something to do with it?

My complete .vimrc file: https://github.com/ElbertF/dotfiles/blob/master/.vimrc


Your call to exists() doesn't work because plugins are only loaded after vim has finished processing your .vimrc - see :help startup. Also, pathogen doesn't actually load your plugins, it merely adds their containing folders to the runtimepath option so they will be loaded after your .vimrc.

You could create a VimEnter autocmd to set up your mapping after vim has finished loading:

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


In the MacVim you can define some mappings in the .gvimrc file, which parsed after the .vimrc. It is useful to redefine GUI Menu commands such as File → Open... or File → Save.
Here is example of the .gvimrc file which redefines Command+o hotkey to open 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

Where macm File.Open\.\.\. key=<nop> command unbinds any hotkey from the menu item File → Open.
And ?noremap <D-o> ... commands binds Command+o to show the NERDTree in the normal/insert/visual modes.

0

精彩评论

暂无评论...
验证码 换一张
取 消