想要在vim中用omnicompletion或omnicppcompletion的功能,實現對glibc函數的自動補齊,例如在C原始檔中輸入pri,然後按C-x C-o能夠彈出列表補齊printf,諸如此類。
現在的問題是,我用ctags對glibc-headers-2.15-57.fc17.i686安裝的標準C頭檔進行處理,產生tags_glibc檔。但在C原始檔中輸入pri,然後C-x C-o,彈出的選單裡面,只有stdio2.h中的printf的定義和原型宣告,而沒有stdio.h的printf宣告。令人奇怪的是,我用vim查看產生的tags文件,搜尋printf,發現有以下三條entry:
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
最後一條表明ctags的確生成stdio.h中的printf的原型聲明(類型為p),但是為什麼我在insert模式下,輸入pri<C-x C-o>,卻看不見第三條呢?我錯在哪裡了? ?
fprintf(stdio.h,stdio2.h中都有該符號),memcpy(string.h,string3.h中都有)等函數也出現了同樣的現象。
我的系統是fedora17(3.6.3-1.fc17.i686),ctags是最新版,5.8的
用的ctags指令如下:
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
其中,glibc-headers-filelist.txt的產生是如下指令:
rpm -ql glibc-headers |grep '\.h' >glibc-headers-filelist.txt
各位vim高手,請問有沒有辦法可以比較好地產生glibc頭檔的tags檔
滿天的星座2017-05-16 16:44:46
-e
包括外部標籤。 ctags 通常會忽略函數或變數的 extern 宣告;這在為您自己的程式產生標籤時非常方便。系統標準頭檔中的 extern 聲明的標籤檔案可能是一個非常方便的資源,因此創建了這個 -e 標誌。
來自http://elvis.the-little-red-haired-gi...
为情所困2017-05-16 16:44:46
使用tags檔案時,需要在tags所在的目錄開啟vim。
不同目錄時需要在vim裡設定tags變量,變數值為tags檔案路徑。例如:
:set tags=....../tags_glibc