让Emacs填充段落与javadoc类似的注释很好玩

时间:2008-09-16 12:42:35

标签: emacs elisp

我正在为我在工作中使用的APL方言编写一个Emacs主要模式。我已经得到了 基本字体锁定工作,以及设置comment-start和 comment-start-skip,comment / uncomment region和fill段也 工作

但是,注释块通常包含javadoc样式注释和i 想填充段落,以避免粘合线开始 用这样的命令。

如果我有这个(\而不是javadoc @):

# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value

M-q给了我:

# This is a comment that is long and
# should be wrapped. \arg Description
# of argument \ret Description of
# return value

但我想:

# This is a comment that is long and
# should be wrapped.
# \arg Description of argument
# \ret Description of return value

我已经尝试将段落开头和段落分开设置为 适当的值,但填充段仍然不起作用 评论块。如果我删除评论标记,M-q按我的意愿工作 因此,我用于段落开始的正则表达式似乎有用。

我是否必须为我的专业写一个自定义填充段 模式? cc-mode有一个处理这样的案例,但确实如此 复杂,我想尽可能避免它。

3 个答案:

答案 0 :(得分:4)

问题在于,段落开始正则表达式必须匹配整行才能正常工作,包括实际的注释字符。以下elisp适用于我给出的示例:

(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")

这里有一个页面,它有一个用于php-mode的示例regexp,它执行此操作: http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/

答案 1 :(得分:1)

还有其他模式使用较少的复杂功能fill-paragraph-function。浏览我的安装,看起来像ada-mode和make-mode中的那些就是很好的例子。

答案 2 :(得分:1)

在这些情况下我做的是在段落行和参数行之间打开一个空行,然后用M-q包装段落行,然后删除它们之间的空行。不理想,但如果您需要重复它,它很容易在宏中录制。