`ctagsの-e`ファイル形式を理解する(emacsのためのctags)
質問
私もちょうど "etagsの" として知られても、 "ctagsの-e" として知られている "ExuberantCtags" を、使用しています。
は、私は特に私がTAGSファイルのライン#2を理解したい、コマンドetagsのによって生成されたTAGSファイル形式を理解しようとしています。
ウィキペディアにそのライン#2は、次のように記述されていると言います:
{src_file},{size_of_tag_definition_data_in_bytes}
TAGSファイル行けれども実用的な面では、:2本
のような "foo.cの" ルックスのためにfoo.c,1683
1683 私の苦境は、この番号を見つけることない正確にどのようにあります 私が知りたいことは何かということですので、
私はそれが「tag_definition」の大きさを知っています "tag_definition"?
私はのctagsソースコードのを見しようとしているが、おそらく誰かがより良いCで私はより多くを持っていますよりも、このアウトを把握成功ます。
ありがとうございます。
EDIT#2:
^L^J
hello.c,79^J
float foo (float x) {^?foo^A3,20^J
float bar () {^?bar^A7,59^J
int main() {^?main^A11,91^J
私が正しく理解していれば、さては、そう、「79」は「91 ^ J」を含む79までと後からTAGSファイルのバイト数を指します。
は完璧な理にかなってます。
{byte_offset}
を参照して述べているウィキペディアこの例では今番号20、59、91からオフセット{byte_offset}は何ですか?
すべてのヘルプケンてくれてありがとう!
解決
この番号の後に改行を次のタグデータのバイト数です。
編集:また、ファイルのタグデータとの間に、^ L文字が含まれていません。 500キロバイトのファイルを読み込むことは高価な操作あった場所のetagsはずっと前の時間から来て覚えておいてください。 ;)
ここでは、完全なタグファイルです。私はそれを二つの方法、^ Xおよび無目に見えない文字などの制御文字と最初を示しています。あなたの例では、暗黙の行末の文字は、ここで^ Jあります:
^L^J
hello.cc,45^J
int main(^?5,41^J
int foo(^?9,92^J
int bar(^?13,121^J
^L^J
hello.h,15^J
#define X ^?2,1^J
ここで同じファイルだ進で表示:
0000000 0c 0a 68 65 6c 6c 6f 2e 63 63 2c 34 35 0a 69 6e
ff nl h e l l o . c c , 4 5 nl i n
0000020 74 20 6d 61 69 6e 28 7f 35 2c 34 31 0a 69 6e 74
t sp m a i n ( del 5 , 4 1 nl i n t
0000040 20 66 6f 6f 28 7f 39 2c 39 32 0a 69 6e 74 20 62
sp f o o ( del 9 , 9 2 nl i n t sp b
0000060 61 72 28 7f 31 33 2c 31 32 31 0a 0c 0a 68 65 6c
a r ( del 1 3 , 1 2 1 nl ff nl h e l
0000100 6c 6f 2e 68 2c 31 35 0a 23 64 65 66 69 6e 65 20
l o . h , 1 5 nl # d e f i n e sp
0000120 58 20 7f 32 2c 31 0a
X sp del 2 , 1 nl
この例では、タグデータの2つのセットがあります。hello.ccためのデータの45バイト及び15バイトhello.hため
は45バイトのためhello.ccデータの次の行で始まり「hello.cc、45 ^ J」と実行 - これはまた、完全な行であることを起こります。ファイルを読み込むコードはわずか45バイト文字列のための部屋を割り当て、45のバイトを読むことができるようにバイトが与えられている理由です。 「^ L ^ J」行タグデータの45バイトの後です。あなたは残りと、ファイルが正しくフォーマットされていることを確認するために、より多くのファイルがあることをマーカーとしてこれを使用します。
15バイトのための "hello.h、15 ^ J" と実行し、次の行にhello.hデータが開始されます。
他のヒント
タグエントリの{byte_offset}は関数で定義されているファイルの先頭からのバイト数である。バイトオフセット前の数は、行番号です。あなたの例でます:
hello.c,79^J
float foo (float x) {^?foo^A3,20^J
のfoo関数はhello.cでの先頭から20のバイトを開始します。あなたは、ファイルにカーソルの位置を示してテキストエディタでそれを確認することができます。あなたはまた、ファイルにバイト数を表示するには、UNIXのtailコマンドを使用することができます:
tail -c +20 hello.c