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

7

我试图像这样重新映射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

这很奇怪,因为我应该正在加载dired。我可能做错了什么?
1个回答

11
原帖中有过多的右括号(“pun intended”),需要删除该行末尾的两个右括号(define-key dired-mode-map (kbd "M-o") nil)))。此外,在重新定义之前,我不认为有必要将绑定设置为nil
以下是实现相同目标的另一种方法。根据需要在progn语句后添加任何其他键绑定。
(eval-after-load "dired" '(progn
  (define-key dired-mode-map (kbd "M-o") 'other-window) ))

这解决了问题。奇怪的是,不平衡的括号没有引起其他错误... - Shep
我建议您查看用户自定义文件并查找括号的其他问题。在我的Emacs之旅早期,我遇到了一些缺少和多余的闭合括号,这导致了将几个应该是分开的函数组合在一起的效果 - 例如,函数编号一(1)缺少一个闭合括号,而函数编号十(10)[在我的.emacs文件中进一步]有一个额外的闭合括号 - 因此,我有一个巨大的函数[十合一],当然不起作用。:) 在那种情况下,括号是平衡的。 - lawlist
2
M-o首先设置为nil的可能原因是,M-o默认是前缀键,至少对于某些Emacs版本,您需要先解除前缀键绑定。无论如何,这样做永远不会有坏处。 - Drew
没有使用eval-after-load,只使用define-key有什么问题? - user129393192
@user129393192 — 如果之前没有加载过该库,那么问题描述中的错误信息将会出现。这个问题是为了解决导致错误信息的问题而提出的。 - lawlist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接