模式特定的 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。根据我读过的内容这里,这里, 和这里,我不明白为什么它不起作用。有什么想法吗?

答案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)

相关内容