質問

私はVIMでctagsを使用しようとしていますが、両方の初心者です。 ctagsが役立つ範囲をテストするために、非常に簡単なテスト、つまり/ usr / includeのヘッダーを解析して、いくつかの非常に基本的な機能をオートコンプリートできるようにすることにしました。

コマンドを実行するとき

 ctags  --c++-kinds=+p --fields=+iaS -f ~/.tags/tags /usr/include/*.h

その後、出力が印刷されます

BUFSIZ  /usr/include/stdio.h    108;"   d
EOF /usr/include/stdio.h    115;"   d
FILE    /usr/include/stdio.h    /^typedef struct _IO_FILE FILE;$/;" t   typeref:struct:_IO_FILE
FSETLOCKING_BYCALLER    /usr/include/stdio_ext.h    /^  FSETLOCKING_BYCALLER$/;"    e   enum:__anon122
FSETLOCKING_BYCALLER    /usr/include/stdio_ext.h    39;"    d
FSETLOCKING_INTERNAL    /usr/include/stdio_ext.h    /^  FSETLOCKING_INTERNAL,$/;"   e   enum:__anon122
FSETLOCKING_INTERNAL    /usr/include/stdio_ext.h    36;"    d
FSETLOCKING_QUERY   /usr/include/stdio_ext.h    /^  FSETLOCKING_QUERY = 0,$/;"  e   enum:__anon122
FSETLOCKING_QUERY   /usr/include/stdio_ext.h    32;"    d
P_tmpdir    /usr/include/stdio.h    128;"   d
SEEK_CUR    /usr/include/stdio.h    122;"   d
SEEK_END    /usr/include/stdio.h    123;"   d
SEEK_SET    /usr/include/stdio.h    121;"   d
_IOFBF  /usr/include/stdio.h    101;"   d
_IOLBF  /usr/include/stdio.h    102;"   d
_IONBF  /usr/include/stdio.h    103;"   d
_IO_STDIO   /usr/include/libio.h    165;"   d
_IO_STDIO_H /usr/include/libio.h    30;"    d
_OLD_STDIO_MAGIC    /usr/include/libio.h    121;"   d
_STDIO_EXT_H    /usr/include/stdio_ext.h    24;"    d
_STDIO_H    /usr/include/stdio.h    27;"    d
_STDIO_USES_IOSTREAM    /usr/include/stdio.h    73;"    d
_VA_LIST_DEFINED    /usr/include/stdio.h    81;"    d
__FILE  /usr/include/stdio.h    /^typedef struct _IO_FILE __FILE;$/;"   t   typeref:struct:_IO_FILE
__FILE_defined  /usr/include/stdio.h    57;"    d
____FILE_defined    /usr/include/stdio.h    67;"    d
__need_FILE /usr/include/stdio.h    37;"    d
__need_FILE /usr/include/stdio.h    59;"    d
__need_NULL /usr/include/stdio.h    33;"    d
__need___FILE   /usr/include/stdio.h    38;"    d
__need___FILE   /usr/include/stdio.h    69;"    d
__need_getopt   /usr/include/stdio.h    902;"   d
__need_size_t   /usr/include/stdio.h    32;"    d
__wur   /usr/include/stdio.h    /^            _IO_cookie_io_functions_t __io_funcs) __THROW __wur;$/;"  v
__wur   /usr/include/stdio.h    /^     __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;$/;"   v
__wur   /usr/include/stdio.h    /^     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;$/;"   v
__wur   /usr/include/stdio.h    /^     __THROW __attribute_malloc__ __wur;$/;"  v
__wur   /usr/include/stdio.h    /^  __THROW __wur;$/;"  v
__wur   /usr/include/stdio.h    /^extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;$/;"  v
__wur   /usr/include/stdio.h    /^extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;$/;"   v
__wur   /usr/include/stdio.h    /^extern char *tmpnam (char *__s) __THROW __wur;$/;"    v
__wur   /usr/include/stdio.h    /^extern char *tmpnam_r (char *__s) __THROW __wur;$/;"  v
__wur   /usr/include/stdio.h    /^extern int feof (FILE *__stream) __THROW __wur;$/;"   v
__wur   /usr/include/stdio.h    /^extern int feof_unlocked (FILE *__stream) __THROW __wur;$/;"  v
__wur   /usr/include/stdio.h    /^extern int ferror (FILE *__stream) __THROW __wur;$/;" v
__wur   /usr/include/stdio.h    /^extern int ferror_unlocked (FILE *__stream) __THROW __wur;$/;"    v
__wur   /usr/include/stdio.h    /^extern int fileno (FILE *__stream) __THROW __wur;$/;" v
__wur   /usr/include/stdio.h    /^extern int fileno_unlocked (FILE *__stream) __THROW __wur;$/;"    v
__wur   /usr/include/stdio.h    /^extern int ftrylockfile (FILE *__stream) __THROW __wur;$/;"   v
_flushlbf   /usr/include/stdio_ext.h    /^extern void _flushlbf (void);$/;" p   signature:(void)
cuserid /usr/include/stdio.h    /^extern char *cuserid (char *__s);$/;" p   signature:(char *__s)
dprintf /usr/include/stdio.h    /^extern int dprintf (int __fd, __const char *__restrict __fmt, ...)$/;"    p   signature:(int __fd, __const char *__restrict __fmt, ...)
fclose  /usr/include/stdio.h    /^extern int fclose (FILE *__stream);$/;"   p   signature:(FILE *__stream)
fcloseall   /usr/include/stdio.h    /^extern int fcloseall (void);$/;"  p   signature:(void)
fflush  /usr/include/stdio.h    /^extern int fflush (FILE *__stream);$/;"   p   signature:(FILE *__stream)
fflush_unlocked /usr/include/stdio.h    /^extern int fflush_unlocked (FILE *__stream);$/;"  p   signature:(FILE *__stream)
fgetc   /usr/include/stdio.h    /^extern int fgetc (FILE *__stream);$/;"    p   signature:(FILE *__stream)
fgetc_unlocked  /usr/include/stdio.h    /^extern int fgetc_unlocked (FILE *__stream);$/;"   p   signature:(FILE *__stream)
fgetpos /usr/include/stdio.h    /^extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);$/;" p   signature:(FILE *__restrict __stream, fpos_t *__restrict __pos)
fgetpos64   /usr/include/stdio.h    /^extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);$/;" p   signature:(FILE *__restrict __stream, fpos64_t *__restrict __pos)
fpos64_t    /usr/include/stdio.h    /^typedef _G_fpos64_t fpos64_t;$/;" t
fpos_t  /usr/include/stdio.h    /^typedef _G_fpos_t fpos_t;$/;" t
fprintf /usr/include/stdio.h    /^extern int fprintf (FILE *__restrict __stream,$/;"    p   signature:(FILE *__restrict __stream, __const char *__restrict __format, ...)
fputc   /usr/include/stdio.h    /^extern int fputc (int __c, FILE *__stream);$/;"   p   signature:(int __c, FILE *__stream)
fputc_unlocked  /usr/include/stdio.h    /^extern int fputc_unlocked (int __c, FILE *__stream);$/;"  p   signature:(int __c, FILE *__stream)
fputs   /usr/include/stdio.h    /^extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);$/;"   p   signature:(__const char *__restrict __s, FILE *__restrict __stream)
fputs_unlocked  /usr/include/stdio.h    /^extern int fputs_unlocked (__const char *__restrict __s,$/;"  p   signature:(__const char *__restrict __s, FILE *__restrict __stream)
fscanf  /usr/include/stdio.h    441;"   d
fseek   /usr/include/stdio.h    /^extern int fseek (FILE *__stream, long int __off, int __whence);$/;"  p   signature:(FILE *__stream, long int __off, int __whence)
fseeko  /usr/include/stdio.h    /^extern int fseeko (FILE *__stream, __off_t __off, int __whence);$/;"  p   signature:(FILE *__stream, __off_t __off, int __whence)
fseeko64    /usr/include/stdio.h    /^extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);$/;"  p   signature:(FILE *__stream, __off64_t __off, int __whence)
fsetpos /usr/include/stdio.h    /^extern int fsetpos (FILE *__stream, __const fpos_t *__pos);$/;"   p   signature:(FILE *__stream, __const fpos_t *__pos)
fsetpos64   /usr/include/stdio.h    /^extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);$/;"   p   signature:(FILE *__stream, __const fpos64_t *__pos)
getc    /usr/include/stdio.h    /^extern int getc (FILE *__stream);$/;" p   signature:(FILE *__stream)
getc    /usr/include/stdio.h    527;"   d
getc_unlocked   /usr/include/stdio.h    /^extern int getc_unlocked (FILE *__stream);$/;"    p   signature:(FILE *__stream)
getchar /usr/include/stdio.h    /^extern int getchar (void);$/;"    p   signature:(void)
getchar_unlocked    /usr/include/stdio.h    /^extern int getchar_unlocked (void);$/;"   p   signature:(void)
getw    /usr/include/stdio.h    /^extern int getw (FILE *__stream);$/;" p   signature:(FILE *__stream)
jpeg_stdio_dest /usr/include/jpeglib.h  /^EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));$/;" p   signature:(j_compress_ptr cinfo, FILE * outfile)
jpeg_stdio_dest /usr/include/jpeglib.h  841;"   d
jpeg_stdio_src  /usr/include/jpeglib.h  /^EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));$/;" p   signature:(j_decompress_ptr cinfo, FILE * infile)
jpeg_stdio_src  /usr/include/jpeglib.h  842;"   d
pclose  /usr/include/stdio.h    /^extern int pclose (FILE *__stream);$/;"   p   signature:(FILE *__stream)
perror  /usr/include/stdio.h    /^extern void perror (__const char *__s);$/;"   p   signature:(__const char *__s)
printf  /usr/include/stdio.h    /^extern int printf (__const char *__restrict __format, ...);$/;"   p   signature:(__const char *__restrict __format, ...)
putc    /usr/include/stdio.h    /^extern int putc (int __c, FILE *__stream);$/;"    p   signature:(int __c, FILE *__stream)
putc    /usr/include/stdio.h    569;"   d
putc_unlocked   /usr/include/stdio.h    /^extern int putc_unlocked (int __c, FILE *__stream);$/;"   p   signature:(int __c, FILE *__stream)
putchar /usr/include/stdio.h    /^extern int putchar (int __c);$/;" p   signature:(int __c)
putchar_unlocked    /usr/include/stdio.h    /^extern int putchar_unlocked (int __c);$/;"    p   signature:(int __c)
puts    /usr/include/stdio.h    /^extern int puts (__const char *__s);$/;"  p   signature:(__const char *__s)
putw    /usr/include/stdio.h    /^extern int putw (int __w, FILE *__stream);$/;"    p   signature:(int __w, FILE *__stream)
rewind  /usr/include/stdio.h    /^extern void rewind (FILE *__stream);$/;"  p   signature:(FILE *__stream)
scanf   /usr/include/stdio.h    442;"   d
sscanf  /usr/include/stdio.h    443;"   d
stderr  /usr/include/stdio.h    152;"   d
stdin   /usr/include/stdio.h    150;"   d
stdout  /usr/include/stdio.h    151;"   d
ungetc  /usr/include/stdio.h    /^extern int ungetc (int __c, FILE *__stream);$/;"  p   signature:(int __c, FILE *__stream)
va_list /usr/include/stdio.h    /^typedef _G_va_list va_list;$/;"   t
vdprintf    /usr/include/stdio.h    /^extern int vdprintf (int __fd, __const char *__restrict __fmt,$/;"    p   signature:(int __fd, __const char *__restrict __fmt, _G_va_list __arg)
vfprintf    /usr/include/stdio.h    /^extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,$/;" p   signature:(FILE *__restrict __s, __const char *__restrict __format, _G_va_list __arg)
vfscanf /usr/include/stdio.h    500;"   d
vprintf /usr/include/stdio.h    /^extern int vprintf (__const char *__restrict __format, _G_va_list __arg);$/;" p   signature:(__const char *__restrict __format, _G_va_list __arg)
vscanf  /usr/include/stdio.h    501;"   d
vsscanf /usr/include/stdio.h    502;"   d

ctagsは明らかにfopenのような非常に明白な関数を見逃しましたが、fcloseのような関数が含まれていました。 ctagsで解析しているときに抜けているオプションはありますか?

役に立ちましたか?

解決

ctagsコマンドに -I__wur を追加すると、目的の結果が得られます。 __ wur __ attribute__((__warn_unused_result__))のマクロです

詳細な説明については、次を参照してください:

http://sourceforge.net/mailarchive/message .php?msg_name = 48A7FF60.9080609%40sina.com

他のヒント

より具体的なタグファイルを取得できるようにするためのヒント:

# First make sure apt-file is install and then do:
$ sudo apt-file update
# set up tags for libc, the standard C library
$ apt-file list libc6-dev | grep -o '/usr/include/.*\.h'> ~/.vim/tags/libc6-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -I./libc6-ignore -f ~/.vim/tags/libc6 -L ~/.vim/tags/libc6-filelist 

ファイルlibc6-ignoreの内容は次のとおりです。

__attribute__
__attribute_deprecated__
__attribute_format_arg__
__attribute_format_strfmon__
__attribute_malloc__
__attribute_noinline__
__attribute_pure__
__attribute_used__
__attribute_warn_unused_result__
__wur
__THROW
__nonnull+

vimおよびOmniCppCompleteプラグインでこれを使用していると思いますか?

さらに多くのヒント、HTH。

1 。 Ubuntuマシンでは、 dpkg -L libc6-dev | grep -o '/usr/include/.*h'>を実行できます。 〜/ .vim / tags / libc6-dev_files を使用して、GNU Cライブラリのヘッダーを取得します。

2 。以下のコマンドを使用して、より具体的なctagsファイルを生成します。

必要に応じて、

mkdir

cd ~/.vim/tags

grep を使用して無視されるトークンを取得します。

grep -oe '__attribute\w*__' libc6-dev_tags |sort -u > libc6-dev_ignore-tokens  
echo __THROW >> libc6-dev_ignore-tokens  
echo __wur >> libc6-dev_ignore-tokens

#ctagsファイルを生成します。詳細については、ctagsのマニュアルページを参照してください。

ctags --c++-kinds=+px --fields=+iaS --extra=+q -I @./libc6-dev_ignore-tokens -L libc6-dev_files -f libc6-dev_tags

3 。このタグファイルを初期タグパスに追加します。つまり、.vimrcファイルのどこかに set tags + =〜/ .vim / tags / libc6-dev_tags を置きます。

同じ問題。 -Iオプションで解決されました。このサイトで情報を確認しました: http://ctags.sourceforge.net/ctags.html#OPTIONS

いくつかの「忘れ物」に注意してください。最初に、無視リストを含むファイルで-Iを指定する場合、すぐに@またはaが続く必要があります。または/またはドライブ文字(Windowsの場合)。 -I〜/を使用して何時間も過ごしましたが、成功しませんでした。 -I / home / username /でも同じことが魅力のように機能しました。

次に、複数行の解析を使用するようにします(--fields = + S)。これは、このスレッドのOPで使用されるオプションとして既に示されていますが、再度指摘したかったです。

すばらしいヒントを他の皆さんに感謝します!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top