1

我有 emacs 23.3.1,在 Windows 上运行。

php-mode 1.5 来自 http://php-mode.sourceforge.net/,修改:2008-11-04

认为这曾经可以工作,但是现在,当我尝试使用注释区域注释掉一段代码时,注释区域是“newcomment.el”中的一个交互式编译的 Lisp 函数,我得到的结果很差。

例子:

前:

在此处输入图像描述

后:

在此处输入图像描述

可以看到注释块中的每一行都有单行注释开始顺序//和多行注释结束顺序*/

这不是一个大问题,尽管它很丑陋。当我尝试取消注释该块时,问题就出现了。我收到错误消息“找不到评论结束”。换句话说,comment-region是不可逆的C-u comment-region

我会看看我是否能解决这个问题,但是在 php-mode 中是否有我缺少的设置?

有人知道吗?


更多的

我没有在我的 php-mode-hook 函数中添加任何东西来更改comment-startandcomment-end变量。当我调试时,comment-region我可以看到它们以某种方式设置为不匹配//的一对。*/这就解释了注释区域的奇怪结果。我不相信是我的代码确实设置了这些变量。

我尝试在我的钩子中明确地将它们设置为//and (空字符串)。在这种情况下,comment-region看起来更漂亮,但它仍然没有取消注释。我也尝试了匹配的/*and */,但结果相同。取消注释不成功;错误是can't find comment end.

更多2

我认为我的语法表是正确的。它显示了这一点:

在此处输入图像描述

...这对我来说似乎是正确的。

4

1 回答 1

3

这为我解决了它:

(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 缓冲区中,变量设置为 nil。我猜它是由 php-mode 设置的;无论如何,它不是我设置的。将其设置为t并确保语法表具有适当的值就可以了。

应该说我只在php中使用C风格的注释;我不使用#.

于 2012-05-25T18:02:51.803 回答