Как настроить emacs для правильного комментирования кода в php-режиме?
У меня есть Emacs 23.3.1, работающий на Windows.
php-mode 1.5 с http://php-mode.sourceforge.net/, изменено: 2008-11-04
Я думаю, что раньше это работало, но теперь, когда я пытаюсь закомментировать блок кода, используя comment-region, который представляет собой интерактивно скомпилированную функцию Lisp в `newcomment.el', я получаю плохие результаты.
Пример:
до:
после:
Вы можете видеть, что каждая строка в комментируемом блоке имеет начальную последовательность комментария из одной строки //
и многострочная последовательность конца комментария */
,
Это не огромная проблема, хотя и безобразная. Проблема возникает, когда я пытаюсь раскомментировать блок. Я получаю сообщение об ошибке "Не удается найти конец комментария". Другими словами, comment-region
не обратимо с C-u comment-region
,
Я посмотрю, смогу ли я это выяснить, но есть ли настройка, которую мне не хватает в php-режиме?
Кто-нибудь знает?
БОЛЬШЕ
Я ничего не вставил в мою функцию php-mode-hook, чтобы изменить comment-start
а также comment-end
переменные. Когда я отлаживаю comment-region
Я вижу, что они настроены на несоответствующую пару //
а также */
как-то. Это объясняет странные результаты региона комментариев. Я не верю, что это мой код, который устанавливает эти переменные таким образом.
Я попытался установить их явно в моем крючке //
и (пустая строка). В этом случае comment-region
выглядит красивее, но это не раскомментирует. Я также попробовал подходящую пару /*
а также */
, но это дало те же результаты. Раскомментировать не удастся; ошибка can't find comment end.
,
MORE2
Я думаю, что моя таблица синтаксиса правильная. Это показывает это:
... что мне кажется правильным.
1 ответ
Это решило это для меня:
(setq comment-use-syntax t)
Я положил это в мой хук php-mode.
Не уверен, что это было необходимо, но я также включил операторы для изменения таблицы синтаксиса. Весь крючок выглядит так:
(defun cheeso-php-mode-fn ()
"Function to run when php-mode is initialized for a buffer."
(require 'flymake)
(flymake-mode 1)
(setq c-default-style "bsd"
c-basic-offset 2)
;; not sure if necessary or not.
(modify-syntax-entry ?/ ". 124b" php-mode-syntax-table)
(modify-syntax-entry ?* ". 23" php-mode-syntax-table)
(modify-syntax-entry ?\n "> b" php-mode-syntax-table)
(modify-syntax-entry ?\^m "> b" php-mode-syntax-table)
(setq comment-multi-line nil ;; maybe
comment-start "// "
comment-end ""
comment-style 'indent
comment-use-syntax t))
Справочное заявление для comment-use-syntax
говорит, что основные режимы должны установить его. В php-буфере, который я редактировал, переменная была установлена на ноль. Я предполагаю, что это было установлено php-mode; в любом случае это не было установлено мной. Установка этого в t
и уверенность, что синтаксическая таблица имеет соответствующие значения, сделала свое дело.
Я должен сказать, что я использую только комментарии в стиле C в php; Я не пользуюсь #
,