【一人 vimrc advent calendar 2017】タブページを操作するキーマッピングいろいろ【22日目】

一人 vimrc advent calendar 2017 22日目の記事になります。
もうすぐ Advent Calendar も終わりですね…。

タブページを操作するキーマッピングいろいろ

さて、わたしは基本的にタブページごとにファイルを開いているのですが、そのタブページを扱うキーマッピングをいろいろと紹介してみます。

" タブの移動
nnoremap <silent> <C-l> :tabnext<CR>
nnoremap <silent> <C-h> :tabprevious<CR>
nnoremap <silent> <C-Tab> :tabnext<CR>

" タブページ自体を左右に移動させる
command! -bar TabMoveNext :execute "tabmove " tabpagenr() % tabpagenr("$") + (tabpagenr("$") == tabpagenr() ? 0 : 1)
command! -bar TabMovePrev :execute "tabmove" (tabpagenr() + tabpagenr("$") - 2) % tabpagenr("$") + (tabpagenr() == 1 ? 1 : 0)

nnoremap <silent> <S-l> :TabMoveNext<CR>
nnoremap <silent> <S-h> :TabMovePrev<CR>

上記のようなキーマッピングを行うことで素早くタブページを移動したりタブページのレイアウトを変更したり出来ます。

おまけ

:help setting-guitablabel にも書かれているんですが、以下のように 'guitablabel' を設定しておくと更にタブページが見やすくなります。

function GuiTabLabel()
  let label = ''
  let bufnrlist = tabpagebuflist(v:lnum)

  " このタブページに変更のあるバッファがるときには '+' を追加する
  for bufnr in bufnrlist
    if getbufvar(bufnr, "&modified")
      let label = '+'
      break
    endif
  endfor

  " ウィンドウが複数あるときにはその数を追加する
  let wincount = tabpagewinnr(v:lnum, '$')
  if wincount > 1
    let label .= wincount
  endif
  if label != ''
    let label .= ' '
  endif

  " バッファ名を追加する
  return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction

set guitablabel=%{GuiTabLabel()}

タブページを使うと視覚的にもわかりやすいのでバッファがよくわからんという人は使ってみるとよいと思います。