Tôi nhận được thông báo "Đối số kiểu sai: commandp, (lambda nil (dòng chuyển tiếp 5))" ở đây.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Lỗi là gì? Tôi khá chắc rằng nó đơn giản và tôi đang thiếu một cái gì đó rõ ràng.
Tôi nhận được thông báo "Đối số kiểu sai: commandp, (lambda nil (dòng chuyển tiếp 5))" ở đây.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Lỗi là gì? Tôi khá chắc rằng nó đơn giản và tôi đang thiếu một cái gì đó rõ ràng.
Câu trả lời:
global-set-key
mong đợi một lệnh tương tác. (lambda () (interactive) (forward-line 5))
phải làm việc.
Nhân tiện, C-h f commandp
là một điểm khởi đầu khá tốt cho những lỗi như vậy.
(commandp)
tài liệu, các hàm lambda với lệnh gọi cấp cao nhất để (interactive)
hoạt động, nhưng làm thế nào tôi có thể xác định một hàm với (defun)
đó sẽ hoạt động?
Biểu mẫu chính xác phải là:
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
Vấn đề là bạn đã quên đặt (interactive)
(như brendan đã đề cập).
Nhân tiện, bạn sẽ nhận thấy rằng tôi đã sử dụng (kbd)
hàm để chỉ định ràng buộc khóa. Chức năng đó vô cùng hữu ích vì bạn có thể đặt các key-binding gần như theo nghĩa đen.
Tôi cũng đã gặp lỗi này trên một máy mới, nơi tôi đang sử dụng .emacs
tệp thông thường của mình nhưng chưa cài đặt các gói của mình và lệnh được thực thi nằm trong một trong các gói đó. (Bởi vì một lệnh không thể được thực thi chắc chắn không tương tác!)