如何自定义NERDTree行为

时间:2012-07-04 08:14:43

标签: vim customization nerdtree

我最近在我的vim配置中添加了NERDTree和NERDTreeTabs,我对此非常满意。

但是,我想进一步配置它并具有以下行为:

控制 +

  • 如果在NERDTree内,什么都不做。

  • 如果在编辑过的文件中,请转到打开的NERDTree,如果没有,则先打开一个NERDTree。我想应该使用NERDTreeTabsToggle,但要使用它,我必须能够检测NERDTree是否已经打开,而不是通过“切换”来关闭它。

控制 +

  • 如果在NERDTree内部,请返回已编辑的文件而不关闭NERDTree。 (就像 Ctrl - w 那样。)

  • 如果在编辑过的文件中,隐藏/关闭NERDTree。

然而,我的Vim脚本技能对我来说是低的,以获得任何令人满意的结果。例如,我无法弄清楚如何检查当前活动窗口是什么或如何编写适当的条件语句。

有人可以帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:5)

如果终于找到了办法。

我编辑了nerdtree_plugin/vim-nerdtree-tabs.vim文件,添加了这些功能:

" === Stepped Open/Close functions ===
" focus the NERDTree view, creating one first if none is present
fun! s:NERDTreeSteppedOpen()
  if !s:IsCurrentWindowNERDTree()
    if s:IsNERDTreeOpenInCurrentTab()
      call s:NERDTreeFocus()
    else
      call s:NERDTreeMirrorOrCreate()
    endif
  endif
endfun

" unfocus the NERDTree view or closes it if it hadn't had focus at the time of
" the call
fun! s:NERDTreeSteppedClose()
  if s:IsCurrentWindowNERDTree()
    call s:NERDTreeUnfocus()
  else
    let l:nerdtree_open = s:IsNERDTreeOpenInCurrentTab()

    if l:nerdtree_open
      silent NERDTreeClose
    endif
  endif
endfun

我还向作者提出pull-request询问他是否要在上游添加这些功能。

作者将我的拉取请求添加到主存储库,因此在下一个版本中,您可以直接调用这些函数。

希望它有助于人们。