新手提问:keymap是用来干什么的

教程来自这里
http://ergoemacs.org/emacs/elisp_create_major_mode_keymap.html

准备函数

(defun my-mode-cmd1 ()
  (interactive)
  (message "cmd1 called"))

(defun my-mode-cmd2 ()
  (interactive)
  (message "cmd2 called"))

(defun my-mode-cmd3 ()
  (interactive)
  (message "cmd3 called"))

(defun my-mode-cmd4 ()
  (interactive)
  (message "cmd4 called"))

教程中的键位绑定

(defvar my-mode-map nil "Keymap for `my-mode-mode")
(progn
  (setq my-mode-map (make-sparse-keymap))
  (define-key my-mode-map (kbd "C-c C-a") 'my-mode-cmd1)
  (define-key my-mode-map (kbd "C-c C-b") 'my-mode-cmd2)
  (define-key my-mode-map (kbd "C-c C-c") 'my-mode-cmd3)
  (define-key my-mode-map (kbd "C-c C-d") 'my-mode-cmd4)
  )

(define-derived-mode my-mode prog-mode "my"
  (use-local-map my-mode-map))

自己尝试的键位绑定

(define-derived-mode my-mode prog-mode "my"
  (local-set-key (kbd "C-c C-a") 'my-mode-cmd1)
  (local-set-key (kbd "C-c C-b") 'my-mode-cmd2)
  (local-set-key (kbd "C-c C-c") 'my-mode-cmd3)
  (local-set-key (kbd "C-c C-d") 'my-mode-cmd4)
  )

问题

请问下这两个做法区别在哪里,绑定键位不需要这么麻烦吧,还是说这两种方法有不同的使用对象?

my-mode-map 绑定的key是带my-mode的前缀键的,比如 my-mode的键位是 C-x,那 my-mode-cmd1的按键是 C-x C-c C-a,local-set-key 是全局键,没有mode前缀

image