Ctags学習ノート


私は最近の学習過程でctagsツールに触れた.Vimを使用する学生は、VimEmacsなどのエディタがコードを使用してジャンプするのを助けることができ、プログラマーの神器とも言える.そこで、私は特にノートを書いて皆さんに共有します.
ブログの参考になりました
  • ctags使用詳細
  • プログラマーの七種類の武器のCtags
  • Exuberant Ctags中国語マニュアル
  • 概要Ctagsは、様々なプログラミング言語のソースファイルとヘッダファイルで見つかった名前のインデックスファイル(.tag)を生成するプログラミングツールです.言語によっては、関数、変数、クラスメンバー、マクロなどのインデックスを作成できます.
    ファイル形式
    tagsファイルは動作単位で、各行のフォーマットは以下の通りです.
    { tagname }{ tagfile }{ tagaddress }{ extension_fields }
    ここで、タブはtagsファイルの分割子です.tagname-->は変数名に類似し、tagnamectagsは関数、変数、クラスメンバー、マクロなどによって確立されたインデックス名である.注意すべきは、tagnameにスペースが含まれていないことです.tagfile-->名前の通り、.tagsファイルのファイルパスであり、現在のディレクトリの相対パスである.tagaddress-->カーソル位置に移動可能なExコマンド.通常、行番号または検索コマンドのみが含まれます.安全を考慮すると、vimはいくつかのコマンドの実行を制限します.tagname-->拡張フィールドは、ユーザー自身が定義します.
    さらに、上記の3つの項目にタブを含めることはできません.
    最後に、extension_fieldsctagsを使用して注釈を追加し、すなわち;"である.
    共通パラメータ
    多くのオプションがあるにもかかわらず、;" commentにはデフォルト値が設定されているため、通常はctags(たとえば、ctagsctags *など)を実行するオプションはありません.これにより、現在のディレクトリの下にあるすべての識別可能なソースファイルにラベルファイルが生成されます.下に表示されるオプションは、特別な必要がある場合にのみユーザーがカスタマイズできるようになります.ctags -Rは--appendに等しい.-aイネーブル-eモードで、Emacsエディタで使用されるラベルファイルが作成されます.etags-fラベルファイルの名前として指定されたtagfileを使用します(デフォルトは「tags」、または「TAGS」がtagfileモードで実行されている場合).etagsファイル拡張子リストを定義し、ピリオドで区切られ、これらのファイルはファイル(またはヘッダファイル)を含む解析として処理されます.-h識別子リストを定義する.-Iラベルファイルを生成する必要があるファイルのリストをファイルに読み込む.-L-o tagfile;-f tagfile-R;--recurse指定されたファイルに生成されたラベルが、ラベルファイルの既存のコンテンツの後に追加されるか、置換されるかを指定します.このオプションはデフォルトで閉じられます.このオプションは、最初のファイル名の前に表示する必要があります.--append[=yes|no]--exclude=[pattern]を除外ファイル/ディレクトリリストに追加する.pattern特定のタイプの情報に追加のラベルエントリを追加するかどうかを指定します.--extra=[+|-]flagsラベル・ファイル・テーブル・アイテムの有効な拡張フィールドを定義します(詳細は、前述の--fields=[+|-]flagsです).extension_fields--filter[=yes|no]をフィルタのように表現し、標準入力でファイルの名前を読み取り、1つのファイルが1つのファイルの出力ラベルに続く.ctags詳細な使用方法の説明を標準出力に印刷し、終了します.--help新しいユーザー定義言語を定義し、正規表現を使用して解析します.--langdef=name制御ファイル名がプログラム言語にどのようにマッピングされるか(--langmap=map[,map[...]]オプションを参照).--list-mapsデフォルト、--language-force=languageは、プログラム言語を特定できないファイルを無視して、自動的にソースファイルの言語を選択します.ctagsカンマで区切られたラベルを生成する言語リストを定義します.--languages=[+|-]listオプションは、完全な組み込み言語名を取得します.--list-languagesオプションは、サポートされている言語をリストします.--list-kinds指定された言語またはすべての言語のファイル拡張子とファイル名モードをリストし、終了します.--list-maps[=language|all]ファイルリストで遭遇したディレクトリに再帰的にアクセスします.--recurse[=yes|no]サポートされている言語は非常に豊富で、20種類以上あり、対応は以下の通りです.
    Ant
         p  projects
         t  targets
    Asm
         d  defines
         l  labels
         m  macros
         t  types (structs and records)
    Asp
         d  constants
         c  classes
         f  functions
         s  subroutines
    Basic
         c  constants
         f  functions
         l  labels
         t  types
         v  variables
         g  enumerations
         v  variables
    C
         c  classes
         d  macro definitions
         e  enumerators (values inside an enumeration)
         f  function definitions
         g  enumeration names
         l  local variables [off]
         m  class, struct, and union members
         n  namespaces
         p  function prototypes [off]
         s  structure names
         t  typedefs
         u  union names
         v  variable definitions
         x  external and forward variable declarations [off]
    C++
         c  classes
         d  macro definitions
         e  enumerators (values inside an enumeration)
         f  function definitions
         g  enumeration names
         l  local variables [off]
         m  class, struct, and union members
         n  namespaces
         p  function prototypes [off]
         s  structure names
         t  typedefs
         u  union names
         v  variable definitions
         x  external and forward variable declarations [off]
    C#
         c  classes
         d  macro definitions
         e  enumerators (values inside an enumeration)
         E  events
         f  fields
         g  enumeration names
         i  interfaces
         l  local variables [off]
         m  methods
         n  namespaces
         p  properties
         s  structure names
         t  typedefs
    Fortran
         b  block data
         c  common blocks
         e  entry points
         f  functions
         i  interface contents, generic names, and operators [off]
         k  type and structure components
         l  labels
         L  local, common block, and namelist variables [off]
         m  modules
         n  namelists
         p  programs
         s  subroutines
         t  derived types and structures
         v  program (global) and module variables
    HTML
         a  named anchors
         f  JavaScript functions
    Java
         c  classes
         e  enum constants
         f  fields
         g  enum types
         i  interfaces
         l  local variables [off]
         m  methods
         p  packages
    JavaScript
         f  functions
         c  classes
         m  methods
         p  properties
         v  global variables
    Lisp
         f  functions
    Lua
         f  functions
    Make
         m  macros
    MatLab
         f  function
    Pascal
         f  functions
         p  procedures
    Perl
         c  constants
         f  formats
         l  labels
         p  packages
         s  subroutines
         d  subroutine declarations [off]
    PHP
         c  classes
         i  interfaces
         d  constant definitions
         f  functions
         v  variables
         v  variables
         j  javascript functions
    Python
         c  classes
         f  functions
         m  class members
         v  variables
         i  imports
    Ruby
         c  classes
         f  methods
         m  modules
         F  singleton methods
    Sh
         f  functions
    SQL
         c  cursors
         d  prototypes [off]
         f  functions
         F  record fields
         l  local variables [off]
         L  block label
         P  packages
         p  procedures
         r  records [off]
         s  subtypes
         t  tables
         T  triggers
         v  variables
         i  indexes
         e  events
         U  publications
         R  services
         D  domains
         V  views
         n  synonyms
         x  MobiLink Table Scripts
         y  MobiLink Conn Scripts
    Tex
         c  chapters
         s  sections
         u  subsections
         b  subsubsections
         p  parts
         P  paragraphs
         G  subparagraphs
    Verilog
         c  constants (define, parameter, specparam)
         e  events
         f  functions
         m  modules
         n  net data types
         p  ports
         r  register data types
         t  tasks
    VHDL
         c  constant declarations
         t  type definitions
         T  subtype definitions
         r  record names
         e  entity declarations
         C  component declarations [off]
         d  prototypes [off]
         f  function prototypes and declarations
         p  procedure prototypes and declarations
         P  package definitions
         l  local definitions [off]
    Vim
         a  autocommand groups
         c  user-defined commands
         f  function definitions
         m  maps
         v  variable definitions
    
    

    配合VimCtags~/.vimrcを加えると、set tags+=./tagsは現在のパスの下のvimファイルで特定のジャンプ方式を位置決めしてジャンプすることができ、tagでドキュメントvimを表示することができます.
    tagの使用
  • 指定したtagにジャンプします.例:
  • tag tagname
    
  • ショートカット:h tags現在のカーソルの下にあるwordをtagの名前として取り出してジャンプします.
  • Ctrl+]コマンドは、アクセスしたtagsのリスト
  • をリストします.
  • ショートカットtag前回のtagへジャンプ
  • Ctrl+Tコマンド
    stag tagname
    
  • 現在のウィンドウを分割し、指定したstagにジャンプします.
  • ショートカットtag現在のウィンドウを分割し、カーソルの下にあるCtrl+W+]にジャンプします.
  • 同名tag同名のtagが複数存在する場合、tagコマンドはtagのリストを与え、tagのシーケンス番号を入力することによってtagを選択することができる.また、tagによってtagをフィルタリングすることもできる.例えば、tselect
  • 複数の:tselect tagname間を移動する場合は、次のコマンドを使用します.
    :tfirst             go to first match
    :[count]tprevious   go to [count] previous match
    :[count]tnext       go to [count] next match
    :tlast              go to last match