6

如何让 Emacs 自动重新缩进 Ruby 代码?

例如,在 Emacs 中使用 this,

def hello
  puts "hello"
  en

在我输入“d”后,我希望它变成这个,

def hello
  puts "hello"
end

这是 Vim 中的默认设置,但如何在 Emacs 中实现呢?

4

4 回答 4

4

ruby-electric是旧闻。Emacs 24 有一个内置的次要模式electric-indent-mode,称为自动在某些字符后插入换行符,您当然可以将RETURN键重新映射到newline-and-indent(默认情况下它仅映射到缩进)。在 Emacs 24 中,您可以获得匹配的分隔符,electric-pairs-mode并且ruby-end模式会在需要时自动end为您插入。您可以查看prelude-ruby.el了解更多详细信息。

于 2012-07-03T12:15:35.383 回答
2

如果您添加ruby ​​-electric (也是Rinari的一部分),您将获得以下信息:

  • 编写“class”、“def”、“module”等时正确缩进“end”。
  • 键入开头的分隔符时匹配分隔符。

如果你不想添加额外的模式,end一旦你按下 就会正确缩进Enter。或者您按Tab重新缩进当前行。

于 2012-07-03T06:44:08.597 回答
0

尝试自动缩进模式

  1. Return 自动适当缩进代码(如果启用)
  2. 粘贴/拉动适当缩进
  3. 杀戮线将取消不需要的空间(如果启用)
  4. 在访问文件时,适当缩进,但不要保存。(假装什么都没发生,如果启用)
  5. 保存时,可选择取消标记,删除尾随空格,并明确缩进文件(如果启用)。
于 2012-07-08T15:29:58.193 回答
0

它不起作用,因为 Ruby 不知道您是否要键入以“end”开头的任何变量的“end”。所以打字Tab重新缩进是必要的。以下配置对我来说效果很好。

; auto indent                                                                                                                                                                                                       
(define-key global-map (kbd "RET") 'newline-and-indent)
(add-hook 'ruby-mode-hook (lambda () (local-set-key "\r" 'newline-and-indent)))
于 2013-12-25T03:43:48.590 回答