如何在elisp中覆盖/更改模式键绑定?

Lor*_*ren 5 emacs elisp

特别是,当我加载dired-x时,它设置Mo以切换省略的次要模式.我使用Mo作为其他窗口,所以我想更改dired-x绑定到其他东西的键.我试图在模式加载后设置密钥如下:

(add-hook 'dired-mode-hook
  (lambda ()
    (dired-omit-mode 1)
    (global-set-key (kbd "M-o") 'other-window)
    ))
Run Code Online (Sandbox Code Playgroud)

但无济于事.

phi*_*ils 7

稍微好于将自定义全局绑定的另一个副本添加到本地模式映射,将删除本地绑定,以便它不再隐藏全局绑定.在执行此操作之前,您可能还会为该功能提供一个新密钥.

(eval-after-load "dired-x"
  '(progn
     ;; Add an alternative local binding for the command
     ;; bound to M-o
     (define-key dired-mode-map (kbd "C-c o")
       (lookup-key dired-mode-map (kbd "M-o")))
     ;; Unbind M-o from the local keymap
     (define-key dired-mode-map (kbd "M-o") nil)))
Run Code Online (Sandbox Code Playgroud)


zev*_*zev 5

直接模式绑定"遮蔽"全局绑定,因此您的"全局设置密钥"无济于事.你想要做的是覆盖dired-mode绑定:

(add-hook 'dired-mode-hook
  (lambda ()
    (dired-omit-mode 1)
    (define-key dired-mode-map (kbd "M-o") 'other-window)
    ))
Run Code Online (Sandbox Code Playgroud)

  • 但是当你使用它时,有必要存在`dired-mode-map`. (3认同)