Emacs

特定於模式的 emacs 鍵綁定

  • September 5, 2014

我試圖讓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)

引用自:https://unix.stackexchange.com/questions/18288