2012-07-03 38 views
6

Làm thế nào để làm cho Emacs tự động reindent mã Ruby trên bay?mã ruby ​​thụt lề trên bay trong emacs

ví dụ, với điều này trong Emacs,

def hello 
    puts "hello" 
    en 

Sau khi tôi gõ 'd', tôi muốn nó biến thành này,

def hello 
    puts "hello" 
end 

Đây là mặc định trong Vim, nhưng làm thế nào tôi có thể đạt được điều đó trong Emacs không?

Trả lời

3

ruby-electric là tin cũ. Emacs 24 có chế độ phụ được cài sẵn có tên là electric-indent-mode tự động chèn dòng mới sau một số ký tự và bạn có thể remap phím RETURN tới newline-and-indent (chỉ được ánh xạ tới thụt lề theo mặc định). Trong Emacs 24, bạn có thể nhận được các món bánh phù hợp với chế độ electric-pairs-moderuby-end sẽ tự động chèn end cho bạn khi cần. Bạn có thể xem prelude-ruby.el để biết thêm chi tiết.

+0

'điện-indent-mode' là tốt đẹp, bây giờ tôi ràng buộc' RET' để 'bình luận-indent-new-line'. Cảm ơn. – fangwen

2

Nếu bạn thêm ruby-electric (cũng là một phần của Rinari), bạn nhận được như sau:

  • đúng thụt vào "kết thúc" khi bạn viết "class", "def", "mô-đun" vv
  • Matching delimiters khi bạn gõ một mở.

Nếu bạn không muốn thêm chế độ thêm, các end sẽ được thụt vào một cách chính xác khi bạn nhấn Enter . Hoặc bạn nhấn Tab để thụt lề lại dòng hiện tại.

+0

Cảm ơn lời khuyên của bạn, nhưng bạn có thể viết một hàm elisp để làm công việc thụt lề nhanh không? – fangwen

+0

Câu trả lời này không hoạt động như thế nào? Bạn có thử nó không? –

0

Hãy thử Auto-indent-mode!

  1. Return tự động indents mã một cách thích hợp (nếu được kích hoạt)
  2. dán/giật Canh lề cho phù hợp
  3. dòng Killing sẽ cất cánh khoảng trống không cần thiết (nếu được kích hoạt)
  4. Mở tập tin chuyến thăm, indent một cách thích hợp, nhưng DONT SAVE. (Giả vờ như không có gì xảy ra, nếu được bật)
  5. Khi lưu, tùy chọn không sửa chữa, xóa dấu cách trắng ở cuối và chắc chắn thụt lề tệp (nếu được bật).
0

Nó sẽ không hoạt động vì Ruby không biết bạn có muốn nhập "kết thúc" của bất kỳ biến nào bắt đầu bằng "kết thúc" hay không. Vì vậy, việc nhập Tab để thụt lề lại là cần thiết. Và cấu hình sau hoạt động tốt cho tôi.

; auto indent                                                  
(define-key global-map (kbd "RET") 'newline-and-indent) 
(add-hook 'ruby-mode-hook (lambda() (local-set-key "\r" 'newline-and-indent))) 
Các vấn đề liên quan