пункт всплывающего меню gvim только в окне Nerdtree - PullRequest
2 голосов
/ 17 марта 2012

У меня есть следующий пункт меню

nnoremenu 1.120 PopUp.Add\ &To\ &&Path          :call NERDTreeAddNodeToPath()<CR>

но я хочу, чтобы он отображался только в окне Nerdtree, как мне это сделать?

1 Ответ

1 голос
/ 19 марта 2012

Я думаю, что взломал это, но это не так красиво, как я надеялся.Я написал функцию NERDTreeMenuToggle(), которая добавляет строку во всплывающее меню, если текущий буфер имеет тип файла "nerdtree", в противном случае строка удаляется из меню:

function! NERDTreeMenuToggle()
    if &ft == "nerdtree"
        nnoremenu 1.120 PopUp.Add\ To\ Path :call NERDTreeAddNodeToPath()<CR>
    else
        silent! nunmenu PopUp.Add\ To\ Path
    endif
endfunction

Обратите внимание, что nunmenu долженвызывать молча, чтобы подавить ошибки, если пункт меню не существует.Затем мы должны установить, чтобы эта функция вызывалась в событии MenuPopup (т. Е. Непосредственно перед отображением меню).

au! MenuPopup * :call NERDTreeMenuToggle()

Это, кажется, делает свое дело (хотя я не обычный пользователь NERDTree, поэтому я могу упустить некоторые тонкости.

Другой подход заключается в добавлении строки в меню в новом плагине файлового типа (просто поместите строку nnoremenu в файл с именем nerdtree.vim в $ VIM / vimfiles/ ftplugin), но это по-прежнему оставляет проблему удаления строки для буферов, не относящихся к NERDTree, поэтому я думаю, что мое решение, приведенное выше, немного чище.

...