ç§ã¯universal-ctagsã§ã°ããŒãã«ãæ§ç¯ããŸããã ctags --versionãå®è¡ãããšãuniversal-ctagsããŒãžã§ã³ãååŸãããä»ã®ããŒãžã§ã³ã¯ååŸãããªãããšã確èªã§ããŸããã
以äžãå«ã.ctagsãã¡ã€ã«ãäœæããŸããã
-exclude=foo
gtagsãå®è¡ãããšã.ctagsãã¡ã€ã«ãå°éããŠããããã«èŠããŸããã 代ããã«ãäœæ¥ãã£ã¬ã¯ããªå ã®ãã¹ãŠã®ã¿ã°ãæœåºããŸãã
ç§ã¯äœãééã£ãŠããã®ã§ããïŒ
Universal-ctagsã¯.ctagsãèªã¿åããŸããã ctags.1ã®ããã¥ã¢ã«ããŒãžã®ããã¡ã€ã«ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ããªãã¯ãããåç §ããŠããŸããïŒ
/ctags.cnf (on MSDOS, MSWindows only)
/etc/ctags.conf
/usr/local/etc/ctags.conf
$HOME/.ctags
$HOME/ctags.cnf (on MSDOS, MSWindows only)
.ctags
ctags.cnf (on MSDOS, MSWindows only)
If any of these configuration files exist, each will be expected to contain a set of default options which are read in the order listed when ctags starts, but before the CTAGS environment variable is read or any command line options are read. This makes it possible to set up site-wide, personal or project-level defaults. It is possible to compile ctags to read an additional configuration file before any of those shown above, which will be indicated if the output produced by the --version option lists the "custom-conf" feature. Options appearing in the CTAGS environment variable or on the command line will override options specified in these files. Only options will be read from these files. Note that the option files are read in line-oriented mode in which spaces are significant (since shell quoting is not possible). Each line of the file is read as one command line parameter (as if it were quoted with single quotes). Therefore, use new lines to indicate separate command-line arguments.
ç§ã¯.ctagsãå¯èœæ§ã®1ã€ãšããŠèŠãŠããŸãïŒ
ããããã圌ã¯çŸåšã®ããã¥ã¢ã«ããŒãžãæå³ããŠããŸã
è¿ä¿¡ããŠãããcodebrainzã«æè¬ããŸãã ã ããç§ã¯ãã®ãã¡ã€ã«ãäœæããŸããïŒ
/pathtorepo/ctags.d/.ctags
ããã«ã¯-Rãå«ãŸããŸãããå¿ èŠãªãã®ã¯é€å€ãããŸãã
reposãã£ã¬ã¯ããªãããã®ã³ãã³ããå®è¡ããå ŽåïŒ
ctags --verbose
å ¥åãæåŸ ããŠããããšãããããŸãã
ç§ãããæ
ctags --vertbose --options = ctags.d / .ctags
ããã¯æ£ããããšãè¡ãã.ctagsãã¡ã€ã«ã®é€å€ãé€ããã¹ãŠã®ãªããžããªããã¿ã°ãæœåºããŸãã
ç§ã¯äœãééã£ãŠããã®ã§ããïŒ
ãctagsãã®ã¿ãå®è¡ããå Žåãctags.d / .ctagsïŒãŸãã¯å¿ èŠãªãã¡ã€ã«ïŒãå°éããããã«ctagsãå¿ èŠã§ãã
ãã®çç±ã¯ãç§ãemacså ã§ggtagsã䜿çšããŠããŠãggtagsãctagsãšäžŠãã§åäœããggtagsãå¿ èŠãšããããã§ãã
ãããã£ãŠãåºæ¬çã«ã¯ãã³ãã³ãããã³ããã§ãgtagsããå®è¡ããã ãã§èªåçã«å®è¡ã§ããç¶æ ã«ãªããããšæããŸãã
ã©ããã£ãŠããã®ïŒ
/pathtorepo/.ctags.d/exclude.ctagsã¯ã©ãã§ããïŒ
ãŠãããŒãµã«ctagsèªäœã®ãœãŒã¹ããªãŒãåç
§ããŠãã ããã ãã®äžã«.ctags.dãã£ã¬ã¯ããªããããŸãã
https://github.com/universal-ctags/ctags/tree/master/.ctags.d
ã³ã¡ã³ããç¹°ãè¿ãæŽæ°ããŠãã¿ãŸããã
/ pathtorepoã§u-ctagsãå®è¡ããå Žåãu-ctagsã¯/pathtorepo/.ctags.d/exclude.ctagsãããŒãããå¿
èŠããããŸãã
u-ctagsã§exclude.ctagsãèªã¿èŸŒãŸããªãå Žåã¯ããããå床éããŠãã ããã
ããµã¿ã±ããè¿äºããããšãããããŸãã é€å€ãã¡ã€ã«ãååŸãããŠããããã§ãããããã€ã質åããããŸãã
ctagsïŒãã¡ã€ã«ãæå®ãããŠããŸããã ãctags--helpãããè©Šããã ããã
ãããããªãïŒ æ¬¡ã®ããã«åäœããã¹ãã§ã¯ãããŸããïŒ
ctags --verbose --options = .ctags
é€å€ãé€ããŠãçŸåšã®ãã£ã¬ã¯ããªå
ã®ãã¹ãŠã解æããã ãã§ããïŒ
çŽ1ã質åã«çããã«ã¯ãç°å¢ã«é¢ããæ å ±ãå¿ èŠã§ãã
ç§ã¯è±èªãèŠæã§ãã 次ã®åºåã§ãå¿ èŠãªãã¹ãŠããããããšãé¡ã£ãŠããŸãã
æ¬åœã«u-ctagsã䜿çšããŠããããšã確èªããŠãã ããã
$ ./ctags --version | grep Universal
Universal Ctags 0.0.0(248cffc9), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
u-ctagsã¯ãã/ãctags.dã®äžã«ãµãã£ãã¯ã¹ãšããŠ.ctags
ãæã€ãã¡ã€ã«ãããŒãããŸãã
$ ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags
--verbose
ãªãã·ã§ã³ã¯ãããŒãããããã¡ã€ã«ã瀺ããŸãã
$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
ãã£ã¬ã¯ããªãŸãã¯ãã¡ã€ã«ã¯--options
ã§æå®ã§ããŸãã ãã£ã¬ã¯ããªãæå®ãããŠããå Žåã
ãã£ã¬ã¯ããªã®äžã®ãµãã£ãã¯ã¹ãšããŠ.ctags
ãæã€ãã¡ã€ã«ãããŒããããŸãã
ãã ããåããã¡ã€ã«ã2åããŒããããããšã¯ãããŸããã
$ ./ctags --verbose --options=.ctags.d 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/exclusion.ctags: already considered
--optionsã䜿çšããŠãã¡ã€ã«ãæ瀺çã«æå®ããªãéãããµãã£ãã¯ã¹ã®ãªããã¡ã€ã«ã¯ããŒããããŸããã
$ touch ./.ctags.d/please-load-me
$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
$ mv ./.ctags.d/please-load-me ./.ctags.d/please-load-me.ctags
$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/please-load-me.ctags: reading...
ããã§å šéšã§ãã ããã¥ã¢ã«ããŒãžãåç §ããŠãã ããã ããã¥ã¢ã«ããŒãžãããŸãæžãããŠããªãå Žåã¯ããã«ãªã¯ãšã¹ããäœæããŠããããæ¹åããæ¹æ³ãæããŠãã ããã
2ã«ã€ããŠã¯ç³ãèš³ãããŸããããgtagsã«ã€ããŠã¯ããããããŸããã
ãã®ãããªè³ªåã¯ç¹°ãè¿ãåãããšæããŸãã 質åãåããåã«äœãã§ããŸããïŒ
ããã§ã$ HOME / .ctagsãããŒãããŠããå Žåããã®è³ªåã¯è¡šç€ºãããŸããã äºææ§ã¯çŽ æŽãããã§ãããããŠãªãããªãããã®ãã¡ã€ã«ã®ããŒãããããã®ãåãããŸããã ã³ãããce0617a7be7a4d33a09ac60f21b8a9ce26690853ã¯ãçç±ãèšããã«ãããå€æŽããŸããã
次ã«ããã¡ã€ã«ã移åããŠãæ§æãã¡ã€ã«ã«é¢ããèšé²ãæŽæ°ããå¿ èŠããããŸãã
ã³ãããã¯ïŒ1519ã®äžéšã§ãããããçç±ã¯ããã«èšèŒãããŠããŸãã
äºææ§ãç Žãããšã¯æªãèãã§ãã ãã ããu-ctagsã®åæããŒãžã§ã³ããªãªãŒã¹ãããšãã¯ãäžåºŠã ãå®è¡ããŸãïŒé¡ã£ãŠããŸãïŒã æåŸã¯ã¿ã°ãã¡ã€ã«åœ¢åŒã ãšæããŸãã æãéèŠãªããšã¯@ b4nã«ãã£ãŠè¡ãããŸãã ç§ãããªããã°ãªããªãã®ã¯assigning version 3 tags file format
ãšãã®ããã®ããã¥ã¡ã³ããäœãããšã§ãã
~/.ctags.d/*.ctags
ãšïŒããŒã«ã«ã§ïŒ ./.ctags.d/*.ctags
äž¡æ¹ã䜿çšããŠãå
ã®ãã¹ã¿ãŒãšåãåé¡ãçºçããŸãã
UniversalCtagsãµããŒãã§ã³ã³ãã€ã«ãããGNUGlobal6.6.3ã䜿çšããŠããŸãã GTAGSCONF
ã¯ããã©ã«ãã®gtags.conf
ã€ã³ã¹ããŒã«ãã¹ãæãã GTAGSLABEL
ã¯new-ctags
ã§ãã
Globalã®/plugin-factory/exuberant-ctags.c
ïŒUniversal Ctagsã®åŒã³åºãã«äœ¿çšã193è¡ç®ããïŒã®ãœãŒã¹ã³ãŒãã調ã¹ãŸãããã .ctags.d/*.ctags
èªã¿èŸŒã¿ãç¡å¹ã«ãããªãã·ã§ã³ãªãã§UniversalCtagsãåŒã³åºãããããã§ãã ã
ãããã°ããŒãã«éçºè ã«å ±åããå¿ èŠãããå Žåã¯ãæããŠãã ãããããããŸãã :)
åçŸããã«ã¯ïŒ
git clone -b tests --single-branch https://github.com/janEbert/julia-ctags.git
cd julia-ctags
mkdir -p ~/.ctags.d
mkdir -p .ctags.d
ln -s $PWD/ctags ~/.ctags.d/julia.ctags # or cp if you want to be safe
ln -s $PWD/ctags ./.ctags.d/julia.ctags
gtags
global greet # returns nothing
次ã®ããã«ctagsãçŽæ¥åŒã³åºãã®ã¯ã©ãã§ããïŒ
$ new-ctags --version
$ new-ctags -o - JULIA-FILE
æåŸ éãã®çµæãåŸãããŸããïŒ
ã¯ããUniversal CtagsïŒç§ã®ãã·ã³ã§ã¯uctags
ã GTAGSLABEL
ã¯ãã€ããªã®ååã§ã¯ãããŸããïŒã®åŒã³åºãã¯ã --options
æå®ããã.ctagsãã¡ã€ã«ã®æç¡ã«ããããããçŽæ¥å®å
šã«æ©èœããŸãã
ãã®ãããUniversal Ctagsã¯ã/ .ctags.dãã¡ã€ã«ã䜿çšããŸãããã©ãããããããã®åäœã¯ã°ããŒãã«ã«è»¢éãããŸããã
--optionsã¯äœ¿çšããªãã§ãã ããã uctagsã¯ã-optionsãæå®ããã«ã/ .ctags.d /julia.ctagsãš./.ctags.d/julia.ctagsãããŒãããå¿ èŠããããŸãã
ã ããç§ãããªãã«å®è¡ããŠã»ããã®ã¯ïŒ
$ uctags --version
$ uctags -o - JULIA-FILE
ã³ãã³ãåºåãèŠããã®ã§ããã
ãšããã§ãGNU / Linuxã§ctagsã䜿çšããŠããŸããïŒ
ç³ãèš³ãããŸããããã¯ã£ããããŸããã§ããã uctags
ã¯ã --options
ãã©ã°ãæå®ããªããŠããå¿
èŠã«å¿ããŠ~/.ctags.d
ã®å
容ã䜿çšããŸãã ãã ããããã¯ãšã³ããšããŠuctags
ããŠgtags
ã䜿çšããå Žåã ~/.ctags.d
ã¯äœ¿çšãããŸããã
ã¯ããGNU / Linuxãç¹ã«Ubuntuã§äœ¿çšããŠããŸãã åºåã¯æ¬¡ã®ãšããã§ãã
$ uctags --version
Universal Ctags 0.0.0(1a94658c), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Jul 29 2019, 13:42:51
URL: https://ctags.io/
Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +packcc
$ uctags -o - testfile.jl
CtagsTest testfile.jl /^module CtagsTest$/;" f
ImmutablePoint testfile.jl /^struct ImmutablePoint{T}$/;" f
MutablePoint testfile.jl /^mutable struct MutablePoint{T}$/;" f
addcoment testfile.jl /^addcoment(string::AbstractString, comment, spaces=1) = begin # Maybe write without `begin`?$/;" f
addone! testfile.jl /^function addone!(x::T) where {T <: Number}$/;" f
deprecated_returnsquarepower testfile.jl /^deprecated_returnsquarepower() = 2.0$/;" f
multiply testfile.jl /^multiply(x, y) = x * y$/;" f
multiply testfile.jl /^multiply(x, y...) = begin$/;" f
printgreeting testfile.jl /^ function printgreeting(x)$/;" f
square testfile.jl /^function square(x)$/;" f
ç·šéïŒUniversal Ctagsã®æ°ããããŒãžã§ã³ãã³ã³ãã€ã«ããŸããããåºåã¯åããŸãŸã§ããã
åºåã«ã¯ãäžèšãããã«åçŸããããã«äŸã§äœ¿çšããgreet
é¢æ°ã¯è¡šç€ºãããŸããã ããã¯ããªã³ã¯å
ã®ãã©ã³ãã®å€ãããŒãµãŒãåå ã§ãã global greet
ãglobal square
眮ãæããã ãã§ãåºåã¯åŸãããŸããã
okã¹ã¿ã³ãã¢ãã³ãââãã°ã©ã ãšããŠãuctagsã¯ããŸãæ©èœããŸãã
GNU / Linuxã䜿çšããŠããŸãã è¯ãïŒ ç§ã¯ããªãããã£ãšå©ããããšãã§ããŸãã
straceããã±ãŒãžãã€ã³ã¹ããŒã«ããŠãã ããã Ubuntuã«ã€ããŠã¯ããããããŸããããapt-getãstraceãã€ã³ã¹ããŒã«ããã³ãã³ããããããŸããã
次ã«å®è¡ããŸã
$ strace -s 4096 -f -e execve,execveat gtags
åºåãèŠããã®ã§ããã
okã¹ã¿ã³ãã¢ãã³ãââãã°ã©ã ãšããŠãuctagsã¯ããŸãæ©èœããŸãã
ã¯ããã¹ã¿ã³ãã¢ãã³ã§çŸããåäœããŸãïŒ
GNU / Linuxã䜿çšããŠããŸãã è¯ãïŒ ç§ã¯ããªãããã£ãšå©ããããšãã§ããŸãã
ç³ãèš³ãããŸããããå ã»ã©ã¯è§ŠããŸããã§ããã
$ strace -s 4096 -f -e execve,execveat gtags
execve("/usr/local/bin/gtags", ["gtags"], 0x7ffe7e8d0fe8 /* 83 vars */) = 0
strace: Process 2210 attached
[pid 2210] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c855b0 /* 84 vars */) = 0
strace: Process 2211 attached
[pid 2211] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c97410 /* 84 vars */) = 0
[pid 2210] +++ exited with 0 +++
[pid 2209] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2210, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
[pid 2211] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2211, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
straceã®åºåã¯ãgtagsãuctagsãåŒã³åºããªãã£ãããšã瀺ããŠããŸãã
ã©ããããããšããè¿·æããããŠããããªããã
ãããGLOBALã®éçºå
ã«æžããŸãïŒ
ãŸãããããšãïŒUniversal Ctagsã¯çŽ æŽãããã§ããïŒïŒ
ãããç§ã¯å°ãè©ŠããŠã¿ãŸããã ããªããšã·ãžãªã®ã©ã¡ããæžãã¹ããããããŸããã
GNU Globalã¯ãGTAGSCONFãã¡ã€ã«ã®langmap
èšå®ã䜿çšããŠããã¡ã€ã«gtags
ããã»ã¹ããã£ã«ã¿ãªã³ã°ãããããã®èšå®ãUniversalCtagsã«æž¡ããŸãã
ããæç¹ã§ãJuliaïŒ.jlïŒã®ãã¡ã€ã«æ¡åŒµåãã°ããŒãã«æ§æã«è¿œå ããŸããããUniversalCtagsã¯æ¬¡ã®èŠåã§åæ¢ããŸããã
äžæãªèšèªã[langmapsã®ãªã¹ã]ã
ãã®åé¡ã¯ãUniversal Ctagsãæåã«åŒæ°ã解æããŠããããªãã·ã§ã³ã.ctags.d
ããŒãããããã«çºçããŸãã --langmap
ãªãã·ã§ã³ãæž¡ãåã«--options=[...].ctags
ãæ瀺çã«æž¡ãããã«Globalãå€æŽããŸããã
ãã®åŸããã¹ãŠãåã³å®å
šã«æ©èœããã°ããŒãã«ããŒãã«ãååŸããŸãã
ç§ãèšã£ãããã«ããããããªããå€æŽããããã®ã§ãããã©ããïŒãŠãããŒãµã«Ctagsãžã®åŒæ°ã®åã«.ctags.d
ãã¡ã€ã«ãåŠçãããããã«ïŒããŸãã¯ã°ããŒãã«ã«ã¬ããŒããæåºããå¿
èŠããããã©ããã¯ããããŸããã
ãã®åé¡ã¯ãUniversal Ctagsãæåã«åŒæ°ã解æããŠããããªãã·ã§ã³ã.ctags.dã«ããŒãããããã«çºçããŸãã
ç§ã¯ããå®è£
ããŸããã§ããã
ããã€ãã®äŸå€ã¯ãããŸãããUniversal-ctagsã¯.ctags.d / *ãctagsãããŒãããŠãããã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã解æããŸãã
ctags-optlib.7ã®ããã¥ã¢ã«ããŒãžã«æžããããã«ã-_ echo = MSGãªãã·ã§ã³ã䜿çšããŠãu-ctagsãèšå®ãã¡ã€ã«ãããŒãããæ¹æ³ãç解ããŠãããã°ã§ããŸãã
[yamato@slave]~% ls ~/.ctags.d
config.ctags
[yamato@slave]~% cat ~/.ctags.d/config.ctags
--_echo=hello from dot-ctags
[yamato@slave]~% u-ctags --_echo="hello from cmdline" --_force-quit
u-ctags: Notice: hello from dot-ctags
u-ctags: Notice: hello from cmdline
ctags.1ã®ããã¥ã¢ã«ããŒãžãåç
§ããŠãã ããã --optionsãctagsã«æž¡ãããçç±ãããããŸããã
julia.ctagsãã/ .ctags.dã«é
眮ããã ãã§ãç®çãéæã§ããå ŽåããããŸãã u-ctagsã¯julia.ctagsãèªåçã«ããŒãããŸãã ãããã£ãŠã-optionsãæ瀺çã«æå®ããå¿
èŠã¯ãããŸããã
ããŠãç§ã¯ã¡ããã©ããäžåºŠãã¹ãããŸããããããŠç§ããããšã©ãŒãåãåããŸããã ãè¿·æããããããŠç³ãèš³ãããŸããã