vim タブページ
みなさんvimのタブページ機能を使っていますか?
この一番上のバーに出ている、ブラウザなどでよくある「タブ」のことです。↓
これはvim 7.3から導入された機能なのですが、なぜかあまり使われていません。
Google検索 vim タブページ
しかし、これはめちゃめちゃ便利です!
今までtmuxでvimを複数個立ち上げており、ちょっと別の作業をするときは別のvimを起動していたのですが、タブページを利用することによって1つのvimで作業することができ、更にヤンクももちろんタブ間で共有されるので開発効率がかなり上がりました。
あまり使われていない原因はおそらく、デフォルトの状態だと、タブ間の移動がかなりめんどくさいからだと思います。
右側のタブに移動するたびに :tabnext
ラストのタブに移動するには :tablast
など打っていられません。
また、:tabnext3
などのコマンドで、左から3番目のタブに移動できるのですが、
デフォルトのタブライン(タブのステータスバー)は番号も書いてないので、簡単には移動出来ません。
そこで暗黒美夢王(ダークビムマスター)ことShougoさんの.vimrcを参考に
快適にタブページ機能を使えるよう.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.JP、 coincheck などのサービスを運営、開発しています。興味のある方はぜひ 和田まで連絡を!