4

Cコードの私のタグリスト:


||マクロ MIN_LEN
|| MAX_ITERATIONS
||- typedef
|| ||セル
|| source_cell
||- 変数
|| len_given

タグリスト要素 (ドメイン):

A = {MIN_LEN, MAX_ITERATIONS, cell, source_cell, len_given}

コード スニペット (コドメイン):

B = {"code_MIN_LEN", "code_MAX_ITERATIONS", ..., "code_len_given"}

目標:セット A と B の間に全単射を持たせること。

例: A または B のいずれかの要素を削除することにより、A と B から MIN_LEN などの A の要素を削除したいと考えています。

質問: A と B の間の全単射を隔離して、A または B のいずれかの変更が他方のセットの変更になるようにする方法はありますか?

4

1 に答える 1

3

あなたにそれができるとはとても思えません。taglist プラグインは、ctags を使用してコード内のシンボルを収集し、横方向に分割して表示します。横方向の分割には読み取り専用の情報が含まれています (そのウィンドウで作業しようとすると、vim はそのバッファーの変更可能がオフになっていることを通知します)。

達成したいことは、変更しているソース コードの非常に複雑な解析を意味します。自動名前変更のような単純なタスク (タグリスト バッファー内の関数名エントリを変更し、ソース内のすべてのインスタンスが更新されると仮定) でさえ、かなり複雑な解析が必要であり、これは ctags 機能またはタグリスト自体を超えています。全単射関係ですべてを削除して同期を維持することは、さらに複雑です。削除したいマクロを使用する printf 行があるとします。その行はどうなりますか?行全体が消えるか、マクロだけが消える必要があります (その場合、行はおそらく構文的に正しくありません。

taglist は、コードをブラウズするための優れたプラグインですが、自動リファクタリングには適していません (達成したいことです)。

編集:計算の複雑さに関しては、まあ、最悪のシナリオは、統合できるラベルの新しい出現を探して、キーストロークごとにドキュメント全体を偵察する必要があることです。したがって、この意味では、それは O(n) であると言えます各キーストロークで。もちろん、これはやり過ぎであり、それを実装するための最悪の方法です。vim の構文ハイライトの計算上の複雑さについては認識していませんが (適切なトークン化を介してタグを抽出するのにも役立ちます)、非常に低く、解析されるデータの量が非常に限られていると見積もっています (トークンを抽出してそのコンテキストを理解するために解析する大きな構造を持つ可能性は低いです)。いずれにせよ、これは taglist の仕組みではありません。Taglist は、vim の呼び出しごとに ctags を実行します。入力中にドキュメントをライブで解析することはありません。ただし、これは Eclipse によって行われます。たとえば、XCode と KDevelop は、自動または半自動のリファクタリング用のツールも提供し、最終的には vim をエディターとして統合できます。これらの機能が必要な場合は、間違いなく間違ったツールを使用しています。

于 2009-07-23T17:58:14.190 に答える