画像はグローバル変数クラス A を示していますが、ローカル変数はタグバーに表示できません。なぜですか? タグバーにローカル変数 str,m,n を表示したいのですが、どのように設定しますか??
3 に答える
ctagsによって何が解析されるかは、言語によって異なります。スクリーンショットに基づいて、あなたはC / C ++に興味がありますが、これは行われません。元々の理由はわかりませんが、次のように思います。
- 巨大なコードベース(そして誰がそうでないのか?)では、あなた(そしておそらくエディターも)はタグの数に圧倒されるでしょう。タグバーは、現在のファイルのタグのみを表示するという点で特別なものであることに注意してください。通常、タグデータベースはプロジェクト全体を対象としています。
- 個々の機能を短く、小さく保つことをお勧めします。理想的には各関数が画面全体に収まるときにタグルックアップが必要なのは誰ですか?!
Exuberant Ctagsパーサーは、正規表現に基づくカスタム言語定義で拡張できます(--langdef=<language>
および--regex-<language>
引数を参照)。ローカル変数の適切なパターンを考え出すことができれば、それらを解析することができます。
Exuberant Ctags はローカル変数をタグとしてサポートしていますが、デフォルトではオフになっています。かなりのサイズのプロジェクトの場合、タグファイルが巨大になると思いますが、その理由だけでタグファイルをオンにしたことはありません(私のタグファイルはすでに数メガバイトです)。しかし、それらを試してみたい場合は、タグ ファイルを生成するときにコマンドに--c++-kinds=+l
(c++ を想定して)追加するだけctags
で動作するはずです。
最初に、tagbar は ctags からのすべてのタグを表示し、ctags default は関数プロトタイプ、外部変数、およびローカル変数を処理しません(シェルでこれを試してください: ctags --list-kinds=c++);
次に、tagbar の tagbar_type_cpp 変数を使用します。
let g:tagbar_type_cpp = {
\ 'kinds' : [
\ 'd:macros:1',
\ 'g:enums',
\ 't:typedefs:0:0',
\ 'e:enumerators:0:0',
\ 'n:namespaces',
\ 'c:classes',
\ 's:structs',
\ 'u:unions',
\ 'f:functions',
\ 'm:members:0:0',
\ 'v:global:0:0',
\ 'x:external:0:0',
\ 'l:local:0:0'
\ ]
\ }
最後の 2 行を見てください。
それで全部です。