Ответ 1
Короткий ответ:
(eval-after-load 'cc-mode
'(progn
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)))
Вот как я об этом говорю:
Определите функцию, связанную с /
: C-h k /
В нем говорится: "/запускает команду c-electric-slash, которая является интерактивным скомпилированным Lisp функции в 'cc-cmds.el' ".
(Если вы не видите ссылку на cc-cmds.el
, то у вас не установлены источники elisp. Предполагая, что вы не в Windows, вы можете использовать диспетчер системных пакетов для установки пакета emacs-el
и попробовать снова).
Следуйте этой ссылке, чтобы открыть cc-cmds.el
. Поиск c-electric-slash
не находит ничего, кроме определения функции, поэтому ключи не связаны в этом файле. Поиск в cc-mode.el
из этого каталога показывает:
(define-key c-mode-base-map "/" 'c-electric-slash)
Теперь мы знаем имя "клавиатуры", в которой можно переопределить привязку /
.
Если вы добавите что-то подобное в ваш файл инициализации, вы, вероятно, получите сообщение об ошибке при запуске:
(define-key c-mode-base-map "/" 'self-insert-command)
... потому что ваш файл инициализации загружен до cc-mode.el, а c-mode-base-map
- undefined. Поэтому мы используем eval-after-load
(как в начале моего ответа). Первый аргумент 'cc-mode
должен соответствовать оператору provide
в самом конце cc-mode.el. Если вы не знаете, что означает progn
, выполните C-h f progn
.
Если вам нравится этот стиль обучения/обнаружения Emacs, вы можете рассмотреть возможность чтения "Как узнать Emacs" .