Если существует ( ": command" ) сбой при запуске, используя Pathogen

Я использую exists(), чтобы проверить, установлены ли плагины в Vim (я сопоставил ; до :):

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

Отображение не работает, если я не вручную создаю файл .vimrc. Я использую Pathogen, чтобы загрузить мои плагины при запуске, я полагаю, что это имеет какое-то отношение к этому?

Мой полный файл .vimrc: https://github.com/ElbertF/dotfiles/blob/master/.vimrc

Ответы

Ответ 1

Ваш вызов exists() не работает, потому что плагины загружаются только после того, как vim завершил обработку вашего .vimrc - см. :help startup. Кроме того, патоген фактически не загружает ваши плагины, он просто добавляет их содержащие папки в параметр runtimepath, поэтому они будут загружены после вашего .vimrc.

Вы можете создать autocmd VimEnter, чтобы настроить свое сопоставление после завершения загрузки vim:

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

Ответ 2

В MacVim вы можете определить некоторые сопоставления в файле .gvimrc, который анализируется после .vimrc. Полезно переопределить команды меню графического интерфейса, такие как Файл → Открыть... или Файл → Сохранить.
Ниже приведен пример файла .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 в нормальном/вставном/визуальном режимах.