NERDTreeで起動時にファイルにフォーカスを移す

試験期間中なのでneovim設定ファイルのコミットが増えてます。

NERDTreeを自動的に起動する

自動的に起動するだけならば以下のコマンドで実現できます。

autocmd vimenter * NERDTree

ただこれだと起動時にツリーの方へフォーカスが移り、やや不便です。 そこで起動時にwincmd pでツリーからファイルにフォーカスを移してやります。

autocmd vimenter * NERDTree | wincmd p

引数なしで起動した場合とディレクトリを指定して起動した場合はツリーにフォーカスがあって欲しいのでargcを見て場合分けしてやります。

if argc() == 0 || argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in")
    autocmd vimenter * NERDTree
else
    autocmd vimenter * NERDTree | wincmd p
endif

NERDTree以外のバッファが閉じられるとNERDTreeも閉じる

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

winnr("$") == 1が現在のウィンドウ数が1、exists("b:NERDTree")でNERDTreeが存在するか確認、b:NERDTree.isTabTree()でNERDTreeの状態を見てqで終了します

まとめ

augroup NERDTreeSetting
    autocmd!
    autocmd StdinReadPre * let s:std_in = 1
    if (argc() == 0 || argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in"))
        autocmd vimenter * NERDTreeToggle
    else
        autocmd vimenter * NERDTreeToggle | wincmd p
    endif
    autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
augroup END

以上の内容は殆どNERDTreeのREADMEに書いていました。適当にググるよりまずREADMEを読みましょう(自戒)。