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<C-x C-o> eingebe? Was habe ich falsch gemacht? ?
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文件路径。例如: