Vimを使い終わったらGNU Screenのステータスラインのタイトルを「** free **」に

この前のDeveloper Enviroments Conferenceでid:secondlifeさんが発表された資料を見て、

  • キーリピート加速ツール「kbdacc
  • GNU Screenのステータスラインのタイトルを、VimのBufEnterフックで現在編集しているバッファ名に

のtipsを普段使うようになりました。

ちなみに、WindowsLinuxの開発マシンにリモートログインして作業する時は

を主に使っています。
特に2つ目のkbdaccは本当に便利です。PuTTYのターミナル画面の描画処理の軽さに加えて、kbdaccでキーリピートを加速させることで、Vim利用時のhjklキーでのカーソル移動が非常に軽快になります。
あとGNU Screenには画面分割を縦に分割するパッチを当てています。これもなかなか便利です。ただ、画面を縦分割すると、なぜかターミナル画面の描画処理が少し重くなるところが△です。

さて、本題です。

id:secondlifeさんの紹介であった、Screenのステータスラインのタイトルを、VimのBufEnterフックで現在編集しているバッファ名にするtipは確かに便利です。しかし、このtipをこのまま使うと、vimを終了してもGNU Screenのステータスラインのタイトルに、バッファ名が残ったままになる問題があります。

そこで、以下のようにvimスクリプトを改良しました。「^[」の所は「Ctrl + v + [」で入力します。

% vim ~/.vimrc
[...]
function SetScreenTabName(name)
  let arg = '^[k' . a:name . '^[\\'
  silent! exe '!echo -n "' . arg . "\""
endfunction

if &term =~ "screen"
  autocmd VimLeave * call SetScreenTabName('** free **')
  autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | call SetScreenTabName("%") | endif 
endif

これを.vimrcに書いておくと、vimを使い終わったら、GNU Screenのステータスラインのタイトルが「** free **」に変化します。これで使用していないスクリーンが一目でわかるようになります。

「** free **」という文字列は自由に変更できます。SetScreenTabName関数のパラメータを好きな文字列に変更するだけでOKです。