使Emacs填充段与类似Javadoc的注释一起使用时效果很好

时间:2020-03-05 18:55:48  来源:igfitidea点击:

我正在为工作中使用的APL方言编写Emacs主模式。我已经
基本字体锁定可以正常工作,并且在设置注释开始和
注释-开始-跳过,注释/取消注释区域并填充段落
工作。

但是,注释块通常包含javadoc样式的注释,而我
想要填充段落以避免将线条开始粘在一起
用这样的命令。

如果我有这个(\而不是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

我尝试将段落开头和段落分隔设置为
适当的值,但fill-paragraph仍无法在
评论块。如果删除注释标记,则M-q可以按我的意愿工作
,因此我用于段落开头的regexp似乎有效。

我是否需要为我的专业写一个自定义的填充段落
模式? cc-mode可以处理这种情况,但实际上
复杂,如果可能的话,我想避免这种情况。

解决方案

回答

还有其他一些模式,用于" fill-paragraph-function"的功能较简单。浏览我的安装,看起来像是ada-mode和make-mode的例子。

回答

在这些情况下,我要做的是在段落行和参数行之间打开空白行,然后使用M-q包裹段落行,然后杀死它们之间的空白行。这不是理想的方法,但是它可以正常工作,并且如果需要重复,很容易将其记录在宏中。

回答

问题在于,段落开头的regexp必须匹配整个行才能起作用,包括实际的注释字符。以下elisp适用于我给出的示例:

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

这是一个具有用于php-mode的正则表达式示例的页面,该页面可以执行以下操作:
http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/