在Emacs中使用M-q而不将我的所有代码都转换为注释

时间:2009-03-25 23:41:48

标签: emacs

假设您编写了一些这样的代码(使用ruby-mode,但我也看到过这种情况也会发生在其他模式中):

# This is a comment.
def foo
    puts "foo!"
end

如果你把点放在第一行并点击M-q,你会得到这个:

# This is a comment. def foo puts "foo!" end

我该如何避免?我正在使用版本21.3。

澄清:当我在评论和代码之间添加一个空行时,不会发生这种情况。作为一个解决方案,当我想重新填写我的评论时,我会经历一个恼人的三步过程:

  1. 我在前后添加一个空白行 评论段落
  2. -M-Q
  3. 删除空行
  4. 如果M-q处理重新填充评论段落而不必添加和删除空行,那就更好了。 Emacs已经知道评论文本是什么文本,所以必须有办法做到这一点。

4 个答案:

答案 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模式的一些说明。