如何讓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