• <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>

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

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

            (*5) 借用作者給出的例子說(shuō)明。假如class A中定義了一個(gè)A:foo(),如果class B繼承自A,那么class B中也會(huì)包含B:foo()。但ctags沒(méi)有為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

            日韩人妻无码精品久久久不卡 | 久久久精品久久久久久| 国产欧美一区二区久久| 久久青草国产手机看片福利盒子| 国产69精品久久久久9999| 亚洲欧美日韩精品久久亚洲区 | 激情五月综合综合久久69| 亚洲国产成人久久综合区| 色诱久久久久综合网ywww| 国产精品免费久久久久电影网| 无码精品久久一区二区三区| 久久久久99精品成人片欧美| 精品乱码久久久久久夜夜嗨| 久久人人爽人人人人爽AV| 久久久精品午夜免费不卡| 中文国产成人精品久久亚洲精品AⅤ无码精品| 一本色道久久88精品综合| 中文字幕亚洲综合久久| 中文字幕日本人妻久久久免费 | 久久水蜜桃亚洲av无码精品麻豆| 大蕉久久伊人中文字幕| 亚洲av日韩精品久久久久久a| 国产精品va久久久久久久| 天天爽天天狠久久久综合麻豆| 伊人久久大香线蕉精品不卡| 91精品国产色综合久久| 伊人久久亚洲综合影院| 99久久精品费精品国产| 婷婷五月深深久久精品| 天天影视色香欲综合久久| 久久成人国产精品二三区| 99久久精品国产一区二区| 久久精品国产99久久香蕉| 久久久久久夜精品精品免费啦| 欧美精品九九99久久在观看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 久久国产欧美日韩精品免费| 久久99精品九九九久久婷婷 | 思思久久精品在热线热| 久久久久久毛片免费看| 成人亚洲欧美久久久久|