【问题标题】:Symbol's value as variable is void: dired-mode-mapSymbol 作为变量的值是 void:dired-mode-map
【发布时间】:2020-05-09 07:04:57
【问题描述】:

我正在尝试重新映射 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。我可能做错了什么?

【问题讨论】:

    标签: debugging emacs


    【解决方案1】:

    在这一点上,原始海报有两 (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) ))
    

    【讨论】:

    • 这解决了问题。奇怪的是不平衡的括号不会导致其他错误......
    • 我建议您查看该用户自定义文件并查找其他括号问题。在我的 Emacs 之旅的早期,我有一些缺失和一些额外的右括号,它们的效果是组合了几个应该分开的函数——例如,函数一 (1) 缺少右括号,而函数号十 ( 10) [在我的.emacs 文件中进一步向下] 有一个额外的右括号——因此,我有一个巨大的功能[10 合一] 当然不起作用。 :) 在那种情况下,括号是平衡的。
    • 首先将M-o设置为nil的一个可能原因是M-o默认是前缀键,至少对于某些Emacs版本,您需要先解除前缀键绑定。无论如何,这样做永远不会有坏处。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多