Как настроить 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; Я не пользуюсь #,

Другие вопросы по тегам