2010-09-03 41 views
11

Tôi muốn đặt một cái gì đó như thế này trong emacs của tôi:Emacs phím nóng để gắn dấu bằng

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-regexp (region-beginning) (region-end) "="))) 

Nhưng bất cứ khi nào tôi chạy nó, tôi nhận được một lỗi "đối số kiểu sai: numberp, nil".

Lỗi này có ý nghĩa gì và làm cách nào để có hiệu ứng tôi đang tìm?

Trả lời

15

Đây là bạn thân mến của tôi.

(defun align-to-equals (begin end) 
    "Align region to equal signs" 
    (interactive "r") 
    (align-regexp begin end "\\(\\s-*\\)=" 1 1)) 

Tiền tố (\s-*) được sử dụng trong nội bộ của class-regexp

Từ align.el

(list (concat "\\(\\s-*\\)" 

John Wiegley chỉ lơ là tài liệu đó, và tôi đoán hầu hết mọi người chỉ cần sử dụng class-regexp tương tác hoặc chỉ ghi lại và lưu macro!

+0

Ah bị đánh đập vào cú đấm ... – ocodo

+0

Nhưng giải thích tốt hơn! – qrest

+0

Tôi sẽ stil cung cấp cho bạn một +1 mặc dù :) ... rằng tiền tố \ s- * là rất kỳ quặc. – ocodo

0

tôi nhặt ngoài nguồn align-regexp (cài đặt emacs23-el trên debian) và đến với điều này:

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-region (region-beginning) 
        (region-end) 
        'entire 
        (list (list nil 
           (cons 'regexp "\\(\\s-*\\)=") 
           (cons 'group 1) 
           (cons 'bogus nil) 
           (cons 'spacing 1))) 
        nil 
        nil))) 
+0

Nhưng chắc chắn có thể thực hiện nhiệm vụ này mà không cần đào bới ra bên trong lệnh căn chỉnh? – qrest

+0

Tôi đã nghĩ như vậy, nhưng tôi không hiểu 'align.el' tất cả những gì tốt. –

2

"thunk" từ #emacs giải quyết nó:

(local-set-key (kbd "C-c a =") 
    (lambda() (interactive) 
    (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)=" 1 1 nil))) 

chăm sóc người để giải thích tiền tố lạ cho "="?

+0

Lưu ý rằng nil cuối cùng là tùy chọn và số 1 không phải là. Tài liệu cho align.el cần gọn gàng. – ocodo

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