假设您编写了一些这样的代码(使用ruby-mode,但我也看到过这种情况也会发生在其他模式中):
# This is a comment.
def foo
puts "foo!"
end
如果你把点放在第一行并点击M-q,你会得到这个:
# This is a comment. def foo puts "foo!" end
我该如何避免?我正在使用版本21.3。
澄清:当我在评论和代码之间添加一个空行时,不会发生这种情况。作为一个解决方案,当我想重新填写我的评论时,我会经历一个恼人的三步过程:
如果M-q处理重新填充评论段落而不必添加和删除空行,那就更好了。 Emacs已经知道评论文本是什么文本,所以必须有办法做到这一点。
答案 0 :(得分:5)
filladapt.el可以解决问题。使用最新版本的RubyMode。
使用这两个软件包可以解决您所看到的M-q问题。 (使用GNU Emacs 22.1)
查看ruby-mode的代码,看起来它已经定制了变量来控制段落填充,如下所示:
(make-local-variable 'paragraph-start)
(setq paragraph-start (concat "$\\|" page-delimiter))
(make-local-variable 'paragraph-separate)
(setq paragraph-separate paragraph-start)
(make-local-variable 'paragraph-ignore-fill-prefix)
(setq paragraph-ignore-fill-prefix t)
可以将其添加到当前ruby的自定义挂钩中,或者您希望填充行为按照您的描述操作的任何主要模式 - 只要您使用filladapt.el。
答案 1 :(得分:1)
M-q必然会填充段落,它正在尝试做的是智能地将文本转换为段落。它具有尝试猜测'填充前缀的功能,这似乎正在发生在你身上。
如果您不喜欢,可以取消绑定M-q。
(global-unset-key (kbd "M-q"))
答案 2 :(得分:1)
填写评论适用于sh-mode
。
也许您应该向ruby-mode
维护者提交错误?
答案 3 :(得分:0)
您需要处于Ruby模式,以便Emacs能够理解“# This is a comment.
”是一个评论。如果您处于基本模式,它只会将所有内容视为文本段落,这使得它认为下一行的文本是同一段落的一部分。
Here are如果您还没有安装Ruby模式的一些说明。