Emacs
特定於模式的 emacs 鍵綁定
我試圖讓
emacs
(Arch Linux 上的 23.3)在 C 模式下(實際上是 CC 模式,它也是內置的)將Ctrl
+映射到內置的“編譯”函式。F12
到目前為止,我已經嘗試了以下方法:(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
。根據我在這裡、這里和這裡所讀到的內容,我不明白為什麼它不起作用。有什麼想法嗎?
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)