2012年3月4日日曜日

[vim] NERDTreeをもっと使いやすくするための設定

背景

NERDTreeは便利だけど、ファイル編集中はじゃま。
なので、NERDTree実行用のスクリプトを書いてみた。
結構便利だ。前にやった「引数なしでvimを実行したときNERDTreeを実行する」設定も修正した。

この辺のアイディアを参考にさせていただいた。
NERDTreeのウィンドウを必要なときだけ見せる。

機能

主な機能はこんな感じ。
① 「Ctrl+e」で、NERDTreeを実行する。
② もう一度「Ctrl+e」で、NERDTreeの表示/非表示を繰り返す。

以下を、vimrcに書き込むと使える。

" 引数なしで実行したとき、NERDTreeを実行する
let file_name = expand("%:p")
if has('vim_starting') &&  file_name == ""
    autocmd VimEnter * call ExecuteNERDTree()
endif

" カーソルが外れているときは自動的にnerdtreeを隠す
function! ExecuteNERDTree()
    "b:nerdstatus = 1 : NERDTree 表示中
    "b:nerdstatus = 2 : NERDTree 非表示中

    if !exists('g:nerdstatus')
        execute 'NERDTree ./'
        let g:windowWidth = winwidth(winnr())
        let g:nerdtreebuf = bufnr('')
        let g:nerdstatus = 1 

    elseif g:nerdstatus == 1 
        execute 'wincmd t'
        execute 'vertical resize' 0 
        execute 'wincmd p'
        let g:nerdstatus = 2 
    elseif g:nerdstatus == 2 
        execute 'wincmd t'
        execute 'vertical resize' g:windowWidth
        let g:nerdstatus = 1 

    endif
endfunction
noremap  ::call ExecuteNERDTree()

2 件のコメント:

  1. "How can I open a NERDTree automatically when vim starts up if no files were specified?
    autocmd vimenter * if !argc() | NERDTree | endif

    "How can I close vim if the only window left open is a NERDTree?
    "autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif

    返信削除
  2. NERDTree閉じるやつ、デフォでできたんですね・・・。恥ずかしいw。
    helpちゃんと読みます。

    返信削除