我有以下菜单项
nnoremenu 1.120 PopUp.Add\ &To\ &&Path :call NERDTreeAddNodeToPath()<CR>
但我希望它只显示在 Nerdtree 窗口中,我该怎么做?
我想我已经破解了这个,但它并不像我希望的那样漂亮。我编写了一个函数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
行放入 $VIM/vimfiles/ftplugin 中名为 nerdtree.vim 的文件中),但这仍然存在删除非 NERDTree 缓冲区行的问题,所以我认为我上面的解决方案稍微干净一些。