はじめに
Vimのタブのところに、どこのディレクトリのファイルなのかのヒントが欲しいときがあります。そして、それはできるだけシンプルなものがいいです。たとえば、ディレクトリ名の頭文字を含むものです。


私はlightline.vimを使っているので、それに合わせる必要がありました。
今回はその設定を紹介します。
設定
設定は下記になります:
if $TERM == 'screen'
set t_Co=256
endif
set background=dark
let g:solarized_termcolors=256
colorscheme solarized
let g:lightline = {
\ 'colorscheme': 'solarized_dark',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'fugitive', 'filename' ] ]
\ },
\ 'component_function': {
\ 'readonly': 'LightlineReadonly',
\ 'modified': 'LightlineModified',
\ 'fugitive': 'LightlineFugitive',
\ 'filename': 'LightlineFilename'
\ },
\ 'separator': { 'left': '', 'right': '' },
\ 'subseparator': { 'left': '|', 'right': '|' }
\ }
function! LightlineModified()
if &filetype == 'help'
return ''
elseif &modified
return '+'
elseif &modifiable
return ''
else
return '-'
endif
endfunction
function! LightlineReadonly()
if &filetype == 'help'
return ''
elseif &readonly
return 'x'
else
return ''
endif
endfunction
function! LightlineFugitive()
return exists('*fugitive#head') ? fugitive#head() : ''
endfunction
function! LightlineFilename()
return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') .
\ ('' != expand('%:t') ? expand('%:t') : '[No Name]') .
\ ('' != LightlineModified() ? ' ' . LightlineModified() : '')
endfunction
let g:lightline.tab = {
\ 'active': [ 'tabnum', 'filename', 'modified' ],
\ 'inactive': [ 'tabnum', 'filename', 'modified' ]
\ }
let g:lightline.tab_component_function = {
\ 'filename': 'LightlineTabFilename',
\ 'modified': 'lightline#tab#modified',
\ 'readonly': 'lightline#tab#readonly',
\ 'tabnum': 'lightline#tab#tabnum' }
function! LightlineTabFilename(n) abort
let buflist = tabpagebuflist(a:n)
let winnr = tabpagewinnr(a:n)
let _ = pathshorten(expand('#'.buflist[winnr - 1].':f'))
return _ !=# '' ? _ : '[No Name]'
endfunction
少し設定の解説
先頭に、私はターミナルでGNU Screenを使っていますので、その設定とカラースキームの設定があります。
LightlineTabFilename(n)のところ以外はlightline.vimの設定チュートリアルにあるものです。
LightlineTabFilename(n)のアイデアは、ファイル名ではなく相対パスを取得して、その相対パスをpathshortenで変換して、表示させるというものです。
pathshortenを試してみるにはVimを開いて、:echo pathshorten('~/.vim/autoload/myfile.vim')
を試すのがいいと思います。名前の通りパスを短くしてくれます。
気をつけなければいけないところは、tab_component_functionで指定する関数は引数を一つ受け取るというところです。(filenameコンポーネントのときだけかもしれませんが、その関数が受け取る値はカレントタブページの番号です。なので、仮引数をnとせずtabnrにしたほうがわかりやすいかもしれません。)
動かすためには、いくつかのプラグインをインストールするか、不要なところを削る必要があります。どちらでもお好みのほうを試していただければと思います。