'tabline'を活用してみた
'tabline' を活用しよう - 永遠に未完成
を見て、前々からやろうとしていたtablineの改修を、昨日終わらせた。
左に各タブ、右にカレントフォールディング、カレントディレクトリを表示。
set guioptions-=e "tablineを使う set tabline=%!MakeTabLine() function! MakeTabLine() "{{{ let titles = map(range(1, tabpagenr('$')), 's:tabpage_label(v:val)') let sep = ' ' " タブ間の区切り let tabpages = join(titles, sep) . sep . '%#TabLineFill#%T' let info = '' " 好きな情報を入れる "FoldCCnavi if exists('*FoldCCnavi') let info .= '%#TabLineInfo#'.substitute(FoldCCnavi()[-60:],'\s>\s','%#TabLineFill#> %#TabLineInfo#','g').'%0* ' endif "カレントディレクトリ let info .= '['.fnamemodify(getcwd(), ":~") . ']' return tabpages . '%=' . info " タブリストを左に、情報を右に表示 endfunction "}}} function! s:tabpage_label(tabpagenr) "{{{ "rol;各タブページのカレントバッファ名+αを表示 let title = gettabvar(a:tabpagenr, 'title') "タブローカル変数t:titleを取得 if title !=# '' return title endif " タブページ内のバッファのリスト let bufnrs = tabpagebuflist(a:tabpagenr) " カレントタブページかどうかでハイライトを切り替える let hi = a:tabpagenr is tabpagenr() ? '%#TabLineSel#' : '%#TabLine#' " バッファが複数あったらバッファ数を表示 let no = len(bufnrs) if no is 1 let no = '' endif " タブページ内に変更ありのバッファがあったら '+' を付ける let mod = len(filter(copy(bufnrs), 'getbufvar(v:val, "&modified")')) ? '+' : '' let nomod = (no . mod) ==# '' ? '' : '['.no.mod.']' " カレントバッファ let curbufnr = bufnrs[tabpagewinnr(a:tabpagenr) - 1] " tabpagewinnr() は 1 origin let fname = fnamemodify(bufname(curbufnr), ':t') let fname = fname is '' ? 'No title' : fname "バッファが空ならNo title let label = fname . nomod return '%' . a:tabpagenr . 'T' . hi .a:tabpagenr.': '. curbufnr.'-' . label . '%T%#TabLineFill#' endfunction "}}}
ついでに気に入らなかったタブのハイライトをいじった。(※TabLineInfoはオリジナル。)
hi TabLineSel term=bold cterm=bold,underline ctermfg=LightGray ctermbg=DarkBlue gui=bold,underline guifg=LightGray guibg=DarkBlue hi TabLine term=reverse cterm=underline ctermfg=Black ctermfg=Gray ctermbg=black gui=underline guifg=Black guibg=gray hi TabLineFill term=reverse cterm=reverse,bold ctermfg=LightGray ctermbg=black gui=reverse,bold guifg=LightGray guibg=black hi TabLineInfo term=reverse ctermfg=Black ctermbg=LightBlue guifg=black guibg=lightblue