3

我有一些 Java 代码

@Subscribe
public void catchEvent(SomeEvent

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

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

这应该会生成类似“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

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

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

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

谢谢!

4

1 回答 1

1

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

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

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

于 2021-02-01T09:27:03.823 回答