热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SubLimeText列出Lua的函数列表

SublimetextLuafunctions【说些废话】Sublimetext是我个人比较偏好的一款编辑器,它的扩展性非常好,最最重要的是,它能非常方便的实现跳转。这对于脚本开发者来说,至少

Sublime text Lua functions 【说些废话】 Sublime text是我个人比较偏好的一款编辑器,它的扩展性非常好,最最重要的是,它能非常方便的实现跳转。这对于脚本开发者来说,至少对于我来说,是最好用的一个功能。 【常用命令】 我个人最常用的命令是: ctrl + p:跳转到文件。对于自己负责的模块,切换起来非常方便。 ctrl + g:跳转到指定行。主要是根据Lua的traceback里的信息,跳转到响应行里去。 ctrl + r:列出Lua的函数列表。 【但是】 ctrl + r 这个功能只有在你按如下的 pattern 来书写 function 时,才会列出该方法的名字。
-- 1function A(param1, param2)
-- 或者
function A:B(param2, param2)
之前我在的公司,大部分函数都是向上面那样写的,但现在到新单位了,他们的写法不是这样的,为了风格统一,我也只有舍弃之前的写法。
-- 2A = function(param1, param2)
-- 或者
A.B = function(param1, param2)
如果你也是按照第二种写法的话,而且你也是使用 sublime text 来开发的话,你就会苦恼的发现,ctrl + r 不能识别通过第二种写法定义的function了。
是啊!!很头疼!!!特别是一个文件七八百行,然后又列不出 function 来,那样找个函数都要拖来拖去!真麻烦! 所以,我就想到了去改 sublime text 的插件。 下面就介绍我是如何修改 sublime text 的插件,使得 ctrl + r 可以列出两种写法的function的。 ------------------------------------------------------------------------------------------------------------------------- 【重点来了】 首先,通过 menu --> Preferences  -->  Browse packages...  进入到 sublime text 的 package 文件夹,打开 Lua 的package文件夹。
找到这两个文件,其中一个是缓存文件,我们主要要修改 Lua.tmLanguage 文件,修改完后,需要删除.cache缓存文件,然后重启 sublime text .(上图的 Lua.tmLanguage 文件是作者已经修改过的,所以大小是 8kb。)然后,就用 sublime text 打开这个文件,
定位到 meta.function.lua 这里,接下来是重点中的重点
key-string,看起来很熟悉的样子,我们不用去管。我们需要关注的是
match\b(function)\s+([a-zA-Z_.:]+[.:])?([a-zA-Z_]\w*)\s*(\()([^)]*)(\))
是的, ... 里的内容是个正则表达式,它匹配的就是Lua的function,再仔细看一下,就会注意到,这个正则表达式里用"()"括号捕获的内容正好是6个,刚好对应了上面 captures 后面跟着的数组长度。
以 \b(function)\s+([a-zA-Z_.:]+[.:])?([a-zA-Z_]\w*)\s*(\()([^)]*)(\)) 为例,我们捕获出来的第一个组是 function,它对应的是 1namekeyword.control.lua哦,这样我们明白了,function是关键字,关键字对应的是 keyword.control.lua 。第二组:([a-zA-Z_.:]+[.:])?   对应   entity.name.function.scope.lua     -->  scope 是范围的意思。第三组:([a-zA-Z_]\w*)\s*  对应   entity.name.function.lua      --> 这里的内容就是 function 的名字,第四组 - 第六组 是参数的开始和参数的结束。
看懂了上面这个,再来结合例子:
function A.B(param1, param2)end
其匹配的 pattern 如下:\b(function)\s+([a-zA-Z_.:]+[.:])?([a-zA-Z_]\w*)\s*(\()([^)]*)(\))
在这个例子里,"function "匹配 上面 pattern 里的 "\b(function)\s""A." 匹配 pattern 里的 "([a-zA-Z_.:]+[.:])?""B"  匹配 pattern 里的 "([a-zA-Z_]\w*)"参数的暂时不去理会。按照这个正则表达式, 是没法匹配:local A.B = function(param1, param2)的。
-------------------------------------------------------------------------------------------------------------------------【接下来,修改】找到了正则表达式,就要做相应的修改。这里推荐一个在线测试正则表达式的网站:http://www.regexr.com/作者就是在这个网站里慢慢测试出来的。哦对了,sublime text 是用的 python 做脚本,上面的正则表达式也是 python 里的,如果不懂的话,可以去http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html里学习一下。
有了上面的工具和python正则表达式的基础,作者就对 Lua.tmLanguage 文件做了如下修改:
captures1namekeyword.control.lua2nameentity.name.function.scope.lua3nameentity.name.function.lua4namekeyword.control.lua5namekeyword.control.lua6nameentity.name.function.scope.lua7nameentity.name.function.lua8namepunctuation.definition.parameters.begin.lua9namevariable.parameter.function.lua10namepunctuation.definition.parameters.end.luamatch\b(local)?\s*([a-zA-Z0-9]*[.])?(\w*)\s*(=)?\s*\b(function)\s?+([a-zA-Z_.:]+[.:])?([a-zA-Z_]\w*)?\s*(\()([^)]*)(\))namemeta.function.lua
注意:原来的那个我们不去替换,我们只是增加了新的在原来的后面。然后删除 Lua.tmLanguage.cache 文件,重启 sublime text ,找个文件测试:
【大功告成】-------------------------------------------------------------------------------------------------------------------------

推荐阅读
  • vue使用
    关键词: ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了redis调优的实战经验相关的知识,希望对你有一定的参考价值。本文根据redis的inf ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 整整的花了一个下午的时候,才在lua中调用了动态链接库。比起其他脚本语言,lua的调用方式算是比较繁琐的,但是lua的编程思想非常的统一& ... [详细]
  • 我有一个非常大的TSV文件。第一行是标题。如果字段为空白,则以下各行包含数 ... [详细]
author-avatar
茶不离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有