如何让Emacs自动重新启动Ruby代码?在emacs中动态缩进ruby代码
例如,这个在Emacs,
def hello
puts "hello"
en
后,我输入 'D',我希望它变成这样,
def hello
puts "hello"
end
这是Vim的默认,但如何我可以在Emacs中实现吗?
如何让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
和ruby-end
匹配的分界符,模式将在需要时自动插入end
。你可以看看prelude-ruby.el了解更多细节。
如果添加ruby-electric(的Rinari也有一部分),你会得到如下:
如果你不想增加额外的模式下,end
将正确一旦你按下回车缩进。或者您按标签重新缩进当前行。
感谢您的提示,但是有可能编写一个elisp函数来使它在飞行中执行缩进工作吗? – fangwen
这个答案如何不在飞行中?你甚至尝试过吗? –
它不会工作,因为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)))
'electric-indent-mode'很好,现在我把'RET'绑定到'comment-indent-new-line'。谢谢。 – fangwen