Я пытаюсь добавить функциональность, найденную в некоторых других редакторах кода, в мою конфигурацию Emacs, в результате чего код C / C ++ в пределах #if 0 ... # endif блоков автоматически устанавливается на лицо / шрифт комментария. На основании моего тестирования 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 в виде многострочного регулярного выражения. В этом посте я нашел некоторую полезную информацию ( Как составить регион, такой как "<? 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 ), я испортил свой синтаксис или полностью придерживаюсь неправильного подхода. Я использую Aquamacs 2.1 (который основан на GNU Emacs 23.2.50.1) на OS X 10.6.5, если это имеет значение.
Буду признателен за любую помощь!