在Emacs中设置特定于主要模式的键绑定


9

在我的.emacs文件中,我想为特定的主要模式添加键绑定(设置coffee-compile-fileC-c C-c咖啡模式)。

我已经找到了许多有关使用local-set-key和的说明global-set-key,因此,一旦我在coffee模式下打开文件,就可以轻松添加此绑定,但是由进行处理将是一件很不错的事情.emacs

Answers:


8

使用模式挂钩。 C-h m显示有关主要模式的信息,通常包括其支持的钩子;然后你做类似的事情

(add-hook 'coffee-mode-hook ;; guessing
    '(lambda ()
       (local-set-key "\C-cc" 'coffee-compile-file)))

6

您可以在特定于模式的映射中定义键,例如:

(add-hook 'coffee-mode-hook
    (lambda ()
        (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))

或者,更干净:

(eval-after-load "coffee-mode"
    '(define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file))

第二条语句使键定义只发生一次,而第一条语句使每次coffee-mode启用键都发生定义(这是过大的)。


2
仅供参考:这些括号的位置错误。此附加钩应为: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall 2012年

另外,为什么要在钩子中定义它?
Nikana Reklawyks 2012年

@NikanaReklawyks是的,在钩子中定义它不像eval-after-load在这种情况下使用语句那样干净。我将适当地更新答案。
Trey Jackson

3

Emacs 24.4替换eval-after-loadwith-eval-after-load

** New macro `with-eval-after-load'.
This is like the old `eval-after-load', but better behaved.

所以答案应该是

(with-eval-after-load 'coffee-mode
  (define-key coffee-mode-map (kbd "C-c C-c") 'coffee-compile-file)
  (define-key erlang-mode-map (kbd "C-c C-m") 'coffee-make-coffee)
  ;; Add other coffee commands
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.