【问题标题】:How to configure emacs to properly comment code in php-mode?如何配置 emacs 以在 php 模式下正确注释代码?
【发布时间】:2012-05-25 17:18:51
【问题描述】:

我有 emacs 23.3.1,在 Windows 上运行。

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

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

例子:

之前:

之后:

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

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

我会看看我能不能解决这个问题,但是我在 php-mode 中缺少一个设置吗?

有人知道吗?


更多

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

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

更多

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

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

【问题讨论】:

  • emacswiki.org/emacs/PhpMode 有针对此错误的补丁。
  • 嗯,好的,该页面非常大,我没有看到任何看起来像是描述我在这里遇到的问题的特别内容。在该页面上也没有看到类似明确补丁的任何内容,尽管有指向其他派生模式的指针可以修复各种问题。但那些各种各样的事情不是我的具体问题。无论如何,我发现了一些可以让我继续的东西,那就是设置comment-use-syntax 变量。可能不适用于所有人,但它对我有用。 stackoverflow.com/a/10759293/48082
  • 例如,您是否在该页面上搜索过“patch”? "php-mode.sourceforge.net – 由支持 Emacs 22 (CcMode 5.31) 的 AaronHawley 维护。默认情况下,在 GNU Emacs 23.2.1 中,// cmets 没有被 M-q 正确格式化。问题是 c-mode 中的一个错误,php-模式 1.5.0 取决于。补丁可用且有效,但必须手动应用:行号不匹配。"
  • 我看到了。但这不是我在这里描述的问题。这与 cmets (M-q) 上的填充段落有关。我这里描述的问题是不同的。
  • 很抱歉。我很抱歉跳到这里。

标签: php emacs php-mode


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

我应该说我只在php中使用了C风格的cmets;我不使用#

【讨论】:

  • 谢谢,成功了!我用 php-mode-20130920.1850 在 emacs 24.3.1 上运行了除了 modify-syntax-entry 和 c-default-style 和 offset 部分之外的所有内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 2012-07-14
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多