タブに表示された長いファイル名の末尾を省略する
Vim にはタブページ機能がある。Vim なので当然、タブの表示のカスタマイズをすることが可能だ。設定は 'guitablabel' オプションで行う*1。
これをいじっていたところ、一つ問題に直面した。「タブにファイル名を表示させ、長いファイル名は末尾を省略したい」とする。しかし、'guitablabel' オプションでは、長いファイル名の省略は先頭に対して行われてしまう*2。
当然 Vim script の出番。以下が、「タブに表示された長い(=10文字を超えた)ファイル名の末尾を省略する」コードである。.vimrc に貼りつけてロードすれば、設定が有効になる。
function! GuiTabLabel() let label = expand("%:t") if strlen(label) > 10 "ファイル名が11文字以上の場合、末尾を切り詰めて10文字にする。 let label = strpart(label, 0, 10) . ".." endif return label endfunction set guitablabel=%{GuiTabLabel()}
ちなみにこのスクリプトはマルチバイトには対応していない。マルチバイトのファイル名も扱えるようにするには、strlen() と strpart() の マルチバイト対応版を使えば可能である。
以下が、マルチバイト版のコードになる。
"" マルチバイト対応 strlen() と strpart() """ via http://vimwiki.net/?ScriptSample%2F16 function! StringLength(str) return strlen(substitute(a:str, ".", "x", "g")) endfunction function! StringPart(str, start, len) let bend = byteidx(a:str, a:start + a:len) - byteidx(a:str, a:start) if bend < 0 return strpart(a:str, byteidx(a:str, a:start)) else return strpart(a:str, byteidx(a:str, a:start), bend) endif endfunction function! GuiTabLabel() let label = expand("%:t") let length = StringLength(label) if length > 10 "ファイル名が11文字以上の場合、末尾を切り詰めて10文字にする。 let label = StringPart(label, 0, 10) . ".." endif return label endfunction set guitablabel=%{GuiTabLabel()}
*1:設定方法はだいたい 'statusline' と同じ。'statusline' の設定方法については、「http://memo.officebrook.net/20050512.html#p01」によくまとまっている。
*2:末尾を省略させる設定方法は、調べた限りでは無かった。