我有以下菜单项
nnoremenu 1.120 PopUp.Add\ &To\ &&Path :call NERDTreeAddNodeToPath()<CR>
但是我希望它只在Nerdtree窗口中显示,我该怎么做?
答案 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缓冲区的行,所以我认为上面的解决方案稍微清晰。