emacs中怎樣修改Major Mode的快捷鍵

我們知道,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)
  )

更多設置例子見鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章