Go的ctag数据库

时间:2011-11-20 20:13:21

标签: go ctags exuberant-ctags

如何为Go source生成标签文件

在mac中,我安装了繁琐的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 个答案:

答案 0 :(得分:40)

将以下内容添加到〜/ .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

答案 1 :(得分:17)

--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

答案 2 :(得分:3)

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

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

编辑:我是一名活跃的Gopher,因此我会随着时间的推移更新此工具。

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

答案 3 :(得分:0)

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

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