符号的值作为变量是void:dired-mode-map

She*_*hep 4 emacs elisp

我正试图像这样重新映射一些密钥:

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

不幸的是,这似乎不起作用,我得到这个错误

Symbol's value as variable is void: dired-mode-map
Run Code Online (Sandbox Code Playgroud)

这是不可思议的,因为我应该加载到dired.我能做错什么?

law*_*ist 6

原始海报在这一点上有两(2)个[双关语]右括号: (define-key dired-mode-map (kbd "M-o") nil)))- 即,需要消除该行末尾的两(2)个右括号.此外,我没有理由nil在重新定义之前设置绑定.

以下是实现相同目标的另一种方式.progn根据需要在语句后添加任何其他键绑定.

(eval-after-load "dired" '(progn
  (define-key dired-mode-map (kbd "M-o") 'other-window) ))
Run Code Online (Sandbox Code Playgroud)

  • 首先将"Mo"设置为nil的一个可能原因是默认情况下"Mo"是前缀键,至少对于某些Emacs版本,您需要首先取消绑定前缀键绑定.无论如何,这样做绝对不会伤害. (2认同)