2014-12-02 61 views
2

这看起来像一些基本的Emacs配置问题,我不明白。在Emacs中禁用软件包的键绑定覆盖

我在网站上预装了Emacs 24.3。在Verilog文件中,按M-s绑定到p4-current-file“edit”(Perforce操作),同样M-e绑定到p4-current-file“sync”。一切都很好。 问题出在VHDL文件中,M-s也是这样,但是M-e绑定到“vhdl-end-of-statement”。我希望它能像Verilog一样进行“p4编辑”。

似乎vhdl-mode覆盖了M-e键功能,而且我也找不到如何永久地改变它。如果我执行本地未设置密钥并取消设置M-e,我会得到期望的结果,M-e会执行p4编辑,但是当我重新启动Emacs M-e时,会再次执行“vhdl-end-of-statement”。

如何更改M-e永久执行“p4编辑”?我在Lisp中不太流利,但很乐意得到如何改变这个问题的说明。 谢谢。

+0

注意,在许多重大的模式, “我”将被设置为与句子结尾/句末相当的部分。您可能会发现在日志运行中更容易重新绑定您的perforce绑定。 – Squidly 2014-12-02 14:30:53

+0

在VHDL模式下查看它使用的键盘映射代码 - 很可能是'vhdl-mode-map'。在该键盘映射中定义“M-e”作为你想要的命令。如果需要的话(例如,如果模式映射一开始就没有定义),你可以在模式钩子中放入'define-key' sexp,以便在模式打开时生效。 – Drew 2014-12-02 15:14:46

+0

MrBones,感谢您的建议,我会这样做,这也是最简单的解决方案来更改perforce绑定(请参阅下文) – avshae 2014-12-03 11:54:03

回答

1

要删除压倒一切从模式的键盘映射结合,使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 

由于MrBones的意见,不过,这些不是非常可取的定制绑定。 M-sM-e在Emacs中有标准用法(前者通常是前缀绑定,一堆有用的东西会挂起),并且如果可能的话,您应该考虑将这些绑定移动到其他键。

(我的印象是,“预装现场”版本有这些绑定已经到位有关系吗?在这种情况下,这是更多的谁主张......记)

+0

感谢phils,perforce绑定是我的.emacs文件中的全局设置键,我可以编辑它们。我决定遵循你和MrBones的建议,我改变了对ESC M-e,ESC M-s等的perforce绑定。eval-after-load看起来很有用,在下雨天保存:-)。继我对德鲁的评论之后,为了增强我的理解,我该如何修改vhdl-mode-map? (vhdl-mode.elc) – avshae 2014-12-03 12:05:15

+0

您可以使用上面显示的技术来修改'vhdl-mode-map'中的绑定,它是'vhdl-mode'的键盘映射。 'eval-after-load'确保您的代码在它存在之前不会尝试修改键盘映射。我在代码中添加了一个'progn'包装器和一个额外的例子,以展示如何做多件事情。如果你想*绑定键盘映射中的某个命令,你可以简单地用''some-command'替换'nil'。 – phils 2014-12-03 13:46:04