나는 +를 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)