我們知道,emacs中修改全局快捷鍵的格式如下:
(global-set-key KEY COMMAND)
如將M-j綁定到find-file函數如下:
(global-set-key (kbd "M-j") 'find-file)
那麼,如何修改特定Major Mode下的快捷鍵呢?
其基本格式如下:
(global-set-key KEYMAP KEY COMMAND)
這裏多了一個KEYMAP的名字,也就是每個Major Mode有一個KEYMAP的名字.
這裏以php-mode爲例,假如我想在php-mode的Major Mode下將M-j綁定到find-file函數,
它的做法如下:
(require 'php-mode)
(define-key php-mode-map (kbd "M-j") 'find-file)
注意: 這得先配製了php-mode,同時從php-mode.el文件中找到相應的KEYMAP的名字
你可能遇到以下兩個問題
問題1 怎樣獲得Major Mode的名字下面的函數可以幫你得到
(defun get-buffer-mode-name (buffer-or-string)
"Get the buffer major mode name."
(interactive "bBuffer Name:")
(message (with-current-buffer buffer-or-string
major-mode)))
問題2 有時候你會發現以下錯誤消息,當我設置matlab-shell-mode-map的時候出現了
wrong type argument keymapp nil
你應該先判斷是否爲空,如下設置
(if matlab-shell-mode-map
() ; Do not change the keymap if it is already set up.
(setq matlab-shell-mode-map (make-sparse-keymap))
(define-key matlab-shell-mode-map (kbd "C-c SPC") 'ace-jump-mode)
(define-key matlab-shell-mode-map (kbd "C-x SPC") 'ace-jump-mode)
(define-key matlab-shell-mode-map (kbd "RET") 'comint-send-input)
(define-key matlab-shell-mode-map (kbd "C-c C-c")'comint-interrupt-subjob)
)
更多設置例子見鏈接