vim タブページ
みなさんvimのタブページ機能を使っていますか?
この一番上のバーに出ている、ブラウザなどでよくある「タブ」のことです。↓
これはvim 7.3から導入された機能なのですが、なぜかあまり使われていません。
Google検索 vim タブページ
しかし、これはめちゃめちゃ便利です!
今までtmuxでvimを複数個立ち上げており、ちょっと別の作業をするときは別のvimを起動していたのですが、タブページを利用することによって1つのvimで作業することができ、更にヤンクももちろんタブ間で共有されるので開発効率がかなり上がりました。
あまり使われていない原因はおそらく、デフォルトの状態だと、タブ間の移動がかなりめんどくさいからだと思います。
デフォルトはこんな感じ
右側のタブに移動するたびに :tabnext
ラストのタブに移動するには :tablast
など打っていられません。
また、:tabnext3
などのコマンドで、左から3番目のタブに移動できるのですが、
デフォルトのタブライン(タブのステータスバー)は番号も書いてないので、簡単には移動出来ません。
そこで暗黒美夢王(ダークビムマスター)ことShougoさんの.vimrcを参考に
快適にタブページ機能を使えるよう.vimrcを作りました。
.vimrc
" Anywhere SID.function!s:SID_PREFIX()return matchstr(expand('<sfile>'),'<SNR>\d\+_\zeSID_PREFIX$')endfunction" Set tabline.function!s:my_tabline()"{{{lets=''foriin range(1, tabpagenr('$'))let bufnrs = tabpagebuflist(i)let bufnr = bufnrs[tabpagewinnr(i)-1] " first window, first appearslet no =i" display 0-origin tabpagenr.letmod= getbufvar(bufnr,'&modified') ? '!' : ' 'lettitle= fnamemodify(bufname(bufnr),':t')lettitle='[' . title . ']'lets .='%'.i.'T'lets .='%#' . (i== tabpagenr() ? 'TabLineSel' : 'TabLine') . '#'lets .= no . ':' . titlelets .=modlets .='%#TabLineFill# 'endforlets .='%#TabLineFill#%T%=%#TabLine#'returnsendfunction"}}}let&tabline='%!'. s:SID_PREFIX() . 'my_tabline()'setshowtabline=2" 常にタブラインを表示" The prefix key.nnoremap [Tag] <Nop>
nmap t [Tag]
" Tab jumpfornin range(1,9)
execute 'nnoremap <silent> [Tag]'.n':<C-u>tabnext'.n.'<CR>'endfor" t1 で1番左のタブ、t2 で1番左から2番目のタブにジャンプ
map <silent> [Tag]c :tablast<bar>tabnew<CR>" tc 新しいタブを一番右に作る
map <silent> [Tag]x :tabclose<CR>" tx タブを閉じる
map <silent> [Tag]n :tabnext<CR>" tn 次のタブ
map <silent> [Tag]p :tabprevious<CR>" tp 前のタブ
これを.vimrcに書き込むことにより、下のような写真の状態になり、
t1
,t2
,,,t9
で左からn番目のタブにジャンプtc
で新しいタブ,tx
でタブを閉じる
でタブページを効率的に使えます。
tに既にコマンドを割り当てている場合は、[Tag]を別にキーに当てはめれば問題なく使えると思います。