tags
Extagsを使用してvimファイルを正常に作成できます(活気に満ちたcタグ)。
しかし、タグを生成するとプロトタイプに移動システムヘッダーは次の形式の構文を使用してマクロを変更するため、関数の機能は機能しません。
#define _EXFUN(name, proto) name proto
たとえば、string.h
使用してください。
char *_EXFUN(strchr,(const char *, int));
_EXFUN
代わりにラベルを作成してくださいstrchr
。
_EXFUN /somedir/include/string.h /^char *_EXFUN(strchr,(const char *, int));$/;" p
次のコマンドを使用してラベルを作成します。
exctags -f tags.p --language-force=c --c-kinds=p file1 file2 ...
私はextagsのマニュアルページを読んで-I
マクロ拡張に影響を与えるためにさまざまなオプションを試しましたが、役に立ちませんでした。この問題を解決した人はいますか?
答え1
前処理されたファイルを実行し、プリプロセッサのコメント()を見て、ファイルに行番号を書き込むようにectags
要求します(または)。--line-directives=yes
tags
-n
--excmd=numbers
cc -E prog.c >prog.p
ectags --line-directives=yes --language-force=c --c-kinds=p -n prog.p
例Cファイル:
#define _EXFUN(name, proto) name proto
char *_EXFUN(strchr,(const char *, int));
結果tags
ファイル:
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.8 //
strchr prog.c 3;" p file:
ご覧のとおり、プロトタイプはの 3 行目に表示されるものとしてstrchr
記載されていますprog.c
。
これ欠点これは、前処理マクロのタグ項目を取得できないためです。
ectags
元のファイルで前処理されたファイルを実行することで、この問題を解決できます。
ectags --line-directives=yes --language-force=c --c-kinds=pd -n -I _EXFUN prog.p prog.c
生産する
[...]
_EXFUN prog.c 1;" d file:
strchr prog.c 3;" p file:
答え2
この特定のマクロを処理するには、次のオプションがあります--regex-<LANG>
。
ctags --regex-c='/^[^#]*_EXFUN *\( *([^ ,]+),.*/\1/p/' ...
ファイルを生成しますtags
。
_EXFUN test.c 1;" d file:
strchr test.c /^char *_EXFUN(strchr,(const char *, int));$/;" p