2

基本的に、 Vim の.vimrc起動時にTagListと NERDTree を通常のファイル バッファーの左右に分割して開始します。

最後のバッファ/タブを閉じて、TagList と NERDTree の分割だけが残っているときに Vim を閉じたい。私はすでにvim-nerdtree-tabsを使用していますが、NERDTree が唯一の最後のバッファである場合にうまく機能します。

このようなトピックが StackOverflow で議論されていることは承知していますが、NERDTree と TagList の両方に関連するものは見つかりません。

ありがとう

4

4 に答える 4

1

Something like... (untested)

fun! NoExcitingBuffersLeft()
   if tabpagenr("$") == 1 && winnr("$") == 2
      let window1 = bufname(winbufnr(1))
      let window2 = bufname(winbufnr(2))
      if (window1 == t:NERDTreeBufName || window1 == "__Tag_List__") &&
         (window2 == t:NERDTreeBufName || window2 == "__Tag_List__")
         quit
      endif
   endif
endfun

then tie that function to an autocommand...

au WinEnter * call NoExcitingBuffersLeft()<cr>

I don't use either of those plugins, so you may need to adjust the t:NERDTreeBufName and __Tag_List__.

于 2012-07-26T19:16:45.090 に答える
0

コナーのアイデアを改善して、ここで機能的なソリューションを作成しました。

" If only 2 windows left, NERDTree and Tag_List, close vim or current tab
fun! NoExcitingBuffersLeft()
  if winnr("$") == 3
    let w1 = bufname(winbufnr(1))
    let w2 = bufname(winbufnr(2))
    let w3 = bufname(winbufnr(3))
    if (exists(":NERDTree")) && (w1 == "__Tag_List__" || w2 == "__Tag_List__" || w3 == "__Tag_List__")
      if tabpagenr("$") == 1
        exec 'qa'
      else
        exec 'tabclose'
      endif
    endif
  endif
endfun
autocmd BufWinLeave * call NoExcitingBuffersLeft()

BufWinLeave イベントには vim 7.0 以降が必要です。複数のタブが開いている場合はタブを閉じ、それ以外の場合は vim を終了します。このように、自動コマンドは、2 つのウィンドウのいずれかに入ったときではなく、NERDTree または Tag_List ではない最後のウィンドウを閉じたときに関連付けられます。

于 2013-08-12T02:07:34.557 に答える