2012-07-03 23 views
6

Emacs otomatik olarak Ruby kodunu anında yeniden oluşturmayı nasıl sağlar?emacs içinde girintide girinti ruby ​​kodu

Bu Vim varsayılan

def hello 
    puts "hello" 
end 

Emacs bununla örneğin

, Bana kalsa ', Ben bu dönüştürmek istediğiniz tipi sonra

def hello 
    puts "hello" 
    en 

, ama nasıl bunu Emacs'de yapabilir miyim?

cevap

3

ruby-electric eski bir haberdir. Emacs 24, electric-indent-mode adında, bazı karakterlerden sonra yeni satırları otomatik olarak ekleyen ve RETURN anahtarını newline-and-indent (yalnızca varsayılan olarak girintili olarak eşlenen) ile yeniden eşleştiren yerleşik bir küçük moda sahiptir. Emacs 24'te electric-pairs-mode ve ruby-end ile eşleşen delikleri elde edebilirsiniz, gerektiğinde sizin için otomatik olarak end ekleyecektir. Daha fazla bilgi için prelude-ruby.el'a bakabilirsiniz.

+0

'elektrik-indent-mode'' güzel, şimdi' RET''-comment-indent-new-line''üne bağladım. Teşekkürler. – fangwen

2

siz şu olsun ruby-electric (Rinari da parçası) eklerseniz:

  • doğru girintili "son" siz "sınıfı" yazma "def", "modül" vb
  • Eşleştirme açılışını yazarken sınırlayıcılar. Eğer Enter tuşuna bir kez

ekstra modları eklemek istemiyorsanız, end doğru girintili. Veya geçerli satırı yeniden girmek için Sekme tuşlarına basın.

+0

İpuçlarınız için teşekkür ederiz, ancak çentikleme işlemini anında yapmak için bir elisp işlevi yazmak mümkün mü? – fangwen

+0

Bu cevap nasıl uçmuyor? Denedin mi? –

0

Auto-indent-mode deneyin!

  1. Dönüş otomatik (etkinleştirilmişse)
  2. Yapıştırma/YanKing girintiler kod uygun girintiler uygun
  3. Öldürme hattı (etkinse), uygun şekilde ziyaret dosyası, girinti üzerinde
  4. gereksiz boşluklar kalkacak ama DONT SAVE. (Etkinleştirilmişse, hiçbir şey olmamış gibi davranın)
  5. Kaydetme, isteğe bağlı olarak, önceden tanımlayamayan beyaz boşlukları kaldırın ve dosyayı etkinleştirin (etkinleştirilmişse).
0

Bu özellik işe yaramaz çünkü Ruby, "son" ile başlayan değişkenlerin "sonunu" yazmak isteyip istemediğinizi bilmiyor. Yani yeniden girintilemek için Tab yazarak gereklidir. Ve aşağıdaki yapılandırma benim için iyi çalışıyor.

; auto indent                                                  
(define-key global-map (kbd "RET") 'newline-and-indent) 
(add-hook 'ruby-mode-hook (lambda() (local-set-key "\r" 'newline-and-indent)))