【问题标题】:emacs compilation-mode marking wrong lines as errorsemacs 编译模式将错误行标记为错误
【发布时间】:2014-12-13 20:42:01
【问题描述】:

我有一个默认 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

上面的代码将突出显示 #file:15: 作为错误行

问题:我怎样才能重新定义这个正则表达式或摆脱它?

干杯 局域网

【问题讨论】:

标签: regex perl emacs compilation error-list


【解决方案1】:

更新:将grep-regexp-alist 设置为空列表并不能解决问题。

好的,我想我找到了问题。

查看 compile.el 发现 grep-regexp-alist 也被评估了”(为什么???)。

有人将第一个条目更改为

 (("^\\(.+?\\)\\(:[       ]*\\)\\([0-9]+\\)\\2" 1 3)
   ...

.+ 表示开头和第一个冒号之间的任何内容都被视为文件名,包括空格和哈希。

还不知道如何在编译脚本时禁用用于 grep 输出的正则表达式,我会尽快更新。

【讨论】:

    【解决方案2】:

    好的

    我深入研究了编译模式的来源,但无法确定这个贪婪的默认正则表达式的来源。

    但我找到了解决方法!

    一个人必须定义一个自己的正则表达式,它在默认正则表达式之前可以匹配相同的行,并且必须更正匹配组以避免奇怪的字符。

    这是一个概念证明

    (add-to-list 'compilation-error-regexp-alist-alist '(perl "^.*?\\([a-zA-Z/][^ \n#]+\\):\\([0-9]+\\):" 1 2))
    

    现在仅匹配以字符或斜线开头且中间没有空格或 # 的路径。任何其他前导字符都将被忽略。

    当然,对于典型的 Perl 错误消息,您仍然需要附加旧的正则表达式,为了便于阅读,我将其省略了。

    你必须为每种编程模式都这样做......

    HTH 局域网

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多