やましなぶろぐ

タグジャンプを実現するためにctagsの環境を整える

ctagsについて調べてためした事

ctagsの情報は豊富だけれでも初心者には難しかったので自分のためにも記録を残します

🕒 Last mod: 2021-05-02


1. Exuberant Ctags をUbuntu 20.04 にインストール

インストールは簡単です。

command
sudo apt install ctags
check
ctags --version
output
user@user:~$ ctags --version
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

2. Exuberant Ctags が対応している言語と拡張子の確認

command
ctags --list-maps
output.example
user@user:~$ ctags --list-maps
Ant      *.build.xml
Asm      *.asm *.ASM *.s *.S *.A51 *.29[kK] *.[68][68][kKsSxX] *.[xX][68][68]
Asp      *.asp *.asa
Awk      *.awk *.gawk *.mawk
Basic    *.bas *.bi *.bb *.pb
BETA     *.bet
C        *.c
C++      *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.C *.H
C#       *.cs
Cobol    *.cbl *.cob *.CBL *.COB
...

3. とりあえずのお試しでtagsfileを作成してみる。

command
ctags -R .

これでカレントディレクトリに’tags’ファイルが生成されています。

4. 対応している言語を確認する

--list-languages で確認できます。

多くの言語に対応しています。

command
ctags --list-languages
output.example
Ant
Asm
Asp
Awk
Basic
BETA
C
C++
...
SQL
Tcl
Tex
Vera
Verilog
VHDL
Vim
YACC

5. 作成対象の言語をPythonだけにする。

--languagesオプションえ対象の言語を指定できます。

command
ctags --languages=Python --list-languages
output.example
...
PHP [disabled]
Python
REXX [disabled]
...

Python以外の言語がdisabledになります。

6. デフォルトで対応していないYamlを対象にする。

6.1. 言語の定義:--langdef

--langdef=Yaml で対応の言語を追加することができます。

6.2. 拡張子の定義:--langmap

--langmap=Yaml:.yml で.ymlファイルを対象にtagできるようになります。

6.3. parserの定義:--regex-Yaml

正規表現でパターンを定義できます。

6.4. Yamlファイルのタグを作成

書く定義を組み合わせてYamlファイルのタグを作成してみます。

command
ctags \
--langdef=Yaml \
--regex-Yaml=/^\([[:graph:]]+\):[[:space:]]*^/\1/a/i \
--langmap=Yaml:.yml \
test.yml

tagsファイルが作成されています。

tags
!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.9~svn20110310 //
test.yml    /^ijfoawfja:$/;"    a