24

如何为 Go 源代码生成标签文件

在 mac 中,我安装了 exuberant ctags ,并在源目录中尝试了以下命令

ctags -f gosource.tags -R `pwd`

但是,它不考虑 *.go 文件。我必须使用 -h 选项吗?但是,根据手册,它不仅适用于头文件吗?

请给我正确的命令,以便我可以在 vim 中使用标签文件。我也更喜欢绝对路径,这样我就可以将文件保存在任何地方

谢谢。

编辑:我假设当前的 ctags 支持 Go,看到http://groups.google.com/group/golang-nuts/browse_thread/thread/3a4848db231b02c9

但是,http: //ctags.sourceforge.net/languages.html 没有列出。

4

4 回答 4

46

将以下内容添加到 ~/.ctags

--langdef=Go
--langmap=Go:.go
--regex-Go=/func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\2/d,func/
--regex-Go=/var[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,var/
--regex-Go=/type[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,type/

(来自http://go-wise.blogspot.com/2011/09/using-ctags-with-go.html

于 2011-11-23T03:02:30.800 回答
19
--langdef=Go
--langmap=Go:.go
--regex-Go=/func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\2/f,func/
--regex-Go=/var[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/v,var/
--regex-Go=/type[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/t,type/

确实适用于 ctags 5.8。与上一张海报略有不同,ctags 在正则表达式行的末尾需要唯一的 1-char 类型。因此/d,func/应该/f,func/直观地阅读。这允许 ctags 区分和识别类型,允许ctags --go-types=fvt

于 2012-08-24T17:20:56.157 回答
5

我看到了你的帖子,摸索了一下,试图找到一个好的工具来完成这项工作,尝试了 ctags,最终还是不满意。我在 Go 中编写了一个程序“gotags”,它为 Go 代码生成一个 ctags 文件。它比当前的 ctags 支持更好,例如,它标记结构字段名称以及结构名称本身。你可以在这里得到它:https ://github.com/necro351/gotags 。

它是一个不错的简短 Go 程序,因为它使用标准库解析器并且除了良好的 Go 解析和标记之外没有其他功能。只需检查它(或去获取它)并进行安装。另外,如果您对改进它有任何建议或想法,请告诉我。

编辑:我是一个活跃的 Gopher,所以会随着时间的推移和我使用它而更新这个工具。

编辑:我不再积极开发 Go。但是我的工具短,几乎可以正常工作,所以它应该“正常工作”:)

于 2014-11-29T06:28:39.413 回答
0

检查 Go Dashborad/Projects的“标签生成器”部分。我不知道这些工具的状态。

编辑 2011-11-22:今天宣布的最新egotags分叉(可以循环引用;-)

于 2011-11-21T10:47:08.300 回答