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

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

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

(*5) 借用作者給出的例子說明。假如class A中定義了一個A:foo(),如果class B繼承自A,那么class B中也會包含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>
            欧美色123| 久久se精品一区精品二区| 久久性天堂网| 亚洲在线播放| 亚洲剧情一区二区| 影音先锋日韩有码| 国产欧美一区二区三区另类精品| 欧美精品午夜视频| 另类春色校园亚洲| 久久国产精彩视频| 亚洲欧美制服另类日韩| 亚洲美女中文字幕| 亚洲高清视频一区二区| 蜜桃精品久久久久久久免费影院| 欧美一区亚洲一区| 亚洲综合电影| 亚洲视频自拍偷拍| 中日韩男男gay无套| 99国产精品视频免费观看一公开| 亚洲激情第一区| **网站欧美大片在线观看| 国产一区二区中文| 国产欧美日本| 国产伦精品一区二区三区照片91 | 亚洲欧美日韩国产另类专区| 99精品99| 一区二区电影免费在线观看| 亚洲国产欧美日韩精品| 一区二区三区在线视频免费观看 | 亚洲欧美另类久久久精品2019| 一区二区三区鲁丝不卡| 一区二区三区国产在线观看| 99成人在线| 99在线精品视频在线观看| 日韩一区二区免费看| 亚洲免费观看高清在线观看| 亚洲乱码视频| 夜夜躁日日躁狠狠久久88av| 99精品视频免费观看视频| 夜色激情一区二区| 亚洲视频综合| 亚洲欧美影院| 欧美在线日韩精品| 久久久国产一区二区三区| 久久婷婷国产综合精品青草| 久久午夜电影网| 欧美激情一二区| 欧美午夜免费电影| 国产欧美一区二区三区在线老狼 | 一二三四社区欧美黄| 国产精品99久久久久久人| 亚洲欧美日韩在线观看a三区| 欧美影院午夜播放| 久久综合色一综合色88| 欧美顶级少妇做爰| 日韩视频在线一区二区| 亚洲欧美日韩国产一区二区三区| 欧美一区国产二区| 欧美a级一区| 国产精品久久国产愉拍| 国产一区二区日韩精品欧美精品| 在线欧美日韩| 亚洲一区二区av电影| 久久精品九九| 亚洲国产成人av| 亚洲一区二区三区免费在线观看| 欧美伊人精品成人久久综合97| 老司机精品视频网站| 欧美四级在线观看| 国产一区二区日韩精品欧美精品| 亚洲精品日本| 欧美在线视频观看免费网站| 欧美阿v一级看视频| 日韩午夜激情av| 久久国产精品第一页| 欧美理论在线播放| 国产综合色在线| 一本久久综合亚洲鲁鲁| 久久久av网站| 日韩视频在线一区二区三区| 久久九九99视频| 国产精品啊啊啊| 亚洲欧洲一区二区在线播放 | 亚洲国产精品尤物yw在线观看| 一区二区三区视频在线看| 久久免费国产精品1| 欧美午夜三级| 亚洲精品乱码久久久久久蜜桃91| 欧美在线亚洲| 亚洲免费久久| 欧美成年人视频网站| 国产午夜精品久久久久久久| 亚洲最新中文字幕| 欧美高清视频| 久久黄金**| 国产精品夜夜夜| 一区二区三区精品视频| 欧美激情一区二区三区| 久久av二区| 国产老肥熟一区二区三区| 一区二区三区日韩精品| 亚洲成在人线av| 久久久国产91| 国产一区视频网站| 亚洲欧美视频在线观看| 亚洲日本电影| 噜噜爱69成人精品| 国产一区二区高清| 欧美一区二区高清| 99国产精品99久久久久久粉嫩| 免费久久99精品国产自| 国产香蕉97碰碰久久人人| 亚洲女与黑人做爰| 亚洲毛片网站| 欧美激情综合五月色丁香小说| 亚洲国产成人一区| 毛片基地黄久久久久久天堂| 欧美在线高清| 韩日精品在线| 久久久xxx| 欧美在线日韩在线| 国产一区二区三区久久| 欧美在线免费一级片| 亚洲欧美日韩国产一区| 国产欧美精品一区aⅴ影院| 午夜久久电影网| 亚洲欧美自拍偷拍| 国产乱码精品一区二区三区五月婷 | 久久精品成人| 先锋影音久久久| 国产日韩在线视频| 久久精品亚洲| 久久国产精品久久久久久久久久| 国产伪娘ts一区| 久久久久久一区| 久久精品国产亚洲一区二区| 尤物yw午夜国产精品视频明星| 老巨人导航500精品| 久久久久一区二区三区| 亚洲高清一二三区| 欧美风情在线观看| 欧美乱妇高清无乱码| 中文精品视频| 亚洲综合国产精品| 国内精品伊人久久久久av一坑| 麻豆国产精品va在线观看不卡| 久久久五月天| 亚洲精品中文在线| 日韩午夜一区| 国产伦精品一区二区三| 老司机精品久久| 欧美高清在线观看| 亚洲自拍偷拍一区| 欧美一区二区视频97| 亚洲成人自拍视频| 亚洲久久一区| 国产伦精品一区二区三区| 免费观看成人| 欧美日韩国产首页| 久久成人免费| 欧美福利网址| 亚洲欧美日韩一区二区在线| 久久精品国产成人| 亚洲美女区一区| 亚洲男人的天堂在线| 亚洲国产精品一区制服丝袜| 99精品视频一区| 国产综合欧美| 亚洲精品无人区| 好看的日韩视频| 亚洲精品在线视频| 韩日欧美一区| 99av国产精品欲麻豆| 黄色在线一区| 亚洲美女av网站| 狠狠色丁香久久婷婷综合丁香| 亚洲人成人99网站| 国产视频一区欧美| 亚洲免费大片| 精品999网站| 一区二区三区日韩欧美| 一区二区亚洲| 亚洲视频在线看| 亚洲欧洲日韩在线| 欧美亚洲一级片| 夜夜爽www精品| 久久蜜桃资源一区二区老牛| 亚洲一区二区三区视频| 麻豆成人在线| 久久激情视频久久| 欧美日韩一区二区视频在线观看| 噜噜噜91成人网| 国产伦精品一区二区三区高清| 亚洲福利国产精品| 狠狠色狠狠色综合人人| 亚洲一区二区三区四区中文| 亚洲精品一区二区三区不| 久久精品视频免费播放| 午夜宅男欧美| 欧美性一区二区|