>我在默认compilation-error-regexp-*
将任何具有两个单独列的行匹配为错误代码时遇到问题
示例:file:15:
将链接到路径 file
中的第 15
行
但不幸的是,# file:15:
现在是否链接到不存在的路径# file
。
请尝试在perl或python模式下编译以下内容(它在两种语言中都有效),您将了解我的问题:
print "# file:15:";
我不能忽视这一点,因为我激活了compilation-auto-jump-to-first-error
这非常方便,但现在它会弹出一个文件浏览器,试图打开这个不存在的文件# file:15:
。
我已经检查了compilation-error-regexp-alist
和compilation-error-regexp-alist-alist
但我的perl设置不包括这样的正则表达式,我什至没有任何python设置。
我检查了"emacs -Q"以确保它不是我的任何设置。
M-x compile RET python /tmp/py.py RET
使用上面的代码将突出显示#文件:15:作为错误行
问题:如何重新定义或摆脱此正则表达式?
干杯 兰克斯
更新:不,将grep-regexp-alist
设置为空列表并没有解决它。
好的,我想我发现了问题。
查看 compile.el 发现grep-regexp-alist
也被评估"(为什么???)。
有人将第一个条目更改为
(("^\(.+?\)\(:[ ]*\)\([0-9]+\)\2" 1 3)
...
.+ 表示开始和第一个冒号之间的任何内容都被视为文件名,包括空格和哈希。
还不知道如何在编译脚本时禁用用于 grep 输出的正则表达式,一旦我知道就会更新。
OK
我深入研究了编译模式的来源,但我无法确定这个贪婪的默认正则表达式的来源。
但是我找到了解决方法!
在默认正则表达式可以执行之前,必须定义一个自己的正则表达式,该正则表达式与相同的行匹配,并且必须更正匹配的组以避免奇怪的字符。
这是一个概念证明
(add-to-list 'compilation-error-regexp-alist-alist '(perl "^.*?\([a-zA-Z/][^ n#]+\):\([0-9]+\):" 1 2))
现在,仅匹配以字符或斜杠开头且中间没有空格或 # 的路径。任何其他主要字符都将被忽略。
当然,您仍然需要为典型的Perl错误消息附加旧的正则表达式,为了可读性,我省略了它。
而且您必须为每种编程模式执行此操作...
呵呵 兰克斯