vim7のタブ設定

vim version7 からタブが使えるようになったわけだが、虜になりつつある。

とりあえず基本

よく使うものを挙げておいてみる。[]内は省略可。countは数値。

コマンド
:tabnew or :tabe[dit]
新たなタブを現在タブの後ろに開く
:tabe[dit] or :tabnewfile
fileを新たなタブに開く
:tab cmd
コマンド結果を新たなタブに開く。ex).:tab help version7
Ctrl+w gf
カーソル下にあるファイルを新たなタブに開く
:tabc[lose][!][ count]
現在のタブを閉じる(:qと同じ?)。count(バッファ番号)を指定するとそのタブを閉じる
:tabo[nly][!] or countgt
他のタブを全て閉じる
:tabn[ext][ count]
次のタブへ移動。countが指定されるとそのバッファ番号のタブへ移動
:tabp[revious][ count]
前のタブへ移動。countが指定されるとその数分前のタブへ移動(tabnの時と違うので注意)
:tabs
タブのリスト表示。
:tabm[ove] count
countへタブを移動(バッファ番号の変更)
カラー
TabLine
タブのカラー
TabLineSel
現在タブのカラー
TabLineFill
余った領域のカラー
その他設定
tabline
表示されるタブ設定。statuslineと同じような設定方が可能
showtabline
tablineの表示に関わる。0:表示しない 1:2つ以上のタブがあるとき表示 2:常に表示。ex).set showtabline=2

オイラの設定

map系
nmap <S-t> :tab
nmap <Tab> :tabn<CR>

Shit + tはちょっと特殊かもしれないがタブ系のコマンドは:tabから始まるものがほとんどなので楽をするため。
Tabは単純に次のタブへ移るため。本当はCtrl + Tab,Ctrl + Shift + Tabで次タブと前タブへの移動をしたかったが、Tabctrl + iと同値だからか、Ctrlとの組み合わせがうまく行かなかったので苦肉の策といった感じ。

カラー
hi TabLine     term=reverse cterm=reverse ctermfg=white ctermbg=black
hi TabLineSel  term=bold cterm=bold,underline ctermfg=5
hi TabLineFill term=reverse cterm=reverse ctermfg=white ctermbg=black

デフォルトだとどれが現在のタブか判別し難かったのでカスタマイズ。

showtabline,tabline

説明でstatuslineと同じような設定方が可能と書いたが、statuslineは他のバッファを考慮しなくて良い関係上楽なのだが、tablineの場合はそうもいかない。他のタブの状態を見れてこそのタブだ。よって関数を用いて文字列を形成し返す方法を取る。
正直わざわざやらなくてもデフォルトで十分であるかもしれないが、バッファの番号を出力しておきたかったのでカスタマイズした。

set showtabline=2
set tabline=%!MyTabLine()
function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    if i + 1 == tabpagenr()
      let s .= '%#TabLineSel#'
    else
      let s .= '%#TabLine#'
    endif
    let s .= '%' . (i+1) . 'T' 
    let s .= ' ' . (i+1) . (1==getwinvar(i+1,'&modified')?'[+]':'') . ' %{MyTabLabel(' . (i+1) . ')} '
  endfor
  let s .= '%#TabLineFill#%T'
  if tabpagenr('$') > 1 
    let s .= '%=%#TabLine#%999Xclose'
  endif
  return s
endfunction

function MyTabLabel(n)
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  return bufname(buflist[winnr - 1]) 
endfunction

これらを.vimrcに入れておけばvim7 のカスタマイズしたタブの様なバッファ番号更新情報 ファイル名となる。更新情報はもしそのバッファが更新されていれば[+]が入る。