Krótka odpowiedź:
(eval-after-load 'cc-mode
'(progn
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)))
Oto jak idę o to:
Sprawdzaj funkcję związaną /
: C-h k /
Mówi "/ uruchamia polecenie c-electric-slash, które jest interaktywną skompilowaną funkcją Lisp w 'cc-cmds.el'".
(Jeśli nie widzisz linku do cc-cmds.el
, wtedy nie masz zainstalowanego źródła Elisp. Zakładając, że nie jesteś na Windows, można użyć menedżera pakietów swojego systemu, aby zainstalować pakiet emacs-el
i spróbuj ponownie.)
Kliknij ten link, aby otworzyć cc-cmds.el
. Wyszukiwanie c-electric-slash
nie wykrywa niczego poza definicją funkcji, więc klucze nie są związane w tym pliku. Wyszukiwanie w cc-mode.el
z tego katalogu ujawnia:
(define-key c-mode-base-map "/" 'c-electric-slash)
Teraz wiemy nazwę „keymap”, w którym, aby zastąpić /
kombinacja klawiszy.
Jeśli dodać coś takiego do pliku init prawdopodobnie będziesz pojawia się błąd przy starcie:
(define-key c-mode-base-map "/" 'self-insert-command)
... bo plik init załadowany przed cc-mode.el jest i c-mode-base-map
jest niezdefiniowany. Więc używamy eval-after-load
(jak na górze mojej odpowiedzi). Pierwszy argument, 'cc-mode
, musi pasować do instrukcji provide
na samym końcu cc-mode.el. Jeśli nie wiesz, co oznacza progn
, wykonaj C-h f progn
.
Jeśli podoba Ci się ten styl uczenia się/odkrywania Emacsa, możesz rozważyć przeczytanie mojego "How to learn Emacs".
Genialny! Co za świetne wyjaśnienie! ... i to też działa :) ... Dziękuję ... i ja ' Z pewnością będę czytał twój sugerowany przewodnik –
Sugestia: Zaktualizuj to, aby użyć 'z-eval-after-load' –
Co jest warte, borykałem się z tym problemem podczas tworzenia głównego trybu uzyskanego z' c-mode'. dodając dwie linie 'define-key' do definicji mapy klawiaturowej mojego trybu (i zmieniając' c-mode-base-map' na nazwę mojej lokalnej mapy), udało mi się wyeliminować to zachowanie. Dzięki! – ohruunuruus