2010-11-16 24 views
6

Vì vậy, Emacs khá giỏi trong việc chỉnh sửa mã Scheme/Racket/Lisp. Một điều tốt là khi bạn nhập mã như:Làm cách nào để nhận được các emacs để thụt lề những thứ khác như indents xác định?

(define (make-position-table) 
    (for/list ([i (in-range 256)]) 
      `())) 

Điều rất thông minh và thụt dòng thứ hai thành hai cột. Bây giờ dòng thứ ba nó làm những gì nó làm với tất cả các mã lisp và indents rằng để sắp xếp tất cả các đối số.

Làm cách nào để tùy chỉnh Emacs để nó thụt lề dòng thứ ba như thể tôi đang giới thiệu một cơ thể mới. Điều tôi muốn là:

(define (make-position-table) 
    (for/list ([i (in-range 256)]) 
    `())) 

Tôi đoán điều này là có thể và tôi chưa tìm ra biến Emacs phức tạp để đặt. Có ai biết cách để làm điều này không?

Trả lời

7

Bạn có thể thêm video này vào tập tin .emacs của bạn:

(put 'for/list 'scheme-indent-function 1) 

Xem thêm một hacked version of scheme mode mà không nhiều hơn nữa vợt-ISMS.

+0

Ngọt ngào! Cảm ơn. Đây chỉ là những gì tôi đang tìm kiếm! – pknodle

+0

Cảm ơn !! Điều này làm việc tuyệt vời với pmatch. – tcdowney

5

Tôi tin rằng (put 'for/list 'scheme-indent-function 'defun) sẽ làm những gì bạn muốn.

Lặp lại các ký hiệu khác. My .emacs bao gồm

(mapc (lambda (sym) (put sym 'scheme-indent-function 'defun)) 
     (list 'for 'for/list 'for/and 'for/or 
      'match 'case 'syntax-parse 'test-suite 'test-case 
      'define-syntax-rule 'match-let 'match-let*)) 

từ những ngày tôi đang học trong Chương trình PLT.

+0

Cảm ơn. Điều này thực sự tiện dụng. – pknodle

+0

Sử dụng 'defun' khác với' 1': thử dòng mới ngay sau từ khóa mở và bạn sẽ thấy nó hoạt động như thế nào. (Ngoài ra, Racket có những thứ như 'for/fold' có hai dạng đặc biệt.) –

Các vấn đề liên quan