在emacs中格式化javadoc样式注释

5
我们需要使用javadoc格式的doxygen注释来注释我们的C++代码,我正在寻找在emacs中可以随着我打字而保持javadoc风格的东西。
因此,如果我开始编写这样的评论:
/**
 * This function does the following:

当我按下“回车”键时,我希望光标自动缩进并插入一个“*”,这样我就可以继续输入而不需要手动进行格式化。
所以当我按下“回车”键时,评论应该看起来像这样(无需我输入“[TAB]*”):
/**
 * This function does the following:
 * 

C++的Javadoc被称为Doxygen。http://doxymacs.sourceforge.net/ - abo-abo
3个回答

3

有一个名为c-block-comment-prefix的变量,它控制着/*...*/风格注释中续行的前缀。

当该变量被设置为

(setq c-block-comment-prefix "* ")

在一个完整且关闭的注释块中,您的点应该放在注释块内(即|是该点)。
1. /|* */
2. /*| */
3. /* |*/
4. /* *|/

当您按下M-j键(c-indent-new-comment-line命令)时,您会得到以下结果:

/*
 * */

适用于23和24版本的Emacs。


3

在这里找到了答案:http://www.frankmeffert.de/2010/09/emacs-doxygen-doxymacs/ 我做了小的修改,使其适用于C和C++模式,并在每个“*”后面添加了额外的空格。

(defun my-javadoc-return () 
  "Advanced C-m for Javadoc multiline comments.   
Inserts `*' at the beggining of the new line if 
unless return was pressed outside the comment"
  (interactive)
  (setq last (point))
  (setq is-inside
        (if (search-backward "*/" nil t)
        ;; there are some comment endings - search forward
            (search-forward "/*" last t)
          ;; it's the only comment - search backward
          (goto-char last)
          (search-backward "/*" nil t)
      )
    )
  ;; go to last char position
  (goto-char last)
  ;; the point is inside some comment, insert `* '
  (if is-inside
      (progn 
    (insert "\n* ")
    (indent-for-tab-command))
    ;; else insert only new-line
    (insert "\n")))

(add-hook 'c-mode-common-hook (lambda () 
  (local-set-key "\r" 'my-javadoc-return)))

顺便提一下:符号tnil会自我求值,您不需要引用它们。 - user797257
(if <foo> 't 'nil) 只是一种迂回的写法,等同于 <foo>。如果你大声朗读它,你就会明白为什么了:"如果 <foo> 为真,则为真;如果为假,则为假"。 - Stefan

2
如果我理解正确,使用 M-j 而不是 RET 应该可以得到您想要的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接