如果你喜欢使用vim/gvim编写scala代码,那么一个tags文件就十分重要了,有了tags文件,vim可以:
1. 在阅读代码时:跳转到一个指定类、函数等的定义处;
2. 在编写代码时:自动补全类名、函数名等;
ctags没有自带对scala语言的支持,但通过下面一个简单的用户自定义语言,可以让ctags支持scala。当然,
这样使用ctags一个最大的问题就是不准确,此时,ctags不进行任何语法分析,只是简单的正则匹配。(注:
我不知道ctags在其它语言上是否会进行语法分析,很可能也不会。)
首先,在$HOME/建立一个配置文件“.ctags”,并将如下的语言定义放入其中:
- --langdef=scala
-
--langmap=scala:.scala
-
--regex-scala=/^[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\1/c,classes/
-
--regex-scala=/^[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\1/t,traits/
-
--regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
-
--regex-scala=/^[ \t]*def[ \t]+([a-zA-Z0-9_\?]+)/\1/m,methods/
-
--regex-scala=/^[ \t]*val[ \t]+([a-zA-Z0-9_]+)/\1/C,constants/
-
--regex-scala=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)/\1/l,local variables/
-
--regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/
-
--regex-scala=/^[ \t]*case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/
-
--regex-scala=/^[ \t]*final case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/
-
--regex-scala=/^[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\1/o,objects/
-
--regex-scala=/^[ \t]*private def[ \t]+([a-zA-Z0-9_]+)/\1/pd,defs/
这样,ctags就可以识别.scala后缀名和scala语言了。使用命令:
就可以在当前目录下递归地为所有的scala源文件建立tags了。
注意,上面的.ctags定义其实并不完全符合scala的语法定义,正则表达式中没有加入对特殊符号的支持。
比较良好的创建tags的方法也许是利用scala-compiler.jar中暴露出来的API,通过语法分析而得到。
阅读(2249) | 评论(0) | 转发(0) |