使Nerdtree在打开的文件上使用Choosewin

时间:2018-02-23 14:49:44

标签: vim nerdtree

我最喜欢的 vim 插件之一是NERDTreeChooseWin。现在我喜欢把它们结合起来。实际上我想以这种方式调整 NERDTree ,当打开文件(o)时,它使用 ChooseWin 来要求用户显示一个窗口(默认行为是 NERDTree 始终使用最后一个活动窗口(除了它自己的窗口)。

我已经通过 NERDTree 的文档(因为我想在这里创建一个钩子是一个解决方案),但无法找到一些东西。 API 部分最初听起来很有意义,但对我没有帮助。

所以我只想问一下社区是否有人为了找到解决方案而有足够的hacky。

2 个答案:

答案 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。