Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1076509
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类: Java

2011-05-02 12:28:42

如果你喜欢使用vim/gvim编写scala代码,那么一个tags文件就十分重要了,有了tags文件,vim可以:
1. 在阅读代码时:跳转到一个指定类、函数等的定义处;
2. 在编写代码时:自动补全类名、函数名等;

      ctags没有自带对scala语言的支持,但通过下面一个简单的用户自定义语言,可以让ctags支持scala。当然,
这样使用ctags一个最大的问题就是不准确,此时,ctags不进行任何语法分析,只是简单的正则匹配。(注:
我不知道ctags在其它语言上是否会进行语法分析,很可能也不会。)

      首先,在$HOME/建立一个配置文件“.ctags”,并将如下的语言定义放入其中:
  1. --langdef=scala
  2. --langmap=scala:.scala
  3. --regex-scala=/^[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\1/c,classes/
  4. --regex-scala=/^[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\1/t,traits/
  5. --regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
  6. --regex-scala=/^[ \t]*def[ \t]+([a-zA-Z0-9_\?]+)/\1/m,methods/
  7. --regex-scala=/^[ \t]*val[ \t]+([a-zA-Z0-9_]+)/\1/C,constants/
  8. --regex-scala=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)/\1/l,local variables/
  9. --regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/
  10. --regex-scala=/^[ \t]*case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/
  11. --regex-scala=/^[ \t]*final case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/
  12. --regex-scala=/^[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\1/o,objects/
  13. --regex-scala=/^[ \t]*private def[ \t]+([a-zA-Z0-9_]+)/\1/pd,defs/
这样,ctags就可以识别.scala后缀名和scala语言了。使用命令:
  1. ctags -h ".scala" -R
就可以在当前目录下递归地为所有的scala源文件建立tags了。

注意,上面的.ctags定义其实并不完全符合scala的语法定义,正则表达式中没有加入对特殊符号的支持。


比较良好的创建tags的方法也许是利用scala-compiler.jar中暴露出来的API,通过语法分析而得到。
阅读(2179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~