【问题标题】:Make Nerdtree Use Choosewin On Open File让 Nerdtree 在打开文件时使用 Choosewin
【发布时间】:2018-03-03 01:34:40
【问题描述】:

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

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

所以我只想问问社区是否有人足够老练,可以找到解决方案。

【问题讨论】:

  • 在寻求帮助之前至少尝试一下。
  • @romainl 我知道,这是常见的模式。但正如我所说,我读了很多书,但找不到任何东西。那么,如果我不知道如何开始,我应该如何尝试?

标签: vim nerdtree


【解决方案1】:

你可能想为此分叉 nerdtree

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

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

【讨论】:

  • 是的,也许我必须这样做。我想我会从中学到一些东西。
【解决方案2】:

解决方案:

要在使用 NERDTree 打开文件时使用 choosewin 插件,必须调整函数 activateFileNode()。方法很简单:备份当前窗口ID,调用choosewin函数选择一个窗口,通过存储的ID跳转回NERDTree,然后正常打开文件。因为 NERDTree 总是使用上次访问的窗口,这个解决方案有效。
保存窗口 ID 并跳回是必要的,导致 NERDTree 的以下过程打开文件使用其缓冲区本地的变量。

代码

自动加载\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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多