Короткий ответ:
(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)
... потому что загружается ваш файл инициализации перед тем куб.см-mode.el есть, и c-mode-base-map
не определено. Поэтому мы используем eval-after-load
(как в начале моего ответа). Первый аргумент, 'cc-mode
, должен соответствовать оператору provide
в самом конце cc-mode.el. Если вы не знаете, что означает progn
, сделайте C-h f progn
.
Если вам нравится этот стиль обучения/обнаружения Emacs, вы можете рассмотреть возможность чтения моего "How to learn Emacs".
Блестяще! Какое замечательное объяснение! .. и это тоже работает :) ... Спасибо ... и я, –
Предложение: обновите это, чтобы использовать 'with-eval-after-load' –
Для чего это стоит, я боролся с этой проблемой при создании основного режима, полученного из' c-mode'. добавив две строки 'define-key' в определение ключевой карты моего режима (и изменив' c-mode-base-map' на имя моей локальной карты), я смог устранить это поведение. Спасибо! – ohruunuruus