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