Emacs:全局密钥重新绑定,除非密钥具有特殊含义

时间:2015-01-26 13:24:49

标签: emacs key-bindings

我想全局更改Emacs中密钥的常用绑定。例如, Return 默认运行命令newline,我希望它能运行electric-newline-and-maybe-indent。我目前正在执行

(local-set-key [return] 'electric-newline-and-maybe-indent)

通过find-file-hooks功能。不幸的是,这打破了一些模式,例如po-mode,其中 Return 具有特殊含义。我想知道一些干净的方法来进行重新绑定,以便不会影响这种特殊含义。特别是,我不想列出具体的模式,因为我可能事先不知道它们。

我认为在这个例子中,仅当绑定到 Return 的初始命令为newline时才进行重新绑定可能是一个解决方案。但是怎么做呢?或者有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

简单地:

(global-set-key [return] 'electric-newline-and-maybe-indent)

所有想要覆盖 RET 的次要模式仍然可以。

更新

好的,我想我在这里看到了问题:

(global-set-key (kbd "RET") 'electric-newline-and-maybe-indent)

不确定[return]是否有,因为我总是使用kbd。只是不要使用[return]

答案 1 :(得分:1)

我终于找到了一个解决方案,这似乎适用于我提到的所有情况(不影响po-mode):

(substitute-key-definition 'newline 'electric-newline-and-maybe-indent global-map)

我通过阅读subr.el文件找到了它。

但是,根据文档,如果将不同的键绑定到newline,这可能会产生不必要的副作用,因为所有键都会受到重新绑定的影响。否则,稍后可能会覆盖某些绑定。