プラグイン紹介第五弾はタブ管理プラグインです。タブを制する者は Vim を制するとかなんとか。
今回のプラグインも bitbucket にソースがあります。
https://bitbucket.org/anyakichi/vim-tabutil
このプラグインは vimperator like な挙動を再現するのに必要なものを始め、タブ管理に便利な関数を定義しただけのものです。ので、各自適当なキーにマッピングして使用することを想定しています(でもプラグインマッピングだけ作っておけばいいのかと今さら)。
まず、私の .vimrc からタブ関連の設定を抜粋します。かなり長目です。
nmap t [Tab]
nnoremap [Tab] <Nop>
nnoremap [Tab]; t
nnoremap <C-n> gt
nnoremap <C-p> gT
nnoremap <silent> g<C-n> :<C-u>tablast<CR>
nnoremap <silent> g<C-p> :<C-u>tabfirst<CR>
nmap <C-g><C-n> g<C-n>
nmap <C-g><C-p> g<C-p>
nnoremap <silent> [Tab]a :<C-u>tabs<CR>
nnoremap <silent> [Tab]b :<C-u>call tabutil#buffer(v:count1)<CR>
nnoremap <silent> [Tab]n :<C-u>call tabutil#bnext(v:count1)<CR>
nnoremap <silent> [Tab]p :<C-u>call tabutil#bprevious(v:count1)<CR>
nnoremap <silent> [Tab]x :<C-u>quit<CR>
nnoremap <silent> [Tab]D :<C-u>bdelete<CR>
nmap [Tab]g [Tab]b
nnoremap <silent> [Tab]l :<C-u>call tabutil#move(v:count1)<CR>
nnoremap <silent> [Tab]h :<C-u>call tabutil#move(-v:count1)<CR>
nnoremap <silent> [Tab]L :<C-u>tabmove<CR>
nnoremap <silent> [Tab]H :<C-u>tabmove 0<CR>
nnoremap <silent> <expr> [Tab]M ":\<C-u>tabmove " . v:count . "\<CR>"
nnoremap [Tab]o :<C-u>edit<Space>
nnoremap [Tab]t :<C-u>tab split<Space>
nnoremap [Tab]s :<C-u>split<Space>
nnoremap [Tab]v :<C-u>vsplit<Space>
nmap <expr> [Tab]O "[Tab]o" . <SID>relpath()
nmap <expr> [Tab]T "[Tab]t" . <SID>relpath()
nmap <expr> [Tab]S "[Tab]s" . <SID>relpath()
nmap <expr> [Tab]V "[Tab]v" . <SID>relpath()
nnoremap <silent> [Tab]d :<C-u>call tabutil#close()<CR>
nnoremap <silent> [Tab]q :<C-u>call tabutil#only()<CR>
nnoremap <silent> [Tab]u :<C-u>call tabutil#undo()<CR>
nnoremap <silent> [Tab]U :<C-u>call tabutil#undoall()<CR>
nnoremap <silent> [Tab]<C-t> :<C-u>call tabutil#split()<CR>
nnoremap <silent> [Tab]<C-s> :<C-u>call tabutil#wsplit()<CR>
nnoremap <silent> [Tab]<C-v> :<C-u>call tabutil#vsplit()<CR>
nmap [Tab]m [Tab]<C-t>
nnoremap <silent> [Tab]r :<C-u>call tabutil#reorganize()<CR>
nnoremap <silent> [Tab]R :<C-u>call tabutil#reorganize1()<CR>
nnoremap <silent> [Tab]] :<C-u>tab tag <C-r><C-w><CR>
nnoremap <silent> [Tab]; :<C-u>tab tjump <C-r><C-w><CR>
nnoremap <silent> [Tab]<CR> :<C-u>tab wincmd <C-v><CR><CR>
nnoremap [Tab]f <C-w>gf
nnoremap [Tab]F <C-w>gF
nnoremap [Tab]c <C-w>c
nnoremap <Esc>h <C-w>h
nnoremap <Esc>j <C-w>j
nnoremap <Esc>k <C-w>k
nnoremap <Esc>l <C-w>l
function! s:relpath()
let path = expand('%:~:.:h')
if path == '' || path == '.'
return ''
else
return path . '/'
endif
endfunction
今回も実例を紹介しながら説明します。まずは .vimrc を開いている場面です。

ここで :help で help を出してみます。

が、help を出してから「あー、これ新しいタブで開けば良かった」と思うことは多いです。ここで tm とタイプするとこの help ウィンドウを別のタブに移動できます。

C-p で左のタブに移ると、先程の help ウィンドウはなくなっています。

次に、:e .hgrc でファイルを開いてみます。

ここでも先程と同様、新しいタブで開けば良かったと思う場合があります。やはり tm で新しいタブにこのバッファを移動できます。

いちばん左のタブは .vimrc に戻っています。

ここで ts とタイプすると、:split が入力されます(to だとカレントバッファで開く、
tt だと新しいタブで開く、tv だと縦分割で開くためのコマンドが入力されます)。

.zshrc を新しいウィンドウで開いてみました。ここで td とタイプすると、開いているタブを閉じることができます。

タブがなくなりました。しかしもしも間違ってタブを消してしまったとしましょう。でも大丈夫。tu とタイプすると閉じたタブが元に戻ります。

複数のウィンドウがある場合でも、そのままのレイアウトで復元されます。逆に、他のタブを全て閉じて現在開いているタブだけにしたい場合には、tq とタイプします。

タブが 1 つのみになりました。今度は tU で閉じたタブを全て復元してみます。

戻りました。今度は th とタイプしてみましょう。カレントタブを左に移動できます(もちろん tl で右に移動できます)。

次に tT とタイプしてみます。

現在開いているファイルと同一ディレクトリがあらかじめ入力された状態で :tab split が入力されています(同様のことが tO, tS, tV でも行えます)。

ここでは help.txt を入力して、同じ help ページを 2 つ表示してみました。

C-n から td でいちばん右のタブを消してみました。このタブには .hgrc と .zshrc がありました。ここで tr とタイプしてみます。

そうすると重複していた help.txt が 1 つにまとめられ、隠れていた .hgrc および .zshrc がそれぞれ新しいタブで開かれました。
などなど。一部のマッピングは Vim の機能をそのまま使用していますが、close の undo などの機能は tabutil のものです。上記で紹介したものは、全体としてあまり違和感のない操作性になっていると思います。
上記はあくまでも私の設定例ですが、tabutil を使うと快適なタブ操作が可能になるはずです。