从emacs编译缓冲区中删除误报

时间:2013-11-08 11:12:26

标签: emacs compilation elisp

在我工作的一些项目中,编译输出有一些不是错误的行,但是因为它们很相似而混淆了Emacs。

当我使用next-error时,这些误报非常不方便,并且因为它们被误认为是错误而在视觉上分散注意力。

我可以制作一个过滤掉这些误报的正则表达式。我想避免的是搞乱compile.el内置的regexp;它们非常复杂,更重要的是它们可能会在Emacs升级中发生变化。

所以我正在寻找的方法是告诉compile.el什么正则表达式是误报(可能使用compilation-filter-hook)所以它们不会被标记为错误。

想法?

2 个答案:

答案 0 :(得分:2)

您可以尝试类似

的内容
(add-hook 'compilation-mode-hook
          (lambda ()
            (font-lock-add-keywords nil
               '(("my-regexp"
                  (0 '(face nil font-lock-face nil
                       compilation-message nil help-echo nil mouse-face nil) t)))
               'append)))

这是丑陋和脆弱的,所以你可能想要M-x report-emacs-bug并要求一个新的功能,让你以更清洁的方式指定它。

答案 1 :(得分:1)

  1. 除了@Stefan提到的自动过滤功能外,您还可以根据需要手动过滤。 *Compilation**grep*等缓冲区就是:缓冲区。因此,您可以编辑它们。 (对于某些此类缓冲区,您需要先关闭只读。)

    然后使用flush-lineskeep-linesnext-error等完成您想要的任务:它们始终使用经过编辑的命中列表。

    (事实上,*grep*等缓冲区默认是可写的。)

  2. 如果使用Icicles,则可以在编译命中或grep命中(例如*grep*)的缓冲区中使用C-c`(icicle-compilation-search)来浏览相应的代码。这样做的优点是可以轻松地动态过滤命中,并且可以按各种排序顺序在它们的任何子集之间循环。

    在Emacs grep中使用它可以为您提供两个级别的正则表达式搜索:1)grep正则表达式和2)您当前的输入正则表达式(使用C-c`)。您可以使用渐进式完成(S-SPC)添加其他正则表达式来匹配。