Ich möchte die Omnicompletion- oder Omnicompletion-Funktion in vim verwenden, um die automatische Vervollständigung von Glibc-Funktionen zu realisieren. Geben Sie beispielsweise pri in die C-Quelldatei ein und drücken Sie dann C-x C-o, um die Liste zum Vervollständigen von printf usw. aufzurufen.
Das Problem besteht nun darin, dass ich ctags verwende, um die von glibc-headers-2.15-57.fc17.i686 installierten Standard-C-Header-Dateien zu verarbeiten und die Datei tags_glibc zu generieren. Geben Sie jedoch pri in die C-Quelldatei ein und dann C-x C-o. Im Popup-Menü gibt es nur die Definition und Prototyp-Deklaration von printf in stdio2.h, nicht jedoch die printf-Deklaration von stdio.h. Das Seltsame ist, dass ich vim verwendet habe, um die generierte Tag-Datei anzuzeigen, nach printf gesucht und die folgenden drei Einträge gefunden habe:
printf /usr/include/bits/stdio2.h /^printf (__const char *__restrict __fmt, ...)$/;" f printf /usr/include/bits/stdio2.h 108;" d printf /usr/include/stdio.h /^extern int printf (__const char *__restrict __format, ...);$/;" p
Das letzte zeigt, dass ctags die Prototyp-Deklaration (Typ p) von printf in stdio.h generiert, aber warum kann ich die dritte nicht sehen, wenn ich pri
Das gleiche Phänomen tritt auch bei Funktionen wie fprintf (dieses Symbol ist in stdio.h und stdio2.h verfügbar) und memcpy (verfügbar in string.h und string3.h) auf.
Mein System ist Fedora17 (3.6.3-1.fc17.i686), ctags ist die neueste Version, 5.8
Der verwendete ctags-Befehl lautet wie folgt:
ctags --langmap=c:.c.h --language-force=c -h .h --c-kinds=+pxl --exclude='tags*' --exclude='*swp' --exclude='*~' --exclude='*[!ch]' -I _THROW -I __attribute__+ -I __wur -f tags_glibc -L glibc-headers-filelist.txt
Unter diesen ist die Generierung von glibc-headers-filelist.txt der folgende Befehl:
rpm -ql glibc-headers |grep '\.h' >glibc-headers-filelist.txt
Liebe VIM-Experten, gibt es eine Möglichkeit, die Tags-Datei der Glibc-Header-Datei besser zu generieren?
-e
Include extern tags. ctags will normally ignore extern declarations of functions or variables; that's handy when generating tags for your own programs. A tags file for the extern declarations in the system's standard header files can be a very handy resource, so this -e flag was created.
From http://elvis.the-little-red-haired-gi...
使用tags文件时,需要在tags所在的目录打开vim。
不同目录时需要在vim里设置tags变量,变量值为tags文件路径。例如: