ctags 的多行正则表达式

ddr*_*ian 5 regex ctags exuberant-ctags

我有一些Java代码

@Subscribe
public void catchEvent(SomeEvent
Run Code Online (Sandbox Code Playgroud)

我想将它与我的 ~/.ctags 中类似的东西相匹配

--langdef=javaspring
--langmap=javaspring:.java
--regex-javaspring=/@Subscribe(\s)*([a-z ]+)\s([a-zA-Z]*)\(([a-zA-Z]*)/\3-\4/
Run Code Online (Sandbox Code Playgroud)

这应该会生成类似“catchEvent-SomeEvent”的内容,但事实并非如此。如果我删除 @Subscribe 和 public void 之间的换行符,它就会得到它。

@Subscribe public void catchEvent(SomeEvent

rm -rf tags && ctags -R . && cat tags|grep Subs
catchEvent-SomeEvent    PathToMyFile.java    /^@Subscribe public void catchEvent(SomeEvent event) {$/;"      r
Run Code Online (Sandbox Code Playgroud)

我什至尝试像这样使用行的开始/结束

--regex-javaspring=/^\s*@Subscribe[a-z \s]+\s([a-zA-Z]+)\(([a-zA-Z]+).*$/@Subscribe \1 \2*/
Run Code Online (Sandbox Code Playgroud)

您知道我是否可以使用当前的 ctag 实现来做到这一点吗?我是做错了什么还是 ctags 现在不支持多行正则表达式。

谢谢你!

Viv*_*edt 2

--mline-regex-<LANG>对于通用 Ctags,您可以通过以下选项使用该功能{mgroup=1}

--mline-regex-javaspring=/^\s*@Subscribe[a-z \s]+\s([a-zA-Z]+)\(([a-zA-Z]+).*$/@Subscribe \1 \2*/{mgroup=1}
Run Code Online (Sandbox Code Playgroud)

mgroup选项是告诉 Ctags 如何确定表达式的行号所必需的。