【问题标题】:How to gray out "// comment" lines in Emacs?如何在 Emacs 中使“// 注释”行变灰?
【发布时间】:2011-10-22 16:40:11
【问题描述】:

Emacs 中的正则表达式问题:如何突出显示所有以“//”开头的行?

我想在文本模式下将我的 cmets 变灰,但以下 sn-p 似乎不起作用:

(add-hook 'text-mode-hook
(lambda()
  (font-lock-add-keywords nil
  '(("^//.+"
     1 font-lock-comment-face prepend)))))

'Re-builder' 表示这种表达方式应该起到作用。怎么了?谢谢!

【问题讨论】:

  • 您应该将您的解决方案作为答案发布并自己接受。这样,其他有相同问题的用户就会找到您的问题并看到它已得到解答。
  • 完成,感谢您的提示。我在发布后立即找到了解决方案,并且出于不耐烦想立即发布它。但我不被允许,因此编辑。对不起,不会再发生了。
  • @mart:没关系。现在一切都井井有条。

标签: regex emacs


【解决方案1】:

好的,我想通了。 "^\\(//.*\\)$" 完成这项工作。

对于可能的“垃圾邮件”,我们深表歉意。我提前做了将近两个小时的谷歌搜索;正则表达式似乎超出了我的想象。

【讨论】:

  • +1:仅供参考,这里的问题是 Emacs 对 RE 语法的变体使用 \(\) 来捕获括号(许多其他变体使用 (),但不是在这里)。这些文字反斜杠必须在程序代码中的字符串中加倍。
  • 是的,谢谢您的解释;这也是我(最终)意识到的。
【解决方案2】:

由于正则表达式匹配要应用突出显示的所有内容,因此还有另一种方法:

(add-hook 'text-mode-hook
(lambda()
  (font-lock-add-keywords nil
  '(("^//.+"
     0 font-lock-comment-face prepend)))))

0 表示使用整个匹配(而不是 1 用于第一个子模式等)


请注意,如果您正在编写 emacs 模式,那么他们这样做的方式是定义一个合适的语法表,将此类事物声明为注释,然后安排荧光笔使用 cmets 的注释面. (我认为如果完全打开它,默认情况下会这样做。)tutorial on writing major modes 涵盖了完整的 C++ 风格的 cmets,并说明了如何自己做。

【讨论】:

  • 谢谢。我不是在写模式,我只需要稍微调整一下 Markdown 模式。我主要写文本(不是代码),“//”是我首选的 cmets 语法。现在它已经很好地变灰了,这就是我目前所需要的。不过,总有一天我一定会自己研究写作模式。
  • @mart:好的,我不能确定,所以我提到了。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 2011-06-22
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多