2012-07-03 15 views
6

Jak sprawić, by Emacs automatycznie ponownie wyświetlał kod Ruby w locie?cotygodniowy kod rubinowy w locie w emacs

na przykład, z tego w Emacs

def hello 
    puts "hello" 
    en 

po wpisaniu 'D', chcę, aby włączyć do tego

def hello 
    puts "hello" 
end 

Jest to domyślny w vim, ale jak czy mogę to osiągnąć w Emacs?

Odpowiedz

3

ruby-electric to stare wiadomości. Emacs 24 ma wbudowany mniejszy tryb o nazwie electric-indent-mode, który automatycznie wstawia znaki nowej linii po kilku znakach i oczywiście można zamienić klucz RETURN na newline-and-indent (jest on domyślnie odwzorowany tylko na wcięcie). W Emacs 24 można uzyskać dopasowanie delims z trybem electric-pairs-mode i ruby-end w razie potrzeby automatycznie wstawi end. Aby uzyskać więcej informacji, możesz rzucić okiem na numer prelude-ruby.el.

+0

'Tryb wcięcia elektrycznego 'jest ładny, teraz wiążę' RET' z 'komentarzem-wcięcie-nowa-linia'. Dzięki. – fangwen

2

Jeśli dodać ruby-electric (także częścią Rinari) można uzyskać następujące:

  • poprawnie wcięte "koniec", gdy piszesz "klasa", "def", "moduł" itp
  • Matching ograniczniki po wpisaniu otwierającego.

Jeśli nie chcesz dodać dodatkowe trybach end będzie wcięty poprawnie po naciśnięciu Wprowadź. Lub naciśnij przycisk Tab, aby ponownie wprowadzić wcięcie do bieżącego wiersza.

+0

Dziękuję za porady, ale czy jest możliwe napisanie funkcji elisp, która spowoduje, że praca będzie w locie? – fangwen

+0

Jak ta odpowiedź nie jest w locie? Czy ty nawet tego spróbowałeś? –

0

Wypróbuj Auto-indent-mode!

  1. Return automatycznie wcięcie kodu odpowiednio (jeśli jest włączona)
  2. wklejanie/szarpiąc wgniata odpowiednio
  3. linia Zabijanie wystartuje niepotrzebnych spacji (jeśli jest włączona)
  4. W pliku wizyta tiret odpowiednio, ale NIE ZAPISZ. (Udawaj, że nic się nie stało, jeśli jest włączone)
  5. Po zapisaniu, opcjonalnie bez oznaczenia, usuń końcowe białe spacje i zdecydowanie wcń plik (jeśli jest włączony).
0

To nie zadziała, ponieważ Ruby nie wie, czy chcesz wpisać "koniec" jakiejkolwiek zmiennej zaczynającej się od "końca". Dlatego wpisanie Tab do ponownego wcięcia jest konieczne. Następująca konfiguracja działa dobrze dla mnie.

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