vimのすごい便利なのにあまり使われていない「タブページ」機能


vim タブページ

みなさんvimのタブページ機能を使っていますか?

この一番上のバーに出ている、ブラウザなどでよくある「タブ」のことです。↓

これはvim 7.3から導入された機能なのですが、なぜかあまり使われていません。
Google検索 vim タブページ

 

しかし、これはめちゃめちゃ便利です!
今までtmuxでvimを複数個立ち上げており、ちょっと別の作業をするときは別のvimを起動していたのですが、タブページを利用することによって1つのvimで作業することができ、更にヤンクももちろんタブ間で共有されるので開発効率がかなり上がりました。

あまり使われていない原因はおそらく、デフォルトの状態だと、タブ間の移動がかなりめんどくさいからだと思います。

デフォルトはこんな感じ

右側のタブに移動するたびに :tabnext
ラストのタブに移動するには :tablast など打っていられません。

また、:tabnext3 などのコマンドで、左から3番目のタブに移動できるのですが、
デフォルトのタブライン(タブのステータスバー)は番号も書いてないので、簡単には移動出来ません。

 

そこで暗黒美夢王(ダークビムマスター)ことShougoさんの.vimrcを参考に
快適にタブページ機能を使えるよう.vimrcを作りました。

参考 Shougo/shougo-s-github

.vimrc
" Anywhere SID.
function! s:SID_PREFIX()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID_PREFIX$')
endfunction

" Set tabline.
function! s:my_tabline()  "{{{
  let s = ''
  for i in range(1, tabpagenr('$'))
    let bufnrs = tabpagebuflist(i)
    let bufnr = bufnrs[tabpagewinnr(i) - 1]  " first window, first appears
    let no = i  " display 0-origin tabpagenr.
    let mod = getbufvar(bufnr, '&modified') ? '!' : ' '
    let title = fnamemodify(bufname(bufnr), ':t')
    let title = '[' . title . ']'
    let s .= '%'.i.'T'
    let s .= '%#' . (i == tabpagenr() ? 'TabLineSel' : 'TabLine') . '#'
    let s .= no . ':' . title
    let s .= mod
    let s .= '%#TabLineFill# '
  endfor
  let s .= '%#TabLineFill#%T%=%#TabLine#'
  return s
endfunction "}}}
let &tabline = '%!'. s:SID_PREFIX() . 'my_tabline()'
set showtabline=2 " 常にタブラインを表示

" The prefix key.
nnoremap    [Tag]   <Nop>
nmap    t [Tag]
" Tab jump
for n in 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]を別にキーに当てはめれば問題なく使えると思います。

P.S.
STORYS.JPcoincheck などのサービスを運営、開発しています。興味のある方はぜひ 和田まで連絡を!