我最喜欢的 vim 插件之一是NERDTree和ChooseWin。现在我喜欢把它们结合起来。实际上我想以这种方式调整 NERDTree ,当打开文件(o
)时,它使用 ChooseWin 来要求用户显示一个窗口(默认行为是 NERDTree 始终使用最后一个活动窗口(除了它自己的窗口)。
我已经通过 NERDTree 的文档(因为我想在这里创建一个钩子是一个解决方案),但无法找到一些东西。 API 部分最初听起来很有意义,但对我没有帮助。
所以我只想问一下社区是否有人为了找到解决方案而有足够的hacky。
答案 0 :(得分:1)
你可能想要为那个
分叉nerdtree完成后,您需要更改this function(nerdtree#ui_glue#invokeKeyMap)
您要检查a:key == 'o'
,然后您需要弄清楚光标下的文件是什么,以便您在调用ChooseWin后知道该怎么做。我不认为这是一项非常简单的任务,根据我的经验,从nerdTree的代码中理解并不是微不足道的,但如果你愿意付出努力......
答案 1 :(得分:0)
<强>解决方案:强>
要在使用 NERDTree 打开文件时使用 choosewin 插件,必须调整函数activateFileNode()
。方法很简单:备份当前窗口ID,调用 choosewin 函数,选择一个窗口,按存储的ID跳回 NERDTree ,然后正常打开文件。原因 NERDTree 始终使用上次访问的窗口,此解决方案有效
保存窗口ID并跳回是必要的,因此 NERDTree 打开文件的以下过程使用其缓冲区本地的变量。
<强>代码强>
在 autoload \ nerdtree \ ui_glue.vim 中:
function! s:activateFileNode(node)
let l:nerdwindow = win_getid()
call choosewin#start(range(1, winnr('$')))
call win_gotoid(l:nerdwindow)
call a:node.activate({'reuse': 'all', 'where': 'p'})
endfunction
请注意,只有安装了 choosewin ,才能正常工作。到目前为止,我还没有解决方法如何检查。可能会有更新。
我的fork也提供了此解决方案。一旦我修好了这个&#34;检查插件是否存在&#34;,我将打开PR。