2012-07-03 38 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)))