我正在尝试将其他代码编辑器中的功能添加到我的Emacs配置中,即在#if 0…#endif块内的C/C++代码自动设置为注释面/字体。根据我的测试,cpp-highlight-mode做了类似于我想要的事情,但需要用户操作。似乎将其与font-lock功能结合起来是使行为自动化的正确选项。
我已经成功地按照GNU文档中的示例更改了单行正则表达式的面貌。例如:
仍然对我不起作用。也许我的正则表达式有误(尽管使用 M-x re-builder 看似有效),我搞错了语法,或者完全走了错误的方向。我正在使用基于 GNU Emacs 23.2.50.1 的 Aquamacs 2.1,在 OS X 10.6.5 上运行,如果这有所区别,请知悉。
如有帮助将不胜感激!
我已经成功地按照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))))))
仍然对我不起作用。也许我的正则表达式有误(尽管使用 M-x re-builder 看似有效),我搞错了语法,或者完全走了错误的方向。我正在使用基于 GNU Emacs 23.2.50.1 的 Aquamacs 2.1,在 OS X 10.6.5 上运行,如果这有所区别,请知悉。
如有帮助将不胜感激!
#else
比你所做的要棘手一些,因此我更新了代码。它不能处理在#if 0
内部的#else
中的#if 0
,但我可能会稍后更新它。另外:200k是一个小文件吗?;) - scottfrazer