2011-09-12 3 views
9

型推測されたctagsはvimで可能にジャンプしていますか?

// MyClass.h 
class A { 
    void foo(); 
} 

class B { 
    void foo(); 
} 

// MyClass.cpp 
void main() { 
    A a(); 
    a.foo(); 
} 

vimを使用していて、自分のctagsを生成しているとすれば、main()foo()にカーソルを合わせてctrl+]を押すと、fooの実装のリストが表示されます。複数あるからです。もし1つしかなければ、その実装にすぐにジャンプします。

a aのタイプを推論する方法がありますか? ctrl+]にヒットするとすぐに選択肢のリストを私に提供するのではなく A::foo()の実装にすぐにジャンプしますか?このようなプラグインが存在するはずですが、それを見つけることができないようです。

アップデート:現在のところ、この問題の解決策はないようですので、私は下の質問を選択しました。解決策が提示され、新しい回答が利用可能になる場合は、この質問に対する回答を更新します。

+0

これを許可するものは何も見ていません。 Python用のスクリプトベースのプラグインを介して可能性があります。私は確かにわからないので、私は答えを残しません – Daenyth

+0

私は物事を想像しているかもしれませんが、Cコードのために、これは何らかの形で働いた印象がありました(おそらくローカルタグファイルは、近接に基づいてタグを選択できますか?)とにかく、私は ':tnext'を閲覧し、ナビゲートするときに頻繁にそれをキーにマップします。 – sehe

答えて

4

C++コンパイラのように、Vimが実際にC++翻訳単位全体を解析できない限り、あなたがしたいことはできません。これは、非常に単純なヒューリスティックを使用して単にカーソルの近傍をトークン化するctagsの範囲をはるかに超えています。

これは明白な解決策です... C++パーサーをVimにプラグインしてください! Clang C++パーサにフックすることの大部分をすでに実行しているclang_completeというプラグインが実際にあります。この基盤から、Clang APIを使って定義へのジャンプを実装するように拡張するのは簡単なことです。実際に、私は2つのプロジェクトを通じて、このような特徴に取り組ん

を開始しました:clang_indexer、用途にインデックスを照会する機能を追加したディスク上のインデックス、およびclang_completeの私のフォークを、構築するためにソースツリーをクロールしますカーソルの下にあるシンボルのこれは実際には、「すべての参照を見つける」機能(結果を定義にフィルタリングするオプション付き)を目指しているため、実際には少し後のことです。

これは非常に早い段階であり、私は自分のためにしているだけなので、非常に洗練されたソリューションであるとは思わないでください。

+0

私はXavier Deguillardによってclang_complete.vimを使用しました。それは完璧に動作しますが、私が望むのは、定義にジャンプし、すべての参照を見つけることです。あなたがそれに取り組んでいることを読むのはいいことです。どのようにあなたのclang_indexerとclang_completeを一緒に働かせるかはどこですか?非常に有望ですね。ありがとう。 –

+0

http://blog.wuwon.id.au/2011/10/vim-plugin-for-navigating-c-with.html –

関連する問題