青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ctags中文手冊!(轉(zhuǎn))

Posted on 2008-07-01 16:49 T.S Liu 閱讀(2415) 評論(0)  編輯 收藏 引用 所屬分類: vim/gvim

[譯序]
 
    (Easwy) First of all, I would like to thank the author of Exuberant Ctags, Darren Hiebert,
            without his help, I cannot finish the work.
 
翻譯這個(gè)手冊的想法,最初源于我在寫“使用VIM開發(fā)軟件項(xiàng)目”系列文章時(shí)。當(dāng)時(shí)看到大家在使用 ctags 時(shí),
基本都是用 "ctags -R"。其實(shí) ctags 所擁有的能力并不止這些。它的眾多選項(xiàng)可以讓你方便的控制標(biāo)簽文件的
內(nèi)容,甚至你可以自己定義一種語言,由 ctags 為它生成標(biāo)簽文件 (這方面的例子,可見下面的鏈接:
    http://ctags.sourceforge.net/EXTENDING.html)。
 
你可以在我的BLOG上找到最新版本的譯文: http://blog.csdn.net/easwy
譯文可自由使用,轉(zhuǎn)載請保留譯序部分。
你可以通過下面的郵件聯(lián)系我: easwy.mail at gmail dot com
---
 
CTAGS(1)                           Exuberant Ctags                              CTAGS(1)
 
 
 
NAME
       ctags - 為源代碼產(chǎn)生標(biāo)簽文件
 
 
 
SYNOPSIS
       ctags [options] [file(s)]
 
       etags [options] [file(s)]
 
 
 
DESCRIPTION
       ctags 和 etags 程序 (下文中統(tǒng)稱為 ctags,除非特別指明) 為文件中的各種語言對象生成一個(gè)索引
       (或稱為標(biāo)簽) 文件。標(biāo)簽文件允許這些項(xiàng)目能夠被一個(gè)文本編輯器或其它工具簡捷迅速的定位。一個(gè)
       “標(biāo)簽”是指一個(gè)語言對象,它對應(yīng)著一個(gè)有效的索引項(xiàng) (或者換言之,這個(gè)索引項(xiàng)為這個(gè)對象而創(chuàng)建)。
 
       可選的,ctags 能夠?yàn)槎喾N程序語言文件的語言對象信息生成可讀格式的交叉索引列表。
 
       標(biāo)簽索引文件被多種編輯器支持。這些編輯器允許用戶通過出現(xiàn)在源文件中的名字定位對象,并且跳轉(zhuǎn)到
       定義這個(gè)名字的文件和行。在這個(gè)版本發(fā)布時(shí),我們所知的編輯器包括:
 
           Vi(1)及其變種(例如,Elvis, Vim, Vile, Lemmy), CRiSP, Emacs, FTE (Folding Text Editor),
           JED, jEdit, Mined, NEdit (Nirvana Edit), TSE (The SemWare Editor), UltraEdit, WorkSpace,
           X2, Zeus
 
       Ctags可以為許多種不同的程序語言產(chǎn)生不同類型的標(biāo)簽。要獲得完整的程序語言支持列表、它們被識(shí)別
       的名字、為它們所產(chǎn)生的標(biāo)簽的的類型,請見 --list-languages 和 --list-kinds 選項(xiàng)。
 
 
 
SOURCE FILES
       除非定義了 --language-force 選項(xiàng),每個(gè)源文件的語言類型將根據(jù)文件名到程序語言名的映射自動(dòng)選擇。
       每種程序語言的映射可以通過 --list-maps 選項(xiàng)查看,并且可以通過 --langmap 選項(xiàng)修改。在支持的平
       臺(tái)上,如果文件的名字沒有映射到一種程序語言并且這個(gè)文件是可執(zhí)行的,將檢查文件的第一行,看該文
       件是不是一種可識(shí)別編程語言的 "#!" 腳本。
       缺省的,所有其它文件都被忽略。這允許在一個(gè)目錄的所有文件上執(zhí)行 ctags (例如,"ctags *" ),或
       在整個(gè)源代碼目錄樹的所有文件上執(zhí)行 ctags (例如,"ctags -R")。因?yàn)橹挥心切┪募挥成涞揭环N
       程序語言的文件才會(huì)被掃描。
 
       [ .h 擴(kuò)展名的文件被映射為 C++ 文件而不是 C 文件的原因是 .h 擴(kuò)展名也應(yīng)用于 C++ 語言,并且把它
         當(dāng)做 C++ 文件對待并沒有害處]
 
 
 
OPTIONS
       盡管擁有大量的選項(xiàng),ctags 設(shè)置了缺省值 (適合多數(shù)情況),因此通常不帶任何選項(xiàng)來執(zhí)行 ctags (例
       如,ctags *,或ctags -R),這將為當(dāng)前目錄下所有可識(shí)別的源文件生成一個(gè)標(biāo)簽文件。下面提供的選項(xiàng)
       僅僅為了在有特殊需要時(shí)允許用戶自定義。
 
       需注意,用來分隔單字母選項(xiàng)和它們參數(shù)的空格是可選的。
 
       同樣需注意,長格式選項(xiàng)的布爾型參數(shù) (那些以 "--" 開頭并且?guī)?"[=yes|no]" 參數(shù)的選項(xiàng)) 可以被省
       略,在這種情況下隱含為 "=yes" ,而 "=0" 和 "=off" 被認(rèn)為是 "=no" 。
 
       某些選項(xiàng)在以 etags 模式運(yùn)行時(shí)或被忽略,或會(huì)起作用 (見 -e 選項(xiàng))。這樣的選項(xiàng)會(huì)特殊注明。
 
       絕大多數(shù)選項(xiàng)可以出現(xiàn)在命令行的任意位置,只影響在該選項(xiàng)后面的文件。然而,少數(shù)選項(xiàng)必須出現(xiàn)在第
       一個(gè)文件名之前,這樣的選項(xiàng)也會(huì)特殊注明。
       帶程序語言名字的選項(xiàng)允許名字是大寫或小寫。見 --list-languages 選項(xiàng),以獲得內(nèi)建程序語言名的完
       整列表。
 
 
       -a   等同于 --append
 
 
       -B   使用向上查找的模式 (例如 ?pattern?)。 [在 etags 模式中忽略]
 
 
       -e   使能 etags 模式,這將創(chuàng)建 Emacs 編輯器使用的標(biāo)簽文件。可選的,如果包含 "etags" 調(diào)用
            ctags 時(shí) (通過重命名,或者創(chuàng)建符號(hào)鏈接到可執(zhí)行文件的方式),會(huì)使能 etags 模式。這個(gè)選項(xiàng)
            必須出現(xiàn)在第一個(gè)文件名之前。
 
 
       -f tagfile
            使用所指定的 tagfile 做為標(biāo)簽文件的名字 (缺省是 "tags",或 "TAGS" 當(dāng)以etags模式運(yùn)行時(shí))。
            如果 tagfile 被定義成 "-",那么標(biāo)簽文件被輸出到標(biāo)準(zhǔn)輸出。如果 tagfile 存在并且它的第一
            行不是有效的標(biāo)簽行時(shí),ctags 將拒絕執(zhí)行。如果你錯(cuò)誤的輸入了 "ctags -f *.c",這會(huì)救你一命,
            不然它會(huì)把其它文件所產(chǎn)生的標(biāo)簽覆蓋到你的第一個(gè) C 文件! ctags 也會(huì)拒絕接受以一個(gè) "-" (減
            號(hào))開頭的文件名,因?yàn)檫@很可能是你忘記輸入標(biāo)簽文件的名字,而本選項(xiàng)試圖把它后面的選項(xiàng)做為
            文件名。如果你真的想把你的輸出標(biāo)簽文件名命名為 "-ugly",把它定義成 "./-ugly"。這個(gè)選項(xiàng)
            必須出現(xiàn)在第一個(gè)文件名之前。如果這個(gè)選項(xiàng)出現(xiàn)多次,只有最后一個(gè)生效。
 
 
       -F   使用向下查找的模式 (例如 /pattern/) (缺省)。 [在 etags 模式中忽略]
 
 
       -h list
            定義一個(gè)文件擴(kuò)展名列表,以句號(hào)分隔,這些文件將做為包含文件(或頭文件)被解析。要指定沒有
            擴(kuò)展名的文件,用一個(gè)句號(hào),后面不跟句號(hào)以外的字符 (例如,".","..x",".x.")。這個(gè)選項(xiàng)只
            影響如何解析一種特定類型的標(biāo)簽的作用域 (也就是說,這些標(biāo)簽是全局可見,還是這些標(biāo)簽只在
            定義它們的文件中可見);它并不把這些擴(kuò)展名映射到任何特定的程序語言。任何位于非頭文件中的
            標(biāo)簽,如果不能被另外一個(gè)文件可見 (例如,鏈接到另外一個(gè)文件),那么它的作用域被認(rèn)為局限于
            該文件 (例如,static)。在頭文件中的所有類型的標(biāo)簽,它的作用域都不會(huì)被認(rèn)為局限于該文件。
            如果列表中的第一個(gè)字符是加號(hào),那么該列表中的擴(kuò)展名將被加到現(xiàn)有列表之后;否則,該列表將
            替換現(xiàn)有列表。另外,參見 --file-scope 選項(xiàng)。缺省的列表是 ".h.H.hh.hpp.hxx.h++.inc.def"。
            要恢復(fù)缺省列表,使用 -h default。注意,如果此選項(xiàng)指定的一個(gè)擴(kuò)展名還沒有被映射到一種特定
            的程序語言 (見上面的 SOURCE FILES),你也需要使用 --langmap 或 --language-force 選項(xiàng)。
 
 
       -I identifier-list
            定義一個(gè)標(biāo)識(shí)符列表,在解析 C 和 C++ 源文件時(shí)會(huì)對這些標(biāo)識(shí)符進(jìn)行特殊的處理。這個(gè)選項(xiàng)主要
            用來處理由于編譯預(yù)處理宏的使用而引發(fā)的特殊情況。當(dāng)列出的標(biāo)識(shí)符是簡單的標(biāo)識(shí)符時(shí),這些標(biāo)
            識(shí)符在解析源文件時(shí)會(huì)被忽略。如果一個(gè)標(biāo)識(shí)符以 "+" 字符做為結(jié)尾,ctags 將忽略源文件中緊跟
            在此標(biāo)識(shí)符后的被括號(hào)括起來的參數(shù)列表。如果兩個(gè)標(biāo)識(shí)符以 "=" 字符分隔,在解析時(shí),第一個(gè)標(biāo)
            識(shí)符將被第二個(gè)標(biāo)識(shí)符所替代。標(biāo)識(shí)符列表可以直接在命令行上提供,也可以從一個(gè)單獨(dú)的文件中
            讀出。如果 identifier-list 的第一個(gè)字符是 "@",".",或目錄分隔符 ("/" 或 "\"), 或前兩個(gè)
            字符是驅(qū)動(dòng)器的盤符 (例如,"C:"),identifier-list 參數(shù)將被解釋為一個(gè)文件名,從這個(gè)文件中
            讀取標(biāo)識(shí)符列表,每行一個(gè)標(biāo)識(shí)符。否則,identifier-list 是需要被特殊處理的標(biāo)識(shí)符的列表
            (或一組標(biāo)識(shí)符對的列表),每一個(gè)標(biāo)識(shí)符被逗號(hào)或空格分開,(如果以空格分隔,需要用引號(hào)把整個(gè)
            列表括起來,以使整個(gè)列表做為一個(gè)命令行參數(shù))。可以使用多個(gè) -I 選項(xiàng)。要清除已定義的標(biāo)識(shí)符
            列表,以 "-" 做為 identifier-list 參數(shù)。
 
            這個(gè)特性在編譯預(yù)處理宏的出現(xiàn)會(huì)導(dǎo)致句法混淆的時(shí)候非常有用。實(shí)際上,這是解決源文件中干擾
            語法的宏所引發(fā)的問題的最好辦法 (見下面的 CAVEATS)。下面的例子詳細(xì)描述這點(diǎn)。
 
               int foo ARGDECL4(void *, ptr, long int, nbytes)
 
 
            在上面的例子中,宏 "ARGDECL4" 將被錯(cuò)誤的解釋為函數(shù)的名字,而不是正確的名字 "foo"。定義
            -I ARGDECL4 會(huì)獲得正確的結(jié)果。
 
               /* creates an RCS version string in module */
               MODULE_VERSION("$Revision: 1.41 ___FCKpd___0quot;)
 
 
            在上面的例子,宏定義看起來非常像一個(gè)函數(shù)的定義,因?yàn)樗鼪]有以分號(hào)結(jié)尾 (實(shí)際上,它后面甚
            至還可以跟一個(gè)全局變量定義,這樣看起來更像一個(gè) K&R 風(fēng)格的函數(shù)參數(shù)定義)。實(shí)際上,在試圖
            完成這個(gè)看起來像函數(shù)的定義時(shí),可能會(huì)導(dǎo)致文件的其它部分被跳過。定義 -I MODULE_VERSION+
            可以避免這樣的問題。
 
               CLASS Example {
                   // your content here
               };
 
 
            上面的例子使用了 "CLASS" 做為預(yù)處理宏,它在不同的平臺(tái)上被擴(kuò)展為不同的東西。例如,在
            Win32 平臺(tái)上它可能被定義為 "class  __declspec(dllexport)",而在 UNIX 上簡單的被定義為
            "class"。通常,沒有 C++ 的 "class" 關(guān)鍵字將導(dǎo)致源文件被錯(cuò)誤的解析。定義 -I CLASS=class
            能夠得到正確的結(jié)果。
 
 
       -L file
            在文件 file 中讀取需要產(chǎn)生標(biāo)簽文件的文件列表。如果 file 被指定為 "-",那么文件列表由標(biāo)
            準(zhǔn)輸入上讀取。通過這個(gè)選項(xiàng)讀到的文件將在命令行上給出的文件之后被處理。輸入中的選項(xiàng)也會(huì)
            被接受 (*1)。如果此選項(xiàng)被定義多次,只使用最后一個(gè)。注意:file 以行的方式被讀取,只以換
            行符做為分隔符,空格被認(rèn)為是有意義的,這是為了支持文件名中包含空格的情況;如果輸入中包
            含選項(xiàng),這會(huì)影響選項(xiàng)如何被解析 (*2)。
 
 
       -n   同 --excmd=number。
 
 
       -N   同 --excmd=pattern。
 
 
       -o tagfile
            同 -f tagfile。
 
 
       -R   同 --recurse。
 
 
       -u   同 --sort=no (也就是 "unsorted",不排序)。
 
 
       -V   同 --verbose。
 
 
       -w   此選項(xiàng)被悄悄忽略。僅為兼容 SVR4 Unix 的 ctags。
 
 
       -x   打印一個(gè)表格形式的、可讀的交叉索引 (xref) 文件到標(biāo)準(zhǔn)輸出,而不是產(chǎn)生一個(gè)標(biāo)簽文件。輸出
            的信息包括:標(biāo)簽名字;標(biāo)簽類型;行號(hào),文件名和標(biāo)簽所定義行的內(nèi)容 (多余的空格被壓縮)。不
            會(huì)寫標(biāo)簽文件,并且所有影響標(biāo)簽文件輸出的選項(xiàng)都被忽略。這個(gè)特性的一個(gè)應(yīng)用實(shí)例是為源文件
            中定義的函數(shù)生成一個(gè)列表 (例如,ctags -x --c-kinds=f file),或?yàn)樵次募兴型獠靠梢娙?br>            局變量生成一個(gè)列表 (例如,ctags -x --c-kinds=v --file-scope=no file)。這個(gè)選項(xiàng)必須出現(xiàn)
            在第一個(gè)文件名之前。
 
 
       --append[=yes|no]
            指明為指定文件生成的標(biāo)簽是增加到標(biāo)簽文件已存在內(nèi)容的后面,還是替換它們。此選項(xiàng)缺省關(guān)閉。
            這個(gè)選項(xiàng)必須出現(xiàn)在第一個(gè)文件名之前。
 
 
       --etags-include=file
            在標(biāo)簽文件中包含一個(gè)到 file 的引用。此選項(xiàng)可以被指定任意多次。這個(gè)選項(xiàng)支持 Emacs 在一個(gè)
            標(biāo)簽文件中包含另外一個(gè)標(biāo)簽文件的功能。[只在 etags 模式中有效]
 
 
       --exclude=[pattern]
            將 pattern 加到排除文件/目錄列表中。這個(gè)選項(xiàng)可以被指定任意多次。對每一個(gè) ctags 處理的文
            件名,都會(huì)把該文件的完整路徑 (例如,some/path/base.ext) 以及文件名 (例如,base.ext) 與
            此選項(xiàng)定義的每個(gè) pattern 進(jìn)行比較,這允許 pattern 只匹配一個(gè)給定的文件名而不管其路徑,
            或者只匹配一個(gè)指定的路徑。如果你所用的 C 編譯器的運(yùn)行庫支持,那么 pattern 中可以包含
            Unix 上通用的 shell 通配符 (不是正則表達(dá)式) (確保把這個(gè)選項(xiàng)的參數(shù)用引號(hào)括起來,以保證通
            配符在傳給 ctags 之前不會(huì)被 shell 擴(kuò)展;另外,要知道通配符可以匹配 "/" 字符)。 你可以通
            過檢查 --version 選項(xiàng)的輸出來確定在你的平臺(tái)上 shell 通配符是否可用,(如果可用,) 在編譯
            的特性表中將包含 "+wildcards";否則將通過簡單的文本比較來檢查 pattern 與文件名的匹配。
 
            如果 pattern 以字符 "@" 開始,那么剩余的字符串將被解釋成一個(gè)文件的名字,由此文件中讀取
            排除模式字串,每行一個(gè)。如果 pattern 為空,排除列表將被清空。注意,在程序啟動(dòng)時(shí),缺省的
            排除列表包含"EIFGEN","SCCS","RCS",和"CVS",這些是在處理 --recurse 選項(xiàng)時(shí)不想意外進(jìn)入
            的目錄名。
 
 
       --excmd=type
            定義在源文件中定位標(biāo)簽時(shí)所用的 EX 命令的類型。[在 etags 模式中忽略]
 
            type 的有效值為 (用整個(gè)單詞或用第一個(gè)字母都可以):
 
 
            number   在標(biāo)簽文件中只使用行號(hào)來定位標(biāo)簽。這有4個(gè)優(yōu)點(diǎn):
                     1.  明顯減小最終標(biāo)簽文件的大小。
                     2.  消除因?yàn)槎x標(biāo)簽的行被修改而導(dǎo)致使用 pattern 查找標(biāo)簽失敗的情況,導(dǎo)致模式
                         匹配失敗 (注意,有些編輯器,例如vim, 夠在很多這樣的情況中恢復(fù))。
                     3.  消除在查找雷同的匹配時(shí),找到不正確的源碼行的情況 (見下面的 BUGS)。
                     4.  在標(biāo)簽文件中為內(nèi)容相同的行保留多個(gè)不同的表項(xiàng)。在 pattern 模式,重復(fù)的表項(xiàng)
                         被丟棄,因?yàn)樗鼈儺a(chǎn)生的查找字串是相同的,保存重復(fù)的表項(xiàng)沒有意義。
 
 
                     但是,這個(gè)選項(xiàng)有一個(gè)顯著的缺點(diǎn):對源文件的更改會(huì)導(dǎo)致標(biāo)簽文件中的行號(hào)記錄不再對
                     應(yīng)源文件的行號(hào),導(dǎo)致跳轉(zhuǎn)到某些標(biāo)簽時(shí)偏離標(biāo)簽定義位置一行或多行。大體上講,這個(gè)
                     選項(xiàng)最好用在那些不打算更改的源文件上。選擇這個(gè)選項(xiàng)導(dǎo)致下面的選項(xiàng)被忽略:-BF。
 
 
            pattern  對所有標(biāo)簽只使用搜索字串,與行號(hào)不同,行號(hào)通常用于宏定義。優(yōu)點(diǎn)是標(biāo)簽文件產(chǎn)生后,
                     增加或刪除行不會(huì)引用 到舊的行號(hào)。
 
 
            mixed    在這個(gè)模式,除少數(shù)例外,通常都使用搜索字串。對 C 語言,行號(hào)用于宏定義標(biāo)簽。這
                     是原始的 ctags 生成的缺省格式,因此,保留這個(gè)選項(xiàng)的缺省值。對 Fortran,common
                     塊使用行號(hào),因?yàn)樗鼈兊脑创a行通常都相同,使搜索模式在查找所有匹配時(shí)沒有用處。
 
 
       --extra=[+|-]flags
            指定是否為特定類型的信息增加額外的標(biāo)簽條目。flags 參數(shù)是一組單字母標(biāo)記,每個(gè)代表標(biāo)簽文
            件中的一種額外的標(biāo)簽條目。如果 flags 前帶 "+" 或 "-" 字符,會(huì)向當(dāng)前生效的標(biāo)記中加入,或
            刪除這些標(biāo)記。否則 flags 替代當(dāng)前的設(shè)置。每個(gè)標(biāo)記的含義如下:
 
 
 
               f   為每個(gè)源文件的文件名包含一個(gè)條目 (例如,"example.c"),它定位到文件的第一行。
 
               q   為每個(gè)類成員包含一個(gè)額外的類修飾符條目 (為那些支持這類信息的編程語言;當(dāng)前包括
                   C++, Eiffel 和 Java)。修飾符標(biāo)簽的實(shí)際格式取決于定義該標(biāo)簽的語言 (使用這種語言中
                   修飾符被定義的那種格式)。對 C++來說,格式為 "class::member";對 Eiffel 和 Java,
                   格式為 "class.member"。當(dāng)標(biāo)簽文件中一個(gè)標(biāo)簽的名字出現(xiàn)多次時(shí),這將更容易的定位到
                   特定的標(biāo)簽。然而需注意,這有可能使標(biāo)簽文件的大小不止增加一倍。
 
 
       --fields=[+|-]flags
            定義標(biāo)簽文件表項(xiàng)中的有效擴(kuò)展字段 (見下面的 TAG FILE FORMAT,以獲得更多信息)。flags 參數(shù)
            是一組單個(gè)字母標(biāo)記, 每一個(gè)代表一種類型的擴(kuò)展字段,具有如下含義 (缺省為禁用,除非下面有
            注明):
 
 
               a   類成員的訪問控制信息
               f   作用域局部于文件 [使能]
               i   (關(guān)于)繼承的信息
               k   使用一個(gè)字符表示的標(biāo)簽類型 [使能]
               K   標(biāo)簽類型的完整名稱
               l   包含該標(biāo)簽的源文件的編程語言類型
               m   (關(guān)于)實(shí)現(xiàn)的信息
               n   標(biāo)簽出現(xiàn)的行號(hào)
               s   標(biāo)簽的范圍 [使能]
               S   函數(shù)的指紋 (例如,原型或參數(shù)列表)
               z   在 kind 字段中包含 "kind:" 關(guān)鍵字
               t   把變量或 typedef 的類型和名字做為 "typeref:" 字段 [使能] (*3)
 
            每個(gè)字母或字母組合的前面可以為 "+" ,表示將它加到缺省集合,或者為 "-",表示排除它。如果
            既沒有 "+" 前綴也沒有 "-"前綴,只有在 flags 中明確列出的類型被包含在輸出中 (也就是說,
            覆蓋缺省集合)。如果 --format=1 選項(xiàng)定義了,此選項(xiàng)被忽略。此選項(xiàng)缺省值為 "fkst"。
 
 
       --file-scope[=yes|no]
            指明作用域只在一個(gè)文件的標(biāo)簽 (即只在定義它們的文件中可見,不能被其它文件見到的標(biāo)簽,例
            如 "static" 的標(biāo)簽) 是否被包含在輸出中。又見 -h 選項(xiàng)。這個(gè)選項(xiàng)缺省使能。
 
 
       --filter[=yes|no]
            使 ctags 表現(xiàn)的像一個(gè)過濾器,由標(biāo)準(zhǔn)輸入讀取文件的名字,并一個(gè)文件接一個(gè)文件的輸出它們的
            標(biāo)簽。如果 --sorted 選項(xiàng)使能,只對文件內(nèi)定義的標(biāo)簽排序。文件由標(biāo)準(zhǔn)輸入上按行讀入 (見 -L
            選項(xiàng)的備注 ),并且這些文件在命令行及 -L 選項(xiàng)指定的文件之后處理。本選項(xiàng)使能時(shí), -f,-o
            和 --totals 選項(xiàng)被忽略。這個(gè)選項(xiàng)太過高深,缺省為禁用。這個(gè)選項(xiàng)必須出現(xiàn)在第一個(gè)文件名之前。
 
 
       --filter-terminator=string
            在 --filter 選項(xiàng)使能時(shí),定義一個(gè)字符串,在一個(gè)文件的標(biāo)簽解析完后,會(huì)打印這個(gè)字符串到標(biāo)
            準(zhǔn)輸出。這允許讀取 ctags 輸出的應(yīng)用程序能夠確定一個(gè)文件的輸出在什么時(shí)候結(jié)束。注意,如果
            讀入文件名是一個(gè)目錄,并且 --recurse 選項(xiàng)使能,這個(gè)字符串只在該目錄中的所有標(biāo)簽之后輸出
            一次。這個(gè)字符串總是被文件的最后一個(gè)標(biāo)簽的換行符隔開。這個(gè)選項(xiàng)太過高深,缺省為空。這個(gè)
            選項(xiàng)必須出現(xiàn)在第一個(gè)文件名之前。
 
 
       --format=level
            改變輸出標(biāo)簽文件的格式。當(dāng)前有效的 level 只有 1 或 2。級別1指定原始的標(biāo)簽文件格式,級別2
            指定一種新的擴(kuò)展格式,里面包含擴(kuò)展字段 (但使用了一種手段,使之仍后向兼容原始的 vi(1) 實(shí)
            現(xiàn))。缺省的級別為 2。這個(gè)選項(xiàng)必須出現(xiàn)在第一個(gè)文件名之前。 [在 etags 模式中忽略]
 
 
       --help
            向標(biāo)準(zhǔn)輸出打印一個(gè)詳細(xì)用法描述,然后退出。
 
 
       --if0[=yes|no]
            指定是否對于 "#if 0" 編譯預(yù)處理分支中的非宏標(biāo)簽進(jìn)行檢查 (宏標(biāo)簽總被包含)。因?yàn)檫@種構(gòu)造
            是為了禁用代碼,所以此選項(xiàng)的缺省值為 no。注意,這只是指明一種偏好,并不能保證在 "#if 0"
            分支中的代碼真的被跳過,因?yàn)楫a(chǎn)生標(biāo)簽的算法會(huì)在編譯預(yù)處理?xiàng)l件太復(fù)雜時(shí)會(huì)解析條件編譯的每
            一個(gè)分支。
 
 
       --<LANG>-kinds=[+|-]kinds
            為特定的編程語言指定一個(gè)與語言相關(guān)的標(biāo)簽種類 (或類型) 的列表,這些內(nèi)容會(huì)被包含在輸出文
            件中,在這里 <LANG> 不區(qū)分大小寫,并且是內(nèi)建語言名的一種 (見 --list-languages 選項(xiàng)以獲
            得完整列表)。kinds 參數(shù)是一組單字母標(biāo)記,用來指明 (特定于這種語言的) 標(biāo)簽類型是包含在輸
            出中,還是不包含。這些特定標(biāo)記集基于每種程序語言被識(shí)別,它們的含義以及缺省值可以由
            --list-kinds 選項(xiàng)列出。每個(gè)字母或組合可以以 "+" 做前綴,表示在缺省值中加入它,或者以 "-"
            做前綴,表示在缺省值中排除它。如果不以 "+" 或 "-" 為前綴,只有在 kinds 中明確列出的類型
            被包含在輸出中 (就是說,覆蓋這種編程語言的缺省值)。
 
            做為 C 語言的一個(gè)例子,要想在缺省標(biāo)簽類型中加入函數(shù)原型和外部變量定義,但是排除宏定義,
            使用 --c-kinds=+px-d;要想只包含函數(shù)的標(biāo)簽,使用 --c-kinds=f。
 
 
       --langdef=name
            定義一種新的用戶自定義語言,name,使用正則表達(dá)式進(jìn)行解析。一旦被定義,name 可以在其它使
            用程序語言名字的選項(xiàng)中被使用。這個(gè)選項(xiàng)的典型用法是,先定義這種語言,然后使用 --langmap
            把文件名映射到它,最后使用 --regex-<LANG> 定義它的標(biāo)簽如何被解析。
 
 
       --langmap=map[,map[...]]
            控制文件名如何被映射到程序語言 (見 --list-maps 選項(xiàng))。每個(gè)以逗號(hào)分隔的映射中,包含語言
            的名字 (內(nèi)建語言或用戶自定義語言),一個(gè)冒號(hào),以及一個(gè)文件擴(kuò)展名和/或文件名模式的列表。
            要定義一個(gè)文件擴(kuò)展名,在此擴(kuò)展名前加上句號(hào) (例如,".c")。要定義一個(gè)文件名模式,把這個(gè)模
            式用括號(hào)括起來 (例如,"([Mm]ake-file)")。如果你的 C 編譯器的運(yùn)行庫支持,那么文件名模式
            中可以包含 Unix 中通用的 shell 通配符 (確保用引號(hào)把參數(shù)括起來,以保護(hù)通配符在傳給 ctags
            之前不會(huì)被 shell 擴(kuò)展)。 你可以通過檢查 --version 選項(xiàng)的輸出來確定在你的平臺(tái)上 shell 通
            配符是否可用,(如果可用,) 在編譯的特性表中將包含 "+wildcards";否則將通過簡單的文本比
            較來檢查文件名模式與文件名的匹配。要映射一個(gè) (已經(jīng)使用的) 文件擴(kuò)展名,首先要取消它與其
            它語言的映射關(guān)系。
 
            如果映射的第一個(gè)字符是一個(gè) "+",那么這個(gè)映射中的擴(kuò)展名和文件名模式將加到這種語言的當(dāng)前
            映射中;否則,這個(gè)映射將替換當(dāng)前映射。例如,為了指定只有擴(kuò)展名為 .c 和 .x 的文件被當(dāng)做
            C 語言文件,使用 "--langmap=c:.c.x";想同時(shí)把擴(kuò)展名為 .j 的文件加到 Java 語言文件,定義
            "--langmap=c:.c.x,java:+.j"。為了把 makefiles (例如,文件名為 "Makefile","makefile",
            或具有擴(kuò)展名 ".mak") 映射到一種稱為 "make" 的語言,定義 "--langmap=make:([Mm]akefile).mak"。
            想映射沒有擴(kuò)展名的文件,定義一個(gè)句號(hào),后面不包含句號(hào)以外字符 (例如,".","..x",".x.")。
            想要為一種特定的語言清除映射 (這會(huì)防止自動(dòng)為這個(gè)語言生成標(biāo)簽),定義一個(gè)空的擴(kuò)展名列表
            (例如, "--langmap=fortran:")。想為特定的語言恢復(fù)缺省的映射,將映射定義為default。想為
            所有的語言恢復(fù)缺省的映射,定義 "--langmap=default"。
            注意,在判別文件的程序語言時(shí),文件擴(kuò)展名先于文件名模式被判斷。
 
 
       --language-force=language
            缺省的,ctags 自動(dòng)為一個(gè)源文件選擇語言,忽略那些不能確定程序語言的文件 (見上面的 SOURCE
            FILES)。這個(gè)選項(xiàng)強(qiáng)制把每個(gè)文件做為指定程序語言 (不區(qū)分大小寫;內(nèi)建或用戶自定義) 的文件,
            而不是根據(jù)它們的擴(kuò)展名自動(dòng)為其選擇語言類型。另外,特殊值 auto 表示語言類型應(yīng)該被自動(dòng)選
            擇 (這否決的本選項(xiàng)的有效方法)。
 
 
       --languages=[+|-]list
            定義一個(gè)語言列表,將為這些語言產(chǎn)生標(biāo)簽,list 包含一個(gè)逗號(hào)分隔的語言名列表 (不區(qū)分大小寫;
            內(nèi)建或用戶自定義)。如果列表的第一個(gè)語言前面不是 "+" 或 "-" 字符,在向列表增加或從列表刪
            除語言前,會(huì)先清空當(dāng)前列表。列表的每個(gè)語言都將加入列表,直到遇到一個(gè) "-"。因?yàn)?"+" 或
            "-" 都可以在列表中出現(xiàn),在這兩個(gè)符號(hào)后面的語言就相應(yīng)被加到列表,或從列表中去掉。這樣,
            使用一個(gè)新的列表替換當(dāng)前列表,或者從當(dāng)前列表中增加或刪除語言都變得很簡單。實(shí)際會(huì)生成標(biāo)
            簽的文件列表取決于生效的語言擴(kuò)展名映射 (見 --langmap 選項(xiàng))。注意,所有的語言,包括用戶
            自定義的語言,(缺省)都是使能的,除非使用本選項(xiàng)禁止。列表中的語言名可以是任何內(nèi)建語言或
            一個(gè)先前被 --langdef 選項(xiàng)定義的語言。缺省值為 "all",這也是一個(gè)可被接受的參數(shù)。見
            --list-languages 選項(xiàng)以獲得一個(gè)完整的內(nèi)建語言名稱。
 
 
       --license
            向標(biāo)準(zhǔn)輸出打印軟件許可證信息,然后退出。
 
 
       --line-directives[=yes|no]
            定義 "#line" 操作符是否應(yīng)該被識(shí)別。它們存在于預(yù)處理器的輸出中,包括行號(hào),可能還包括生成
            這個(gè)預(yù)處理輸出的源文件的名字。當(dāng)選項(xiàng)使能時(shí),ctags 會(huì)生成標(biāo)簽項(xiàng)目,將使用源文件的文件名
            和行號(hào),而不是它們在預(yù)處理器輸出中的位置。標(biāo)簽文件中的實(shí)際文件名將和預(yù)處理器輸出文件具
            有同樣的路徑,這是因?yàn)樗僭O(shè)原始文件的位置相對于預(yù)處理器輸出文件 (當(dāng)然,除非 #line 操作
            符定義的是絕對路徑)。這個(gè)選項(xiàng)缺省關(guān)閉。注意:這個(gè)選項(xiàng)通常在和 --excmd-number (-n) 選項(xiàng)
            一起使用才比較有用。你也需要使用 --langmap 或 --language-force 選項(xiàng),如果 ctags 不能識(shí)
            別預(yù)處理器輸出文件的擴(kuò)展名的話。
 
 
       --links[=yes|no]
            指示是否跟蹤符號(hào)鏈接 (如果系統(tǒng)支持符號(hào)鏈接的話)。在禁止時(shí),符號(hào)鏈接被忽略。這個(gè)選項(xiàng)缺省
            打開。
 
 
       --list-kinds[=language|all]
            列出指定語言或全部語言所能夠識(shí)別的標(biāo)簽種類,然后退出。在標(biāo)簽文件中,每個(gè)種類的標(biāo)簽都用
            一個(gè)單字母的標(biāo)記來表示,它也用于 --<LANG>-kinds 選項(xiàng),用以過濾在輸出中所包含的標(biāo)簽種類。
            注意,有些語言和/或標(biāo)簽種類可能用正則表達(dá)式來實(shí)現(xiàn),如果正則表達(dá)式支持沒有編譯到 ctags
            中,可能無法支持 (見 --regex-<LANG> 選項(xiàng))。列出的每個(gè)種類都是使能的,除非后面跟有 "[off]"。
 
 
       --list-maps[=language|all]
            列出指定的語言或全部語言的文件擴(kuò)展名和文件名模式,然后退出。這些擴(kuò)展名以及文件名模式把
            一個(gè)文件與特定程序語言相關(guān)聯(lián)。見上面的 --langmap 選項(xiàng),以及 SOURCE FILES。
 
 
       --list-languages
            列出 ctags 能夠識(shí)別的程序語言名,然后退出。這些程序語言名稱不區(qū)分大小寫,可以用在
            --language-force,--languages,--<LANG>-kinds 和--regex-<LANG> 選項(xiàng)。
 
 
       --options=file
            從 file 中讀取附加選項(xiàng)。做為一種特殊情形,如果 --options=NONE 做為命令行的第一個(gè)選項(xiàng),
            它將禁止自動(dòng)從文件或環(huán)境變量 (見 FILES) 中讀取任何配置選項(xiàng)。
 
 
       --recurse[=yes|no]
            遞歸進(jìn)入文件列表中所遇到的目錄。如果給出的文件列表為空,并且沒有使用 -L 指定文件列表,
            那么當(dāng)前目錄被使用 (也就是 ".")。符號(hào)鏈接將被跟蹤。如果你不喜歡這樣的處理,或者顯式的指
            定文件列表,或者通過管道將 find(1) 的輸出傳給 "ctags -L-"。注意,這個(gè)選項(xiàng)當(dāng)前并不能支持
            所有的平臺(tái)。如果 --help 選項(xiàng)的輸出中包含本選項(xiàng),說明它可用。又見 --exclude 選項(xiàng),以限制
            遞歸行為。
 
 
       --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
            /regexp/replacement/ 定義一個(gè)正則表達(dá)式的替換串,與 sed 的 substitution 命令風(fēng)格類似,
            使用它為映射到 <LANG> 語言 (不區(qū)分大小寫;內(nèi)建程序語言,或用戶自定義程序語言) 的源文件
            產(chǎn)生標(biāo)簽。正則表達(dá)式 regexp 定義一個(gè)擴(kuò)展正則表達(dá)式 (主要為 egrep(1) 所用),它用來定位包
            含標(biāo)簽的一個(gè)源碼行,使用 \t 來定義 tab 字符。當(dāng)一個(gè)匹配行被發(fā)現(xiàn),將會(huì)生成一個(gè)名為
            replacement 的標(biāo)簽,replacement 通常會(huì)包含特殊的前向引用 \1 到 \9,以引用 regexp 中的子
            表達(dá)式。選項(xiàng)參數(shù)中的 "/" 分隔字符實(shí)際上可以換成任何字符。注意,不管使用哪個(gè)分隔符,如果
            它在參數(shù)中不做分隔用,必須使用 "\" 字符對其進(jìn)行轉(zhuǎn)義。
            本選項(xiàng)定義的正則表達(dá)式會(huì)被添加到這種語言當(dāng)前的正則表達(dá)式列表中,除非省略選項(xiàng)參數(shù),這種
            情況當(dāng)前列表會(huì)被清空。
            除非由 flags 做出更改,否則 regexp 被作為 Posix 擴(kuò)展正則表達(dá)式解析。對于每個(gè)匹配行,
            replacement 應(yīng)該被擴(kuò)展為一個(gè)非空字符串,不然的話會(huì)產(chǎn)生一條告警信息。一個(gè)可選的標(biāo)簽類型
            定義可以跟在 replacement 后面,它用來指定在標(biāo)簽的 "kind" 擴(kuò)展字段里寫入的類型 (見下面的
            TAG FILE FORMAT)。kind-spec 的完整格式是一個(gè)單個(gè)字母,一個(gè)逗號(hào),一個(gè)名字 (不包含空格),
            一個(gè)逗號(hào),一個(gè)描述,后面跟分隔符,這個(gè)格式定義了類型及其文本描述的長、短形式 (使用
            --list-kinds 可以顯示出來)。類型的名字和/或類型的描述可以被省略。如果 kind-spec 被省略,
            它的缺省值為 "r,regex"。最后,flags 是一個(gè)或多個(gè)單字母字符,對 regexp 的解析有下列影響:
 
 
 
               b   此模式被解析為 Posix 的基本正則表達(dá)式
 
               e   此模式被解析為 Posix 的擴(kuò)展正則表達(dá)式 (缺省)
 
               i   此模式以忽略大小寫的方式被應(yīng)用
 
            注意,這個(gè)選項(xiàng)只在 ctags 編譯時(shí)加入正則表達(dá)式支持時(shí)才有效,這取決于你所用的平臺(tái)。你可通
            過檢查 --version 選項(xiàng)的輸出,以確定編譯時(shí)是否加入正則表達(dá)式支持,(如果支持),輸出的編譯
            特性列表中將包含 "+regex"。
 
            欲獲得 ctags 使用的正則表達(dá)式的詳細(xì)信息,見 regex(5,7) 的手冊頁,或見 regex 的 GUU info
            文檔 (例如,"info regex")。
 
 
       --sort[=yes|no|foldcase]
            指明標(biāo)簽文件是否按標(biāo)簽名排序 (缺省為排序)。注意,原始的 vi(1) 要求排序標(biāo)簽。foldcase 指
            定不區(qū)分大小寫排序 (或大小寫合并排序)。
            對大小寫合并排序進(jìn)行快速二叉樹查找需要由使用標(biāo)簽文件的工具提供特殊支持,例如 ctags 的
            readtags 庫,或 Vim 6.2 以上版本 (使用 "set ignorecase")。這個(gè)選項(xiàng)必須出現(xiàn)在第一個(gè)文件
            名之前。[在 etags 模式中忽略]
 
 
       --tag-relative[=yes|no]
            指明標(biāo)簽文件中記錄的名字路徑應(yīng)該相對于標(biāo)簽文件所在的目錄,而不是相對于當(dāng)前目錄,除非命
            令行所指定的文件名使用絕對路徑。這個(gè)選項(xiàng)必須出現(xiàn)在第一個(gè)文件名之前。當(dāng)運(yùn)行在 etags 模式
            時(shí),缺省為 yes (見 -e 選項(xiàng)),否則缺省值為 no。
 
 
       --totals[=yes|no]
            打印在本次 ctags 運(yùn)行期間所讀入源文件以及所寫標(biāo)簽的統(tǒng)計(jì)信息。這個(gè)選項(xiàng)缺省關(guān)閉。這個(gè)選項(xiàng)
            必須出現(xiàn)在第一個(gè)文件名之前。
 
 
       --verbose[=yes|no]
            使能詳細(xì)模式。打印處理選項(xiàng)的信息,以及在 ctags 處理每個(gè)文件時(shí)打印一條簡潔的消息,描述采
            取什么樣的動(dòng)作。通常,ctags 在配置文件中的選項(xiàng) (見下面的 FILES) 以及 CTAGS 環(huán)境變量被讀
            入前,不會(huì)讀取命令行參數(shù)。然而,如果本選項(xiàng)是命令行的第一個(gè)選項(xiàng),它將在配置文件、CTAGS
            環(huán)境變量,以及命令行上的每個(gè)選項(xiàng)被讀入前生效。缺省值為 no。
 
 
       --version
            打印 ctags 的版本信息,然后退出。信息中始終包含字符串 "Exuberant Ctags"。
 
 
 
OPERATIONAL DETAILS
       在 ctags 依次處理每個(gè)文件時(shí),它試圖挨順序進(jìn)行以下三步測試來確定文件的程序語言類型:是否文件
       的擴(kuò)展名被映射到一種程序語言,是否文件名匹配一個(gè)映射到程序語言的 shell 模式,最后判斷是否該
       文件可執(zhí)行并且它的第一行使用 Unix 風(fēng)格的 "#!" 定義了一個(gè)解釋器 (如果平臺(tái)支持的話)。如果程序
       語言確定了,這個(gè)文件會(huì)被打開,接下來相應(yīng)的語言解析器被調(diào)用,以解析當(dāng)前打開的文件。解析器解析
       整個(gè)文件,并且在標(biāo)簽文件中為每個(gè)語言對象增加一個(gè)條目。見下面的 TAG FILE FORMAT,以獲得這些條
       目的詳細(xì)信息。
 
       這個(gè) ctags 實(shí)現(xiàn)不像舊有的實(shí)現(xiàn)那樣,對 C 代碼的格式有要求。舊的實(shí)現(xiàn)往往依賴特殊的預(yù)定格式來幫
       助它解決編譯預(yù)處理?xiàng)l件引發(fā)的困難。
 
       通常,ctags 試圖更巧妙的處理翻譯預(yù)處理操作符。如果在一條定義了標(biāo)簽的語句中遇到一個(gè)編譯預(yù)處理
       條件,ctags 只跟隨此條件的第一個(gè)分支 (除非第一分支是 "#if 0" ,在這種情況下,只跟隨剩下的唯
       一一條分支)。這樣做的原因是 (如果) 跟隨不只一條分支會(huì)導(dǎo)致語法不明確,就像下面例子:
 
              #ifdef TWO_ALTERNATIVES
              struct {
              #else
              union {
              #endif
                  short a;
                  long b;
              }
 
       不能同時(shí)跟隨兩個(gè)分支,否則括號(hào)會(huì)不匹配,ctags 將不能識(shí)別語法。
 
       由于這些條件很復(fù)雜,并且 (分支) 相互排斥,如果這種辦法不能正確的解析一個(gè)文件,ctags 將重新嘗
       試另一種不同的方法,這種方法不并選擇性的跟隨條件預(yù)處理分支,而是在 #if 條件分支導(dǎo)致大括號(hào)不
       匹配時(shí),通過位于第 1 列的大括號(hào) ("}") 來做為一個(gè)代碼塊結(jié)束的指示。
 
       Ctags 也嘗試對括在兩個(gè)圓括號(hào)中的參數(shù)列表進(jìn)行特殊處理,以接受下面這樣的條件結(jié)構(gòu):
 
              extern void foo __ARGS((int one, char two));
 
       任何緊挨著 "((" 的名字都被自動(dòng)忽略,而使用在它之前的名字。
 
       C++ 的運(yùn)算符定義會(huì)被特殊處理。為了對所有種類的運(yùn)算符 (重載或轉(zhuǎn)換) 保持一致,在標(biāo)簽文件中,所
       有運(yùn)算符的名字總是以 "operator " 為前綴 (也就是說,即使實(shí)際的運(yùn)算符定義被寫成 "operator<<")。
 
       在創(chuàng)建標(biāo)簽文件,或向標(biāo)簽文件中添加標(biāo)簽后,將根據(jù)標(biāo)簽的名字進(jìn)行排序,刪除相同的標(biāo)簽行。
 
 
 
TAG FILE FORMAT
       在不以 etags 模式運(yùn)行時(shí),標(biāo)簽文件中的每個(gè)表項(xiàng)占單獨(dú)的一行,通常每個(gè)看起來都如同這樣:
 
        tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
 
       字段以及分隔符定義如下:
 
           1.  標(biāo)簽名
           2.  單個(gè) tab 字符
           3.  文件名,這個(gè)標(biāo)簽對應(yīng)的對象在此文件中定義
           4.  單個(gè) tab 字符
           5.  在文件中定位此標(biāo)簽的 EX 命令;通常是一個(gè)搜索模式 (/pattern/ 或 ?pattern?) 或行號(hào) (見
               --excmd)。標(biāo)簽文件格式 2 (見 --format)
               在某些情況下擴(kuò)展了這個(gè) EX 命令,在緊挨著此 EX 命令后面的 EX 命令注釋里嵌入了一套擴(kuò)展
               字段 (在下面描述),這樣使它仍能向下兼容原始的 vi(1) 實(shí)現(xiàn)。
 
       基于內(nèi)部使用的目的,會(huì)向標(biāo)簽文件中寫入一些特殊的標(biāo)簽。這些標(biāo)簽的構(gòu)成使它們始終被排序到文件的
       最前面。因此,這些標(biāo)簽的前兩個(gè)字符被用做標(biāo)簽文件的幻數(shù),以確定正在寫入的是一個(gè)有效的標(biāo)簽文件,
       而不是一個(gè)源文件。
 
       注意,記錄在標(biāo)簽文件的每個(gè)源文件名,和命令行上定義的完全相同。因此,如果你在命令行上指定的是
       相對于當(dāng)前目錄的路徑的話,它們在標(biāo)簽文件中以同樣的方式被記錄。然而,見 --tag-relative 選項(xiàng),
       以更改此設(shè)置。
 
       如上所說,擴(kuò)展字段作為注釋增加在 EX 命令之后,是以 tab 字符分隔的 "關(guān)鍵字-值" 組合。這些 "關(guān)
       鍵字-值" 組合一般為 "key:value" 的格式。它們是否在標(biāo)簽文件中出現(xiàn),由 --fields 選項(xiàng)控制。可能
       的關(guān)鍵字以及它們值的含義見下:
 
 
       access      指明類成員的可見范圍,它的值特定于程序語言。
 
 
       file        指明此標(biāo)簽只在文件中可見。這個(gè)關(guān)鍵字沒有相應(yīng)的值。
 
 
       kind        指明標(biāo)簽的類型,或種類。它的值要么是上面 --<LANG>-kinds 選項(xiàng)所描述的相應(yīng)單字母標(biāo)
                   志,要么是全名。此字段的關(guān)鍵字部分允許被省略 (實(shí)際上,這是缺省設(shè)置)。由 --fields
                   選項(xiàng)控制它的表現(xiàn)。
 
 
       implementation
                   如果存在,它指明一個(gè)函數(shù)或類具有實(shí)現(xiàn)的限制 (抽象與具體),它的值特定于程序語言
                   (對 C++ 而言是 "virtual" 或 "pure virtual";對 Java 而言是 "abstract").
 
 
       inherits    如果存在,值為一個(gè)逗號(hào)分隔的類列表,這個(gè)類源于列表中的類 (也就是說,它由列表中的
                   類繼承而來)。
 
 
       signature   如果存在,它的值是函數(shù)指紋,表示方法與程序語言相關(guān)。完整的函數(shù)指紋定義了此函數(shù)的
                   返回類型及它的參數(shù)列表格式。這個(gè)擴(kuò)展字段當(dāng)前只支持基于 C 的程序語言,并且不包括
                   返回類型。
 
 
       另外,標(biāo)簽作用域有關(guān)的信息也 (在標(biāo)簽文件中) 可用,它的關(guān)鍵字部分是程序語言中的構(gòu)造名稱,它的
       值是程序中此構(gòu)造的名字。作用域表項(xiàng)指明定義此標(biāo)簽的范圍。例如,C 語言的結(jié)構(gòu)成員所生成的標(biāo)簽,
       會(huì)包含一個(gè)作用域,看起來像這樣 "struct:myStruct"。
 
 
 
HOW TO USE WITH VI
       Vi 缺省的期望當(dāng)前工作目錄中有一個(gè)名為 "tags" 的標(biāo)簽文件。一旦生成了標(biāo)簽文件,下面的命令執(zhí)行
       按標(biāo)簽索引的特性:
 
       vi -t tag   啟動(dòng) vi 并且把光標(biāo)定位在 "tag" 定義所在的文件和行上。
 
       :ta tag     查找一個(gè)標(biāo)簽。
 
       Ctrl-]      查找光標(biāo)下的標(biāo)簽
 
       Ctrl-T      返回跳轉(zhuǎn)到標(biāo)簽前的前一次位置 (不是所有實(shí)現(xiàn)都支持)。
 
 
 
HOW TO USE WITH GNU EMACS
       Emacs 缺省的期望當(dāng)前工作目錄中有一個(gè)名為 "TAGS" 的標(biāo)簽文件。一旦生成了標(biāo)簽文件,下面的命令執(zhí)
       行按標(biāo)簽索引的特性:
 
       M-x visit-tags-table <RET> FILE <RET>
                 選擇所使用的標(biāo)簽文件 "FILE"。
 
       M-. [TAG] <RET>
                 查找第一個(gè) TAG 定義。缺省的標(biāo)簽是光標(biāo)下的標(biāo)識(shí)符。
 
       M-*       跳回你先前調(diào)用 "M-." 的位置
 
       C-u M-.   查找前一次所查找的標(biāo)簽的下一個(gè)定義
 
 
       閱讀 Emacs info 文檔的 Tags 主題,以了解更多命令。
 
 
 
HOW TO USE WITH NEDIT
       NEdit 的 5.1 及以后版本可以處理新的擴(kuò)展標(biāo)簽文件格式 (見 --format)。要使 NEdit 使用標(biāo)簽文件,
       選擇 "File->Load Tags File"。要跳轉(zhuǎn)到一個(gè)標(biāo)簽的定義,高亮這個(gè)標(biāo)簽,然后按 Ctrl-D。NEdit 5.1
       可以從不同的目錄讀取多個(gè)標(biāo)簽文件。設(shè)置 X 資源中的 nedit.tagFile 為標(biāo)簽文件的名字,可以使
       NEdit 在啟動(dòng)時(shí)自動(dòng)加載這個(gè)標(biāo)簽文件。
 
 
 
CAVEATS
       由于 ctags 既不是一個(gè)預(yù)處理器也不是一個(gè)編譯器,使用預(yù)處理宏會(huì)使 ctags 漏掉標(biāo)簽或者錯(cuò)誤的生成
       不正確的標(biāo)簽。雖然 ctags 已經(jīng)被設(shè)計(jì)成處理一些的通用情況,但這依舊是提交最多的問題。特別是使
       用預(yù)處理構(gòu)造改變 C 的語法結(jié)構(gòu)時(shí),會(huì)欺騙 ctags。你可以通過使用 -I 選項(xiàng)避開很多這樣的問題。
 
       (*4)
 
       注意,當(dāng) ctags 使用模式字串來定位標(biāo)簽時(shí) (見 --excmd 選項(xiàng)),如果另外一個(gè)源碼行和包含這個(gè)標(biāo)簽
       的行完全相同,你的編輯器完全有可以跳到錯(cuò)誤的行上。下面的例子說明這種情況:
 
              int variable;
 
              /* ... */
              void foo(variable)
              int variable;
              {
                  /* ... */
              }
 
       取決于你所使用的編輯器,以及你在代碼中位置,搜索模式可能會(huì)在查找到真正的全局變量定義之前,查
       找到 foo() 的局部參數(shù)聲明,因?yàn)檫@兩行完全相同 (因此它們的搜索模式也相同)。這可以通過使用
       --excmd=n 來避免。
 
 
 
BUGS
       Ctags 具有比 ls(1) 更多的選項(xiàng).
 
       當(dāng)解析一個(gè) C++ 成員函數(shù)定義時(shí) (例如,"className::function"),ctags 不能確定域分隔符是一個(gè)類
       名分隔符還是一個(gè) namespace 分隔符,總是把它做一個(gè)類名放在擴(kuò)展字段的作用域部分。另外,如果一
       個(gè) C++ 函數(shù)定義在類定義外面 (通常都是這樣),函數(shù)定義中包含的訪問限定符 (即 public,protected
       或 private) 以及實(shí)現(xiàn)信息 (例如 virtual,pure virtual) 在為這個(gè)函數(shù)生成標(biāo)簽時(shí)無法知道。然而,
       對于原型,這些信息可用 (例如,--c++-kinds+=p)。
 
       沒有為繼承自一個(gè)類的語言對象產(chǎn)生標(biāo)簽。(*5)
 
 
 
ENVIRONMENT VARIABLES
       CTAGS   如果這個(gè)環(huán)境變量存在,在 ctags 啟動(dòng)時(shí)會(huì)從此環(huán)境變量中讀取缺省選項(xiàng),讀取發(fā)生在下面
               FILES 一節(jié)中列出的配置文件之后,但在命令行選項(xiàng)之前。命令行中出現(xiàn)的選項(xiàng)會(huì)覆蓋此環(huán)境變
               量中的選項(xiàng)。只從這個(gè)環(huán)境變量中讀取選項(xiàng)值。注意,環(huán)境變量中的所有空格都被認(rèn)為是分隔符,
               這樣傳遞一個(gè)包含空格的選項(xiàng)參數(shù)是不可能的。如果這會(huì)導(dǎo)致問題,改用配置文件。
 
 
       ETAGS   與上面的 CTAGS 類似,如果存在,它會(huì)在 etags 啟動(dòng)時(shí)讀取。如果這個(gè)環(huán)境變量未找到,etags
               將嘗試改用 CTAGS 環(huán)境變量。
 
 
       TMPDIR  在支持 mkstemp() 的類 Unix 主機(jī)上,這個(gè)環(huán)境變量的值定義了存放臨時(shí)文件的目錄。這在臨
               時(shí)文件太大導(dǎo)致缺省臨時(shí)文件目錄所在的分區(qū)無法裝下它時(shí)比較有用。ctags 只在下列情況時(shí)創(chuàng)
               建臨時(shí)文件: (1) 生成一個(gè) emacs 格式的標(biāo)簽文件, (2) 標(biāo)簽文件被輸出到標(biāo)準(zhǔn)輸出,
               (3) 它被編譯成使用內(nèi)部的排序算法來排序標(biāo)簽文件,而不是使用操作系統(tǒng)的 sort 工具。如果
               使用系統(tǒng)的 sort 工具,它通常也會(huì)使用這個(gè)變量。如果 ctags 是 setuid 的,TMPDIR 的值將
               被忽略。
 
 
 
FILES
       /ctags.cnf (只在 MSDOS,MSWindows)
       /etc/ctags.conf
       /usr/local/etc/ctags.conf
       $HOME/.ctags (在 MSDOS, MSWindows 上是 $HOME/ctags.cnf)
       .ctags (在 MSDOS,MSWindows上是 ctags.cnf)
              如果這些配置文件中任一個(gè)存在,每個(gè)都應(yīng)該包含一個(gè)缺省的選項(xiàng)集合,在 ctags 啟動(dòng)時(shí)會(huì)按列
              出的順序讀入這些選項(xiàng),讀入的時(shí)刻發(fā)生在讀取 CTAGS 環(huán)境變量以及命令行選項(xiàng)之前。這使得設(shè)
              置適用于整個(gè)系統(tǒng)、每個(gè)人或基于項(xiàng)目的缺省選項(xiàng)值成為可能。在編譯 ctags 時(shí)為它指定一個(gè)額
              外的配置文件是可能的,它會(huì)在上面列出文件被讀入之前讀取,在 --version 選項(xiàng)輸出中的
              "custom-conf" 指示這個(gè)特性可用。CTAGS 環(huán)境變量及命令行中選項(xiàng)會(huì)覆蓋這些文件中定義的選
              項(xiàng)。只從這些文件中讀入選項(xiàng)值。注意,選項(xiàng)文件按行讀入,行內(nèi)的空格有效 (因?yàn)椴荒芟?shell
              那樣使用引號(hào))。文件的每行被當(dāng)做一個(gè)命令行參數(shù) (就像它們被單引號(hào)括起來一樣)。因此,使
              用換行符做為命令行參數(shù)的分隔標(biāo)志。
 
 
       tags   ctags 生成的缺省標(biāo)簽文件。
 
       TAGS   etags 生成的缺省標(biāo)簽文件。
 
 
SEE ALSO
       Exuberant Ctags 的官方網(wǎng)站在:
 
              http://ctags.sourceforge.net
 
       參閱  ex(1),vi(1),elvis,或更好的,vim,ctags 的正式編輯器。欲獲得 vim 的更多信息,請到
       VIM 的 web 網(wǎng)站:
 
              http://www.vim.org/
 
 
 
AUTHOR
       Darren Hiebert <dhiebert at users.sourceforge.net>
        
       "All effort and exertion put forth by man from the fullness of his heart is worship, if it
       is prompted by the highest motives and the will to do service to humanity."
 
              -- From the Baha'i Writings
 
 
 
CREDITS
       這個(gè)版本的 ctags 最初繼承了 Steve Kirkendall <kirkenda@cs.pdx.edu> 的 ctags 并從中獲取靈感,
       他的 ctags 伴隨 Elvis vi 變種發(fā)行 (雖然事實(shí)上沒有使用一行原來的代碼)。
 
       榮譽(yù)也要?dú)w于 Bram Moolenaar <Bram@vim.org>,vim 的作者,他花費(fèi)如此多的時(shí)間和精力開發(fā)這個(gè)編輯
       器 (服務(wù)于他人) 以及幫助烏干達(dá)的孤兒。
 
       名為 "HOW TO USE WITH GNU EMACS" 的一節(jié)是從 GNU etags 的 info 文檔中 "偷來" 的。
 
 
 
Darren Hiebert                                 Version 5.6                                  CTAGS(1)
 
譯者注:
 
(*1) 原文為 "Options all also accepted in this input" 。經(jīng)過與作者溝通,本句應(yīng)為 "Options also
     accepted in this input"。意思是“在輸入中的選項(xiàng)也會(huì)被接受”,也就是說,可以在 file 中加入選項(xiàng),
     這些選項(xiàng)將會(huì)應(yīng)用在其后出現(xiàn)的文件上。這提供了一種非常便捷的方式,允許用戶為不同的文件指定不同的
     選項(xiàng)。
 
(*2) 這句話意思是,因?yàn)樾袃?nèi)的空格被視為有意義的,所以不能再以空格來分隔各個(gè)選項(xiàng),而應(yīng)該以換行符來分
     隔多個(gè)選項(xiàng)。
 
(*3) 按譯者的理解,在使用類如 struct,union 這樣的復(fù)雜數(shù)據(jù)類型進(jìn)行類型定義 (typedef) 或直接定義變量
     時(shí),會(huì)為之增加 "typeref:" 字段。下面兩個(gè)例子中的代碼生成的標(biāo)簽文件就包含此字段:
     /* 定義類型 */
     typedef struct abc
     {
         int a;
         char b;
     } abc;
 
     /* 直接定義變量 */
     union {
         TEST1,
         TEST2
     } test;
 
(*4) 這里刪除一個(gè)段落。經(jīng)作者確認(rèn),這段話已經(jīng)過時(shí)。

(*5) 借用作者給出的例子說明。假如class A中定義了一個(gè)A:foo(),如果class B繼承自A,那么class B中也會(huì)包含B:foo()。但ctags沒有為B中的foo()生成標(biāo)簽。


[譯文版本]
27Apr07, easwy, initial version
28Apr07, easwy, reformat it
30Apr07, easwy, correct wrong spell of "Exuberant"
18May07, easwy, update according to author's comments

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产高潮在线观看| 亚洲精品护士| 久久人人97超碰国产公开结果| 中文精品99久久国产香蕉| 亚洲伦理精品| 中日韩男男gay无套| 亚洲一区久久久| 午夜精品成人在线| 欧美一区二区国产| 久久在线视频在线| 欧美日韩精品中文字幕| 国产精品毛片va一区二区三区| 国产精品午夜春色av| 亚洲激情欧美| 在线观看免费视频综合| 国产精品看片你懂得| 久久久久国产精品一区二区| 一区二区高清视频| 午夜久久福利| 你懂的亚洲视频| 99riav1国产精品视频| 麻豆国产精品va在线观看不卡 | 欧美大片国产精品| 欧美色图一区二区三区| 国产亚洲一二三区| 日韩亚洲精品视频| 久久久久久久久久久久久久一区| 免费成人性网站| 99精品热6080yy久久| 欧美一区二区在线看| 欧美精品一区二区三区在线播放 | 亚洲欧美日韩精品久久久久| 久久久久久久综合狠狠综合| 欧美日韩1234| 在线观看一区视频| 欧美一区在线直播| 亚洲乱码国产乱码精品精天堂| 久久久精品日韩欧美| 欧美手机在线| 亚洲精品极品| 欧美成人一区二区三区| 香蕉av777xxx色综合一区| 欧美日韩国产精品专区| 在线色欧美三级视频| 香蕉久久精品日日躁夜夜躁| 亚洲精品久久久久久下一站| 久久国产日韩| 国产三区精品| 欧美一级免费视频| 99视频在线精品国自产拍免费观看 | 亚洲免费在线视频| 亚洲青色在线| 女女同性女同一区二区三区91| 国产一区二区三区精品欧美日韩一区二区三区| 999亚洲国产精| 亚洲电影在线| 欧美成人69av| 久久久人人人| 韩国精品久久久999| 欧美一区二区三区播放老司机| 99在线精品观看| 欧美三级日本三级少妇99| 一区二区三区波多野结衣在线观看| 亚洲国产精品99久久久久久久久| 久久免费视频网站| 亚洲国产精品一区制服丝袜| 久久亚洲私人国产精品va媚药| 性欧美超级视频| 精品电影在线观看| 嫩草影视亚洲| 欧美成人久久| 一本一道久久综合狠狠老精东影业| 亚洲国产导航| 欧美日韩在线影院| 亚洲女爱视频在线| 午夜视频一区在线观看| 国内精品模特av私拍在线观看| 久久永久免费| 男人的天堂亚洲在线| 99精品视频一区二区三区| 日韩视频在线一区二区三区| 国产精品成人va在线观看| 亚洲综合第一页| 亚洲欧美在线x视频| 激情欧美日韩| 亚洲人成网在线播放| 国产精品欧美在线| 久久一本综合频道| 欧美精品大片| 欧美一级大片在线观看| 久久资源在线| 亚洲欧美日韩爽爽影院| 久久精品国产亚洲精品| 亚洲久久成人| 性色一区二区三区| 亚洲美女尤物影院| 欧美亚洲一区在线| 99国产精品久久| 欧美一区二区成人| 一道本一区二区| 欧美在线视频观看| 亚洲精品视频免费观看| 午夜精品久久久久久久| 亚洲开发第一视频在线播放| 亚洲综合好骚| 日韩写真视频在线观看| 性欧美超级视频| 亚洲网站在线| 你懂的国产精品| 欧美自拍丝袜亚洲| 欧美日韩激情小视频| 久久蜜臀精品av| 欧美日韩综合精品| 欧美国产日韩一区二区三区| 国产日韩精品一区| 亚洲婷婷国产精品电影人久久| 亚洲国产精品va在线观看黑人| 一本色道久久综合狠狠躁篇怎么玩| 揄拍成人国产精品视频| 亚洲欧美bt| 亚洲欧美电影在线观看| 欧美精品日韩精品| 亚洲激情网站| 久久国产精品黑丝| 欧美一级免费视频| 国产精品久久久久7777婷婷| 亚洲日本中文字幕免费在线不卡| 在线看日韩av| 久久国产精品99国产| 欧美一区影院| 国产精品推荐精品| 亚洲一区二区久久| 午夜精品久久久久久99热软件| 欧美看片网站| 亚洲乱码国产乱码精品精可以看| 亚洲乱码一区二区| 欧美日韩高清在线播放| 亚洲精品自在久久| 亚洲一二三区在线观看| 欧美日韩国产综合视频在线| 亚洲人成小说网站色在线| 亚洲毛片网站| 欧美日韩在线播放一区| 亚洲色图制服丝袜| 欧美一区二区播放| 国产精品视频你懂的| 欧美伊人久久| 女人天堂亚洲aⅴ在线观看| 亚洲高清一二三区| 欧美精品三级| 亚洲视频在线播放| 久久成人国产| 在线激情影院一区| 欧美乱人伦中文字幕在线| 日韩一级网站| 久久国产欧美日韩精品| 狠狠干综合网| 免费高清在线视频一区·| 亚洲国产欧美日韩另类综合| 亚洲午夜精品久久久久久app| 欧美性猛交一区二区三区精品| 亚洲午夜一区二区三区| 久久理论片午夜琪琪电影网| 亚洲电影视频在线| 欧美三级特黄| 久久精品99无色码中文字幕| 欧美高清视频一区| 亚洲一级在线| 狠久久av成人天堂| 欧美日韩国产a| 欧美影院视频| 亚洲日本va午夜在线影院| 午夜免费日韩视频| 亚洲激情在线视频| 国产精品亚洲激情| 欧美aⅴ99久久黑人专区| 亚洲丝袜av一区| 欧美成人免费视频| 亚洲欧美日韩一区二区三区在线观看| 国产一区二区三区无遮挡| 欧美福利电影在线观看| 午夜精品久久久久久久白皮肤| 欧美激情精品久久久久久变态| 亚洲欧美国产精品专区久久| 影音欧美亚洲| 国产精品自在在线| 欧美精品99| 毛片精品免费在线观看| 亚洲欧美日韩精品久久久| 亚洲六月丁香色婷婷综合久久| 美女精品在线观看| 久久福利一区| 午夜激情亚洲| 亚洲一区二区三区精品动漫| 在线观看日韩欧美| 欧美一区二区三区四区视频| 亚洲黄色天堂| 免费日韩成人| 久久在线免费观看| 欧美在线一级视频|