В режиме C / C ++ в Emacs изменить лицо кода в блоке #if 0… # endif на лицо комментария

Я ' m пытаюсь добавить функциональность, обнаруженную в некоторых других редакторах кода, в мою конфигурацию 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))))))

у меня все еще не работает. Возможно, мое регулярное выражение неверно (хотя оно работает с использованием Mx re-builder ), я испортил свой синтаксис или я полностью придерживаюсь неправильного подхода. Я использую Aquamacs 2.1 (который основан на GNU Emacs 23.2.50.1) в OS X 10.6.5, если это имеет значение.

Любая помощь будет принята с благодарностью!

12
задан Community 23 May 2017 в 11:45
поделиться