在 Emacs 中禁用包键绑定覆盖

avs*_*hae 4 emacs perforce elisp

这似乎是一些我不明白的基本 Emacs 配置问题。

我在现场预装了 Emacs 24.3。在 Verilog 文件中,按 Ms 绑定到 p4-current-file “edit”(Perforce 操作),同样 Me 绑定到 p4-current-file “sync”。一切都很好。问题出在VHDL文件中,Ms做了同样的事情,但Me绑定到“vhdl-end-of-statement”。我希望它像 Verilog 中那样进行“p4 edit”。

似乎 vhdl-mode 正在覆盖 Me 键功能,并且我找不到如何永久更改它。如果我执行 local-unset-key 并取消设置 Me,我会得到所需的结果,Me 会执行 p4 edit,但是当我重新启动 Emacs Me 时,会再次执行“vhdl-end-of-statement”。

我怎样才能改变我永久进行“p4编辑”?我不太精通 Lisp,但很高兴收到如何更改此设置的说明。谢谢。

phi*_*ils 5

要从模式键映射中删除覆盖绑定,以便 Emacs 回退到通常使用的状态,通常会执行以下操作:

(eval-after-load "vhdl-mode"
  '(progn
    (define-key vhdl-mode-map (kbd "M-e") nil) ;; unbind M-e
    (define-key vhdl-mode-map (kbd "M-a") nil))) ;; unbind M-a
Run Code Online (Sandbox Code Playgroud)

不过,正如 MrBones 评论的那样,这些并不是非常理想的自定义绑定。M-s和两者M-e在 Emacs 中都有标准用途(前者通常是一个前缀绑定,其中挂有一堆有用的东西),如果可能的话,您应该考虑将这些绑定移动到其他键。

(我的印象是,“现场预安装”版本已经有了这些绑定?在这种情况下,对于维护该版本的人来说,这更像是一个注释......)