如何自定义NERDTree行为

ere*_*eOn 4 vim customization nerdtree

我最近在我的vim配置中添加了NERDTree和NERDTreeTabs,我对此感到非常高兴.

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

Ctrl+ Left:

  • 如果在NERDTree内,什么也不做.

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

Ctrl+ Right:

  • 如果在NERDTree内,请返回已编辑的文件而不关闭NERDTree.(就像什么Ctrl- w,Right会做什么.)

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

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

有人可以帮助我吗?

谢谢.

ere*_*eOn 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
Run Code Online (Sandbox Code Playgroud)

我还向作者发出拉动请求,询问他是否要在上游添加这些功能.

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

希望它能帮到人们.