仅在Nerdtree窗口中的gvim弹出菜单项

时间:2012-03-17 06:46:07

标签: vim menu popup nerdtree

我有以下菜单项

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

但是我希望它只在Nerdtree窗口中显示,我该怎么做?

1 个答案:

答案 0 :(得分:1)

我想我已经解决了这个问题,但它并不像我希望的那样漂亮。我编写了一个函数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的常规用户,所以我可能会遗漏一些细微之处。

另一种方法是在新的filetype插件中将行添加到菜单中(只需将nnoremenu行放在$ VIM / vimfiles / ftplugin中名为nerdtree.vim的文件中)但这仍然存在问题删除非NERDTree缓冲区的行,所以我认为上面的解决方案稍微清晰。