Tôi mới làm quen với các emacs và có một câu hỏi tân binh. Tôi có thể liên kết khóa với một hàm cụ thể theo (global-set-key (kbd "C-c a b c") 'some-command)
, trong đó some-command
là một hàm. Làm thế nào tôi có thể gọi hai chức năng (nói some-command
và some-other-command
) với một ràng buộc khóa? Cảm ơn rất nhiều!Ràng buộc khóa Emacs cho nhiều lệnh
Trả lời
Bạn có thể xác định chức năng của riêng bạn gọi hai chức năng này và liên kết khóa với chức năng của riêng bạn. Hoặc sử dụng một lambda đơn giản:
(global-set-key (kbd "C-c a b c") (lambda() (interactive) (some-command) (some-other-command)))
Bạn có thể xác định một functon khác với defun
trong đó bạn gọi những người khác bằng funcall
hoặc apply
như vậy, khi bạn gọi hàm thứ ba này (bạn cũng có thể liên kết) nó sẽ gọi những người khác.
Xác định lệnh gọi từng chức năng (lệnh) mà bạn muốn, có điều kiện. Sử dụng tiền tố arg để phân biệt cái nào để gọi. Vì vậy, nếu lệnh điều phối mới được ràng buộc, ví dụ: C-o
, thì C-u C-o
sẽ gọi một trong các chức năng và C-o
(không có tiền tố arg) sẽ gọi lệnh kia.
Bạn sẽ muốn làm C-h f interactive
, để xem làm thế nào để xác định một lệnh công nhận một đối số tiền tố, vv Tư vấn hướng dẫn elisp cũng - sử dụng i interactive
để tìm nơi nó dạy này.
Đây là một bài tập dễ dàng và thú vị. Học cách xác định các lệnh đơn giản của riêng bạn là một cách hay để bắt đầu nói chuyện với Emacs bằng ngôn ngữ riêng của nó.
Tôi khuyên bạn nên không bao giờ ràng buộc biểu thức lambda để chìa khóa, vì lý do đơn giản rằng khi bạn hỏi Emacs gì quan trọng mà có, nó sẽ kết thúc nói cho bạn một cái gì đó như thế này (sử dụng được chấp nhận mã, khi byte-biên soạn, là một ví dụ):
C-c a b c runs the command #[nil "\300 \210\301 \207" [some-command
some-other-command] 1 nil nil], which is an interactive compiled Lisp
function.
It is bound to C-c a b c.
(anonymous)
Not documented.
Nếu bạn không bao giờ byte-biên dịch mã của bạn, nó ít khó hiểu, nhưng vẫn chưa định dạng:
C-c a b c runs the command (lambda nil (interactive) (some-command)
(some-other-command)), which is an interactive Lisp function.
nào, trong khi vẫn có thể đọc được trong trường hợp có một chức năng nhỏ như thế này, hãy nhận được nhanh chóng không thể hiểu được đối với các chức năng lớn hơn.
So với:
C-c a b c runs the command my-run-some-commands, which is an
interactive compiled Lisp function in `foo.el'.
It is bound to C-c a b c.
(my-run-some-commands)
Run `some-command' and `some-other-command' in sequence.
nào bạn nhận được nếu bạn tên chức năng (trong đó khuyến khích bạn ghi lại nó nhiều hơn một chức năng ẩn danh không).
(defun my-run-some-commands()
"Run `some-command' and `some-other-command' in sequence."
(interactive)
(some-command)
(some-other-command))
(global-set-key (kbd "C-c a b c") 'my-run-some-commands)
Cuối cùng, như abo-abo chỉ ra, điều này cũng có nghĩa là bạn có thể dễ dàng lần định nghĩa chức năng mà bất cứ lúc nào, để xem hoặc chỉnh sửa /-tái đánh giá mã, hoặc bằng cách làm theo các liên kết được cung cấp trong bộ đệm trợ giúp (ví dụ: foo.el
trong ví dụ của tôi) hoặc bằng cách sử dụng Mxfind-function
(nhập tên hàm) hoặc Mxfind-function-on-key
(nhập chuỗi khóa liên kết).
Điều quan trọng là bạn có thể chuyển sang định nghĩa bằng cách sử dụng phương pháp này. –
- 1. Dự phòng ràng buộc khóa Emacs
- 2. Ràng buộc khóa Emacs trong Eclipse IDE
- 3. Ràng buộc khóa trong Eclipse cho lệnh gói Maven
- 4. Giải pháp tốt cho các ràng buộc khóa Emacs trong Xcode
- 5. Bỏ đặt trọng ràng buộc trong emacs
- 6. Emacs trong các ràng buộc bàn phím TTY +
- 7. Ràng buộc khóa ở chế độ phụ đệm cục bộ trong Emacs
- 8. Ràng buộc khóa thụt lề Xcode
- 9. Ràng buộc khóa Java không hoạt động
- 10. Gán nhiều nút bấm Emacs cho một lệnh duy nhất?
- 11. emacs, flyspell, hủy kích hoạt "C-". quan trọng ràng buộc
- 12. Tạo ràng buộc khóa ngoài phức hợp
- 13. 1: 1 Ràng buộc khóa ngoài
- 14. WCF Mex Điểm kết thúc cho nhiều ràng buộc
- 15. Lệnh ràng buộc bên trong DataGridTemplateColumn
- 16. Làm thế nào để ràng buộc C-`(backquote) trong emacs
- 17. Làm thế nào để ràng buộc một khóa để chạy một trình bao vỏ trong dired emacs
- 18. Ràng buộc với các lệnh trong WinForms
- 19. Mã Visual Studio có trình phân giải ràng buộc khóa không?
- 20. Phương pháp chung với nhiều ràng buộc
- 21. Ràng buộc nhiều sự kiện trong jQuery
- 22. ràng buộc chìa khóa java swing - thiếu hành động cho khóa được phát hành
- 23. C# Nhiều ràng buộc chung chung
- 24. Ràng buộc duy nhất qua nhiều cột
- 25. Ràng buộc duy nhất trên nhiều cột
- 26. Ràng buộc với nhiều nút bấm
- 27. Thả khóa ngoại mà không biết tên của ràng buộc?
- 28. Kết nối Doctrine 2 không có ràng buộc khóa ngoài
- 29. Ràng buộc khóa ngoài của MySQL, xóa tầng
- 30. Cách thêm cột mới có ràng buộc khóa ngoài trong một câu lệnh trong oracle
@Stefan Bạn vui lòng giải thích lý do tại sao không trích dẫn lambdas? – songyuanyao
Điều này hoạt động tuyệt vời. Cảm ơn! Tôi có cùng một câu hỏi về câu nói mặc dù --- Tôi thường cũng trích dẫn các lambdas, và muốn biết tại sao không. –
@songyuanyao: Bởi vì ''(...) 'là một * danh sách *, không phải là * chức năng *. Xem http://stackoverflow.com/questions/16801396/when-should-emacs-function-syntax-be-used/16802304#16802304 – Stefan