让nerdtree判断文件是否打开

作者当前的模式

  • enter:
    • 文件已打开过tab, 激活跳转到该 tab
    • 未打开过 tab, 当前 tab 替换为要打开的文件内容
      • 当前 tab 有修改内容: 依然被替换(看不到被修改的那个 tab ). 只有在退出时候又会蹦出来说修改的文件未保存, 不能退出(我也不知道该说什么了)
  • t:
    • 始终在新 tab 中打开文件, 同一个文件可以开多个 tab (没发现有什么用)

我想要的模式

无论按下 t 还是 enter:

  • 文件已经有打开过 tab, 那么激活.
  • 没有打开过, 新开一个 tab.

多么简单明了, 原作者搞那么复杂干什么哦!

修改

vim ./nerdtree/lib/nerdtree/opener.vim

找到

" let l:newOpener._reuse = has_key(a:opts, 'reuse') ? a:opts['reuse'] : ''
let l:newOpener._reuse = 1

注释原来的, 让值永远是1. 这样按下 t 就是我想要的结果了.

作者改了, 这个之前的记录不用看了

之前记录

nerdtree 不能判断文件是否已经打开,一个文件会在多个tab里打开

按下t就知道了,一个文件会打开多个tab,时间长了就崩溃了.一大堆的tab.

后来发现按下enter,如果没有打开过这个文件,就会在当前tab打开替换了,如果已经打开过这个tab那么就会激活这个tab,而不是新开一个tab.

作者又更新修改了:

  • t永远是新开tab
  • 回车如果开过,那么就激活已经开过的tab;没有开过就新开;当前文件跑起来修改了,还会分割打开,相当不好。

所以我还是回退版本,用回以前的,一概用t

不完全满足我想要的,我要的是:t,如果没有开过这个文件,新开一个tab,如果开过,激活这个tab.

查看

vim ~/.vim/bundle/nerdtree/lib/nerdtree/opener.vim

找到

function! s:Opener._openFile()
    if self._reuse && self._reuseWindow()
        return
    endif
    ....

这里应该是当按下回车,并且激活Window成功,就return

改成

function! s:Opener._openFile()
    if self._reuse && self._reuseWindow()
        return
    endif
    if self._reuseWindow()
        return
    endif

这时按下t,就可以完全满足我的要求了: 如果没有开过这个文件,新开一个tab,如果开过,激活这个tab.