我有一些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现在不支持多行正则表达式。
谢谢!
答案 0 :(得分:1)
对于通用 Ctag,您可以使用带有 --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 如何确定表达式的行号。
答案 1 :(得分:0)
使用_multiline = N
[jet@localhost ~]$ cat foo.java
@Subscribe
public void catchEvent(SomeEvent
[jet@localhost ~]$ cat s.ctags
--langdef=javaspring
--langmap=javaspring:.java
--regex-javaspring=/@Subscribe(\s)*([a-z ]+)\s([a-zA-Z]*)\(([a-zA-Z]*)/\3-\4/{_multiline=2}
[jet@localhost ~]$ ~/var/ctags/ctags --options=./s.ctags --language-force=javaspring -o - foo.java
catchEvent-SomeEvent foo.java /^public void catchEvent(SomeEvent$/;" r