2012-07-03 96 views
6

如何让Emacs自动重新启动Ruby代码?在emacs中动态缩进ruby代码

例如,这个在Emacs,

def hello 
    puts "hello" 
    en 

后,我输入 'D',我希望它变成这样,

def hello 
    puts "hello" 
end 

这是Vim的默认,但如何我可以在Emacs中实现吗?

回答

3

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

+0

'electric-indent-mode'很好,现在我把'RET'绑定到'comment-indent-new-line'。谢谢。 – fangwen

2

如果添加ruby-electric(的Rinari也有一部分),你会得到如下:

  • 缩进格式正确“结束”,当你写“类”,“高清”,“模块”等
  • 匹配当您键入开始的分隔符时。

如果你不想增加额外的模式下,end将正确一旦你按下回车缩进。或者您按标签重新缩进当前行。

+0

感谢您的提示,但是有可能编写一个elisp函数来使它在飞行中执行缩进工作吗? – fangwen

+0

这个答案如何不在飞行中?你甚至尝试过吗? –

0

尝试Auto-indent-mode

  1. 返回适当的自动缩进代码(如果启用)
  2. 粘贴/唬弄缩进适当
  3. 杀线将采取关闭不需要的空间(如果启用)
  4. 在访问文件时,缩进适当,但不用担心。 (假装没有任何事情发生,如果启用)
  5. 在保存时,可选择unttabify,删除尾随空格,并明确缩进文件(如果启用)。
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)))