2

我有以下菜单项

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

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

4

1 回答 1

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 的常规用户,所以我可能会遗漏一些细微之处。

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

于 2012-03-19T10:27:50.670 回答