搜尋

首頁  >  問答  >  主體

vim - 怎樣用ctags為glibc的頭檔產生tags?

what i want:

想要在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檔

世界只因有你世界只因有你2774 天前748

全部回覆(2)我來回復

  • 滿天的星座

    滿天的星座2017-05-16 16:44:46

    -e
    包括外部標籤。 ctags 通常會忽略函數或變數的 extern 宣告;這在為您自己的程式產生標籤時非常方便。系統標準頭檔中的 extern 聲明的標籤檔案可能是一個非常方便的資源,因此創建了這個 -e 標誌。

    來自http://elvis.the-little-red-haired-gi...

    回覆
    0
  • 为情所困

    为情所困2017-05-16 16:44:46

    使用tags檔案時,需要在tags所在的目錄開啟vim。

    不同目錄時需要在vim裡設定tags變量,變數值為tags檔案路徑。例如:

    :set tags=....../tags_glibc

    回覆
    0
  • 取消回覆