Debugging 符号';作为变量的s值无效:直接模式映射

Debugging 符号';作为变量的s值无效:直接模式映射,debugging,emacs,Debugging,Emacs,我试图在dired中重新映射一些键,如下所示: (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) )) 不幸的是,这似乎不起作用,我得到这个错误 Symbol's value as variable

我试图在dired中重新映射一些键,如下所示:

(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)
    ))
不幸的是,这似乎不起作用,我得到这个错误

Symbol's value as variable is void: dired-mode-map

这是werid,因为我应该用dired装载。我可能做错了什么?

原始海报在这一点上有两(2)个[双关语]右括号:
(定义键驱动模式映射(kbd“M-o”)nil)
——即,需要删除该行末尾的两(2)个右括号。此外,我看不出在重新定义绑定之前将其设置为
nil
的理由

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

(eval-after-load "dired" '(progn
  (define-key dired-mode-map (kbd "M-o") 'other-window) ))

这就解决了问题。奇怪的是,不平衡的括号不会导致其他错误……我建议查看用户自定义文件并查找括号的其他问题。在我的Emacs之旅的早期,我有一些缺少的和一些额外的右括号,它们的作用是组合几个本应分开的函数——例如,函数1(1)缺少右括号,函数10(10)[在我的
.Emacs
文件中进一步]有一个额外的右括号——因此,我有一个巨大的函数[十合一],当然不起作用。:)在这种情况下,括号是平衡的。第一次将
M-o
设置为nil的一个可能原因是
M-o
在默认情况下是前缀键,至少对于某些Emacs版本,您需要首先解除前缀键绑定。无论如何,这样做是没有坏处的。