9

在 GNU Emacs 中,有没有一种好方法可以将 C 模式下的注释区域命令从

/* This is a comment which extends  */
/* over more than one line in C. */

/* This is a comment which extends
   over more than one line in C. */

? 我试过了

(setq comment-multi-line t)

但这无济于事。Emacs 手册中有一个关于多行注释的部分,但它没有提及任何内容。

4

2 回答 2

7

从 Emacs 21 开始,有一个名为 的模块'newcomment,它有不同的注释样式(参见变量'comment-styles。这个设置接近你想要的:

(setq comment-style 'multi-line)

(注意:您可能应该在 中进行该设置'c-mode-hook)。

但是,没有任何设置可以使评论看起来像您想要的那样。

我看到得到你想要的最简单的方法是添加这个黑客:

(defadvice comment-region-internal (before comment-region-internal-hack-ccs activate)
  "override 4th argument to be just spaces"
  (when (eq major-mode 'c-mode)  ; some condition here
    (let ((arg (ad-get-arg 4)))
      (when arg
        (ad-set-arg 4 (make-string (length arg) ?\ ))))))

当前的设置comment-style总是在注释行前面加上“*”(如果不是整个“/*”)。

如果您没有 Emacs 21,我想您可以简单地newcomment.el从存储库下载。我不知道它在早期版本的 Emacs 中是否可以正常工作,但它可能值得一试,尽管升级 Emacs 会是一个更好的解决方案。

我的 hack 打破了'uncomment-region. 一个适当的解决方法是改变'comment-padright. 这将需要更多的研究,以免破坏其他东西。上述技巧只会改变行为'c-mode(根据自己的喜好调整条件)。

于 2009-10-11T22:04:40.863 回答
3

我能找到的最接近内置评论支持的是如果你设置comment-stylemulti-line,这将产生:

/* This is a comment which extends
 * over more than one line in C. */

如果这还不够接近,请查看newcomment.el并酌情定义您自己的评论功能。

于 2009-10-11T22:01:02.640 回答