我正在尝试将其他一些代码编辑器中的功能添加到我的 Emacs 配置中,从而 #if 0...#endif 块中的 C/C++ 代码自动设置为注释面/字体。根据我的测试,cpp-highlight-mode做了我想要的,但需要用户操作。似乎绑定字体锁定功能是使行为自动化的正确选项。
我已经成功地按照 GNU 文档中的示例更改了单行正则表达式的外观。例如:
(add-hook 'c-mode-common-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(FIXME\\|TODO\\|HACK\\|fixme\\|todo\\|hack\\)" 1
font-lock-warning-face t)))))
可以很好地突出显示文件中任何位置的调试相关关键字。但是,我在将 #if 0...#endif 匹配为多行正则表达式时遇到问题。我在这篇文章中找到了一些有用的信息(How to compose region like "<?php foo; bar; ?>"),这表明必须专门告知 Emacs 以允许多行匹配。但是这段代码:
(add-hook 'c-mode-common-hook
(lambda ()
'(progn
(setq font-lock-multiline t)
(font-lock-add-keywords nil
'(("#if 0\\(.\\|\n\\)*?#endif" 1
font-lock-comment-face t))))))
仍然不适合我。也许我的正则表达式是错误的(尽管它似乎可以使用Mx re-builder),我搞砸了我的语法,或者我完全遵循了错误的方法。我在 OS X 10.6.5 上使用 Aquamacs 2.1(基于 GNU Emacs 23.2.50.1),如果这会有所不同的话。
任何援助将不胜感激!