Je souhaite utiliser la fonction omnicomplétion ou omnicomplétion dans vim pour réaliser l'achèvement automatique des fonctions glibc. Par exemple, entrez pri dans le fichier source C, puis appuyez sur C-x C-o pour afficher la liste pour terminer printf, et ainsi de suite.
Le problème maintenant est que j'utilise ctags pour traiter les fichiers d'en-tête C standard installés par glibc-headers-2.15-57.fc17.i686 et générer le fichier tags_glibc. Mais entrez pri dans le fichier source C, puis C-x C-o. Dans le menu contextuel, il n'y a que la définition et la déclaration du prototype de printf dans stdio2.h, mais pas la déclaration printf de stdio.h. Ce qui est étrange, c'est que j'ai utilisé vim pour afficher le fichier de balises généré, recherché printf et trouvé les trois entrées suivantes :
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
Le dernier montre que ctags génère la déclaration prototype (type p) de printf dans stdio.h, mais pourquoi ne puis-je pas voir le troisième lorsque j'entre pri<C-x C-o> Où est-ce que je me suis trompé? ?
Le même phénomène se produit également dans des fonctions telles que fprintf (ce symbole est disponible dans stdio.h et stdio2.h), memcpy (disponible dans string.h et string3.h).
Mon système est fedora17 (3.6.3-1.fc17.i686), ctags est la dernière version, 5.8
La commande ctags utilisée est la suivante :
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
Parmi eux, la génération de glibc-headers-filelist.txt est la commande suivante :
rpm -ql glibc-headers |grep '\.h' >glibc-headers-filelist.txt
Chers experts vim, existe-t-il un moyen de mieux générer le fichier de balises du fichier d'en-tête de la glibc ?
-e
Incluez des balises externes. les ctags ignoreront normalement les déclarations externes de fonctions ou de variables ; c'est pratique lors de la génération de balises pour vos propres programmes. Un fichier de balises pour les déclarations externes dans les fichiers d'en-tête standard du système peut être une ressource très pratique, c'est pourquoi cet indicateur -e a été créé.
De http://elvis.the-little-red-haired-gi...
Lorsque vous utilisez des fichiers de balises, vous devez ouvrir vim dans le répertoire où se trouvent les balises.
Lorsque vous utilisez différents répertoires, vous devez définir la variable tags dans vim, et la valeur de la variable est le chemin du fichier de balises. Par exemple :