emacs 编译模式将错误的行标记为错误



>我在默认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-alistcompilation-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错误消息附加旧的正则表达式,为了可读性,我省略了它。

而且您必须为每种编程模式执行此操作...

呵 兰克斯

相关内容

最新更新