在 Emacs 中即时缩进 Ruby 代码



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

例如,在 Emacs 中,有了这个,

def hello
  puts "hello"
  en

在我输入"d"之后,我希望它变成这样,

def hello
  puts "hello"
end

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

ruby-electric

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

如果您添加红宝石电(也是 Rinari 的一部分),您将获得以下内容:

  • 当您编写"类","def","模块"等时正确缩进"结束"。
  • 键入开头分隔符时匹配分隔符。

如果您不想添加额外的模式,则按 Enter 后,end将正确缩进。或者按 Tab 键重新缩进当前行。

尝试自动缩进模式!

  1. Return 会自动适当地缩进代码(如果启用)
  2. 粘贴/拉动可适当缩进
  3. 杀戮线将移除不需要的空间(如果启用)
  4. 在访问文件时,适当缩进,但不保存。(如果启用,请假装什么都没发生)
  5. 保存时,可以选择取消制表,删除尾随空格,并明确缩进文件(如果启用)。

它不起作用,因为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)))

最新更新