增强ctags对lua的支持
来源:互联网 发布:工艺流程图设计软件 编辑:程序博客网 时间:2024/06/04 23:58
1) ctags默认对lua的支持仅限于识别function, 不支持识别常量定义.
2) 如果通过CLASS:MEMBER_FUN(...)方式以及CLASS.MEMBER_FUN()方式定义的function, 所生成的tags是如下形式:
CLASS:MEMBER_FUN ...省略
CLASS.MEMBER_FUN ...省略
这样的tags文件无法直接通过MEMBER_FUN跳转过去. , 比如:通过:tselect MEMBER_FUN也无法找到对应的tag,
除非通过tselect /^.*MEMBER_FUN来找, 但是通过正则效率又太低. 而且会找到很多无关的匹配项.
所以, 本文研究了通过其他手段来生成lua的tags. 主要需要解决两个问题,
1) 支持能对lua中定义的常量/变量生成tags. 为了放置太多变量被索引, 限制变量的值必须是数字. 因为几乎所有的枚举值/常量的值都是数字.
2) 生成的tags去掉类名前缀, 比如:"CLASS:"以及"CLASS."前缀, 以便通过MEMBER_FUN能够直接跳转过去.
解决方法:
用ctags自定义的生成规则, 自己生成了lua文件的tags, 目前看来基本满足需求.
ctags --langdef=MYLUA --langmap=MYLUA:.lua --regex-MYLUA="/^.*\s*function\s*(\w+):(\w+).*$/\2/f/" --regex-MYLUA="/^\s*(\w+)\s*=\s*[0-9]+.*$/\1/e/" --regex-MYLU
A="/^.*\s*function\s*(\w+)\.(\w+).*$/\2/f/" --regex-MYLUA="/^.*\s*function\s*(\w+)\s*\(.*$/\1/f/" --regex-MYLUA="/^\s*(\w+)\s*=\s*\{.*$/\1/e/" --regex-MYLUA="/^\s*module\s+
\"(\w+)\".*$/\1/m,module/" --regex-MYLUA="/^\s*module\s+\"[a-zA-Z0-9._]+\.(\w+)\".*$/\1/m,module/" --languages=MYLUA --excmd=number -R .
关于ctags自定义语言的tags生成器的规则网上可以找到, 参考如下文章:
http://www.cnblogs.com/jianyungsun/archive/2011/01/20/1940262.html
http://helloxchen.itpub.net/category/42725/66614
这里简单的说明一下
1) 上面的语句定义了一种新的语言MYLUA, 该语言支持的文件后缀为*.lua. 定义了几条从源文件生成tags的正则替换规则,
其中三条用来识别function,
两条用来识别常量.
两条用来识别module
ctags在处理时会扫描lua文件的每一行, 分别施加上面几条规则, 任意一条规则匹配上, 则把匹配结果加入的tags文件.
2) 正则语法默认采用perl 兼容的正则语法. 也就是等价于 grep -E, 或者 egrep
3) --excmd指示生成的tags文件的格式. number表示直接写入tag所在文件的行号, 跳转效率最好, 生成的tags文件也比较小.
但是当源文件给改动后, 行号就会不匹配. 可以改为 --excmd=pattern , 这样生成正则匹配的跳转点. 不受源文件修改的影响.
4)-R . 对当前目录以及递归子目录的所有lua文件生成tags
举例:
1.lua文件:
module "modules.submodule.mymodule1"module "modules.mymodule2"module "mymodule3"OBJECT_IDS = {XX=1,YY = 2,msg_login= 8001,msg_login2= 8001, -- logon}function hello()return nilendfunction xxx.hello()return nilendfunction xxx:hello()return nilend
!_TAG_FILE_FORMAT2/extended format; --format=1 will not append ;" to lines/!_TAG_FILE_SORTED1/0=unsorted, 1=sorted, 2=foldcase/!_TAG_PROGRAM_AUTHORDarren Hiebert/dhiebert@users.sourceforge.net/!_TAG_PROGRAM_NAMEExuberant Ctags//!_TAG_PROGRAM_URLhttp://ctags.sourceforge.net/official site/!_TAG_PROGRAM_VERSION5.9~svn20110310//OBJECT_IDS1.lua4;"eXX1.lua5;"eYY1.lua6;"ehello1.lua11;"fhello1.lua14;"fhello1.lua17;"fmsg_login1.lua7;"emsg_login21.lua8;"emymodule11.lua1;"mmymodule21.lua2;"mmymodule31.lua3;"m
注: 在如下环境测试通过
linux:
Linux ubuntu 2.6.32-21-generic
ctags:
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Mar 6 2010, 15:35:10
Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
- 增强ctags对lua的支持
- 解决ctags对php的支持
- ctags 对shell语言的支持
- ctags支持lua和protobuf
- ctags支持lua protobuf thrift objective-c
- SourceInsight 增加对Lua语言的支持
- SourceInsight 增加对Lua语言的支持
- Unity编辑器对Lua文件的支持
- IE10将增强对HTML5和CSS3的支持
- source insight 增加对lua语言的支持配置
- swig(Lua)对STL/C++ library的支持
- 改善Unity编辑器对Lua文件的支持
- 支持对列表操作的栈(lua)
- Mac Terminal增强对git命令支持
- Mac Terminal增强对git命令支持
- [zz] 让ctags更好的支持php
- ctags for lua relevant
- #灵感笔记#关于增强IE对CSS选择符的支持
- 自定义Android TabHost的背景及文字
- android 里 thumbdata3 数据格式
- MSSQL兼容级别问题(关键字‘FOR’附近有语法错误)
- C#条形码
- VC画图双缓冲去闪烁
- 增强ctags对lua的支持
- 【Linux基础】线程发展历程
- Mediawiki常见的配置和修改方法
- Java使用Sqlite
- ImageView简单加载网络图片
- 《HeadFirst设计模式》学习笔记——策略模式
- Cocos2d-x学习笔记(3)cocos2d-x的坐标系相关概念的几点使用说明
- 软件破解常用汇编指令
- (黑马程序员)银行业务调度系统