Câu trả lời ngắn:
(eval-after-load 'cc-mode
'(progn
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)))
Đây là cách tôi đi về nó:
Tìm hiểu các chức năng liên kết với /
: C-h k /
Nó nói "/ chạy lệnh c-electric-slash, một hàm biên dịch tương tác Lisp trong 'cc-cmds.el'".
(Nếu bạn không nhìn thấy liên kết để cc-cmds.el
, sau đó bạn không có các nguồn elisp cài đặt. Giả sử bạn không phải trên Windows, bạn có thể sử dụng quản lý gói của hệ thống để cài đặt các gói emacs-el
và cố gắng một lần nữa.)
Làm theo liên kết đó để mở cc-cmds.el
. Tìm kiếm c-electric-slash
không tìm thấy bất kỳ thông tin nào khác ngoài định nghĩa hàm, do đó các khóa không bị ràng buộc trong tệp này. Tìm kiếm trong cc-mode.el
từ thư mục này cho thấy:
(define-key c-mode-base-map "/" 'c-electric-slash)
Bây giờ chúng ta biết tên của "sơ đồ bàn phím", trong đó ghi đè /
keybinding.
Nếu bạn thêm một cái gì đó như thế này để tập tin init của bạn, có thể bạn sẽ nhận được một lỗi khi khởi động:
(define-key c-mode-base-map "/" 'self-insert-command)
... bởi vì tập tin init của bạn được nạp trước khi cc-mode.el là, và c-mode-base-map
không xác định. Vì vậy, chúng tôi sử dụng eval-after-load
(như ở đầu câu trả lời của tôi). Đối số đầu tiên, 'cc-mode
, phải khớp với câu lệnh provide
ở cuối cc-mode.el. Nếu bạn không biết ý nghĩa của progn
, hãy làm C-h f progn
.
Nếu bạn thích kiểu học tập/khám phá Emacs này, bạn có thể xem xét đọc "How to learn Emacs" của mình.
Brilliant! Thật là một lời giải thích tuyệt vời! .. và nó hoạt động, quá :) ... Cảm ơn bạn ... và tôi ' –
Gợi ý: Cập nhật điều này để sử dụng 'with-eval-after-load' –
Đối với những gì nó có giá trị, tôi đã đấu tranh với vấn đề này trong khi tạo ra một chế độ chính bắt nguồn từ' c-mode'. thêm hai dòng 'define-key' vào định nghĩa sơ đồ bàn phím của tôi (và thay đổi' c-mode-base-map' thành tên bản đồ cục bộ của tôi), tôi có thể loại bỏ hành vi này. – ohruunuruus