Exuberant Ctags 在OSX上无法正常运行。

我想要在Lua中使用Ctags。

Ctags不支持Lua,所以我找到了一个命令:

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-MYLUA="/^.*\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 .

它太长了,或者你可以看一个仅用于Lua函数的更短的示例。

ctags --langdef=MYLUA --langmap=MYLUA:.lua --regex-MYLUA="/^.*\s*function\s*(\w+)\s*\(.*$/\1/f/" --languages=MYLUA --excmd=number -R .

这两个在Windows上都能正常工作。

在OSX上,没有错误,但标签文件为空。

PS:我使用的是Exuberant Ctags v5.8,而不是OSX上的默认ctags。

这是一个用于ctags的Lua测试代码。

function f1()
end

function c.f2()
end

function c:f3()
end
点赞
用户4098121
用户4098121

你可以在https://github.com/fishman/ctags上找到充满活力的 ctags 版本,它似乎具有本地 lua 支持。你尝试过使用它吗?

2014-12-24 17:19:08
用户3124700
用户3124700

最后,我修复了它。

  1. 在这个正则表达式中,'\w'不能使用('\w'也不行),我不知道为什么。我用'[^\s:>]'代替了'\w'。
  2. '\1'或'\2'必须转义为'\\1'或'\\2',但'\s'可以。也不知道为什么。

现在,命令改为

ctags --langdef=MYLUA --langmap=MYLUA:.lua --regex-MYLUA="/^.*\s*function\s*([^\s:.]+):([^\s:.]+).*$/\\2/f/" --regex-MYLUA="/^\s*([^\s:.]+)\s*=\s*[0-9]+.*$/\\1/e/" --regex-MYLUA="/^.*\s*function\s*([^\s:.]+)\.([^\s:.]+).*$/\\2/f/" --regex-MYLUA="/^.*\s*function\s*([^\s:.]+)\s*\(.*$/\\1/f/" --regex-MYLUA="/^\s*([^\s:.]+)\s*=\s*\{.*$/\\1/e/" --regex-MYLUA="/^\s*module\s+\"([^\s:.]+)\".*$/\\1/m,module/" --regex-MYLUA="/^\s*module\s+\"[a-zA-Z0-9._]+\.([^\s:.]+)\".*$/\\1/m,module/" --languages=MYLUA --excmd=number -R .

并且现在可以正常使用了。

2014-12-26 04:26:41