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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使Nerdtree在打开的文件上使用Choosewin相关的知识,希望对你有一定的参考价值。

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

我已经浏览了NERDTree的文档(因为我想在这里创建一个钩子是一个解决方案),但找不到东西。部分API起初听起来很有趣,但对我没有帮助。

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

答案

你可能想要为此分叉nerdtree

一旦你做完了,你就改变了this function(nerdtree#ui_glue#invokeKeyMap)

你要检查a:key == 'o',那么你需要弄清楚光标下的文件是什么,以便你知道在调用ChooseWin后该怎么做。我不认为这是一个非常简单的任务,根据我的经验,从nerdTree的代码中理解并不是微不足道的,但如果你愿意付出努力......

另一答案

解:

要在使用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上找到。一旦我修复了“检查插件是否存在”,我就会打开PR。

以上是关于使Nerdtree在打开的文件上使用Choosewin的主要内容,如果未能解决你的问题,请参考以下文章

vim NERDTree无法打开文件

vim 常用 NERDTree 快捷键

vim插件之nerdtree-文件管理插件

vim左边显示目录

NERDTree基本使用教程

如何优雅地使用 VIM 文件管理插件 NERDTree