Tagbarでどの関数内に居るかを知る

背景

vimscreen.cを読んだ(見た)ことがあるでしょうか?

  • 計10701行
  • foldline関数 約1600行
  • その他の関数 お察し。

はっきり言って、タグジャンプした時点で即迷子です。

なので、「いまどの関数の中にいるか」がわかるなにかが欲しい

そこで見つけたTagbar

Tagbarって?

vimプラグインです。
どんなプラグインかは、紹介しているサイトがたくさんあるので省略。

どの関数の中にいるかわかるの?

このプラグイン:TagbarShowTagというコマンドを叩けば、
こんな↓感じにハイライトして教えてくれます。

f:id:shocrunch:20141214074847p:plain

インストール・設定

.vimrcに追加

Neobundle 'majutsushi/tagbar'  " Neobundleでインストール

" tagbar の設定
let g:tagbar_width = 30        " 初期設定はwidth=40なのでちょっと幅とりすぎ。
let g:tagbar_autoshowtag = 1   ":TagbarShowTag を叩かなくても有効にする

しかし、ちょっと難あり

完璧だ!と思ったんですが、いかんせん遅い & 関数限定ではない

  • 遅い:カーソルをおいてから数秒キー操作をやめないと更新されない。
  • 関数限定でない:関数の中でDEFINEマクロが書かれてるとそっちに反応してしまう。

対処法

ステータスラインに現在いる場所のタグを表示するというtipsがhelpにありました。
.vimrcにステータスラインの設定を書き加えるだけでOK

" ステータスラインの参考 %{tagbar#currenttag('[%s]','')} がタグを表示している部分
set statusline=%F%m%r%h%w\%=%{tagbar#currenttag('[%s]','')}\[Pos=%v,%l]\[Len=%L]

お世話になったサイト