ctags 能为多种编程语言的源代码生成 tags 缓存。
我用的是 ctags 的一个 alternative,只能用于 ruby 源代码的 ripper-tags,用法大致相同。
安装:
$ gem install ripper-tags
在 ruby 项目根目录下运行 ripper-tags -R 就能生成一个 tags 缓存,“-R”显然是搜索子目录,默认适用于 vim 可用的格式,如果你用其他编辑器可能需要调整生成格式,选项“-e”生成 emacs 可用的格式。
一个在 rails 项目中生成 emacs 可用 ctags 缓存的示例:
$ ripper-tags -eR --exclude=.git --exclude=tmp --exclude=public --exclude=app/assets
接下来就能使用你自己编辑器支持的 ctags 插件和功能了,我用的是 emacs,默认支持 ctag,我额外安装 counsel-etags 简单配置:
(use-package counsel-etags
:ensure t
:bind (("C-]" . counsel-etags-find-tag-at-point))
:init
(add-hook 'prog-mode-hook
(lambda ()
(add-hook 'after-save-hook
'counsel-etags-virtual-update-tags 'append 'local)))
:config
(setq counsel-etags-update-interval 60)
(push "build" counsel-etags-ignore-directories))
把光标移到代码的 tag 里按“ctrl + ]”搜索对应 tag:
如果你已经安装了补全插件 company,无需配置,company-etags 会自动识别你根目录下的 tags 文件增强补全功能。