如何在emacs的C ++模式下很好地格式化标题注释?

时间:2014-06-28 21:25:12

标签: c++ emacs

此处"标题评论"指:

/* Program Name: Foo                */
/* Author:       Jane Doe           */
/* Date:         06/29/2014         */
/* Rev:          1.0                */

棘手的部分是:

  1. 如果要使用 M - ;
  2. ,则难以在每行中对齐结尾*/
  3. 如果可能,我想在每行:后对齐内容。
  4. 提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以通过两次align-regexp调用来执行此操作,但输入有点棘手:

/* Program Name: Foo */
/* Author: Jane Doe */
/* Date: 06/29/2014 */
/* Rev: 1.0 */

选择您要修改的区域,然后使用前缀参数执行第一个align-regexp

C-u M-x align-regexp RET :\(\s-*\) RET RET RET n

此版本的align-regexp使用与冒号字符匹配的正则表达式,后跟任意数量的空格。然后我们

  • 接受修改捕获组1(空白)的默认选项
  • 然后我们调整时至少留出一个空格的默认值
  • 然后告诉Emacs不要重复整行,因为我们不需要这个功能。

这应该留给你

/* Program Name: Foo */
/* Author:       Jane Doe */
/* Date:         06/29/2014 */
/* Rev:          1.0 */

现在,C-x C-x交换点和标记,重新选择文字,然后再做align-regexp。这个不需要前缀参数:

 M-x align-regexp RET \*/ RET

这个版本要简单得多。我们提供了一个与关闭注释指示符*/匹配的正则表达式,转义星号。

你应该完成!最终结果如下:

/* Program Name: Foo        */
/* Author:       Jane Doe   */
/* Date:         06/29/2014 */
/* Rev:          1.0        */

修改

您应该能够编写一个函数来自动执行此过程。我不是elisp专家,但这似乎可以解决问题:

(defun my-align-c-comment-block ()
  (interactive)
  (when (use-region-p)
    (align-regexp (region-beginning) (region-end) ":\\(\\s-*\\)")
    (exchange-point-and-mark)
    (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)\\*/")))