web-dev-qa-db-ja.com

NERDTreeが最後でバッファのみの場合、vimを自動的に終了します

私は私の.vimrcに以下を持っています:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open NERDTree by default
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p

そう、

% vim file.txt

nERDTreeを開き、file.txtバッファにカーソルを合わせます。編集を行い、バッファで:qを押すと、が残ります。 。 。 NERDTree。これは迷惑です。

:qaを使用してすべてのバッファーを閉じ、vimを終了することもできますが、私は:qロープに慣れています。だから私は残っている唯一のバッファーがNERDTreeであることを検出し、:qの目的で2つのバッファーを「統合」する方法があるかどうか疑問に思っています

編集

質問し、あなたが受け取るもの: https://github.com/scrooloose/nerdtree/issues#issue/21

52
g33kz0r

これを正確に行うためのスクリプトがNERDTree問題リストに投稿されています。チェックアウト issue-21 GitHubのオタク。

これにより、vimrcの1行のコマンドが表示されます here

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
87
Andrew
function! s:CloseIfOnlyControlWinLeft()
  if winnr("$") != 1
    return
  endif
  if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
        \ || &buftype == 'quickfix'
    q
  endif
endfunction
augroup CloseIfOnlyControlWinLeft
  au!
  au BufEnter * call s:CloseIfOnlyControlWinLeft()
augroup END

私の vimrc から janus repo のバージョンに基づいています。

機能強化:クイックフィックスウィンドウのみが残っている場合も閉じます。代わりにBufEnter自動コマンドを使用します。これは&btが正しく機能するために必要です。

13
blueyed

実装が必要なアイデア:

呼び出されたときに、残っている唯一のバッファー(または必要に応じて唯一の非ヘルプバッファー)がNERDTreeバッファーであるかどうかをチェックし、そうである場合は削除する(または単に終了する)関数を記述できます。

次に、バッファが削除されたり、非表示になったり、実際に:qのときに何が起こっても、autocmdで実行するようにします(完全にわからないことを認めるのは恥ずかしいことです!)。

1
Michał Marczyk

私はこれをするのが好きです:cmap bq :bufdo q<CR>コマンドモードで2つのキーストロークですべてのバッファを閉じます。

@MrDの答えは私にはうまくいきます。私はmacOSでvimbrew 8.1を使用しています。

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif 
0
superarts.org

あなたは出来る :cabbrv q qaですが、実際にはqが必要なときに忘れてしまうため、これはお勧めしません。

0
Randy Morris