모드별 emacs 키 바인딩

모드별 emacs 키 바인딩

나는 +를 C 모드(실제로는 내장된 CC 모드)의 내장 "컴파일" 기능에 매핑하기 emacs위해(Arch Linux의 23.3) 얻으려고 합니다 . 지금까지 나는 다음을 시도했습니다.CtrlF12

(defun my-c-mode-common-hook (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

그리고:

(eval-after-load 'c-mode
  '(define-key c-mode-map (kbd "C-<f12>") 'compile))

하지만 둘 다 작동하지 않습니다 <C-f12> is undefined. 내가 읽은 내용을 바탕으로여기,여기, 그리고여기, 왜 작동하지 않는지 이해가 안 돼요. 어떤 아이디어가 있나요?

답변1

C 모드(특히 변수 c-mode-map)는 cc-mode.c-mode

(eval-after-load 'cc-mode
  '(define-key c-mode-map (kbd "C-<f12>") 'compile))

다음과 같은 다른 방법의 경우vschum이 이미 답변했습니다, 매개변수 목록이 누락되었습니다 defun. 또한 c-mode-common-hook이것은 올바른 위치가 아닙니다. C 모드에 들어갈 때마다 실행됩니다. 바인딩을 추가하는 올바른 시간은 C 모드가 로드될 때입니다. eval-after-load위의 일반 메커니즘을 통해 또는 다음을 통해 이를 수행할 수 있습니다 c-initialization-hook.

(defun my-c-mode-common-hook ()
  (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-initialization-hook 'my-c-mode-common-hook)

답변2

오타가 있습니다. defun에 대한 매개변수 정의가 누락되었습니다. 이 경우 my-c-mode-common-hook 함수는 매개 변수를 허용하지 않으므로 함수 이름 뒤에 빈 괄호 세트를 추가합니다.

(defun my-c-mode-common-hook ()
    (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

관련 정보