如何在Emacs中全局重新绑定密钥?

如何在Emacs中全局重新绑定密钥?,emacs,keyboard-shortcuts,backspace,incremental-search,Emacs,Keyboard Shortcuts,Backspace,Incremental Search,我把这个放在我的邮箱里 (define-key global-map "\C-h" 'backward-delete-char) ;;previously help 但是,当我执行I-search并点击C-h删除字符时,emacs使用默认绑定并尝试打开帮助,当我使用C-g取消搜索时,它会在启动I-search的文档中执行向后删除字符 编辑:这让我想知道为什么C-h再次映射到minibuffer中的help。什么覆盖了我的全局地图定义及其原因?您可以使用以下选项: (keyboard-trans

我把这个放在我的邮箱里

(define-key global-map "\C-h" 'backward-delete-char) ;;previously help
但是,当我执行I-search并点击
C-h
删除字符时,emacs使用默认绑定并尝试打开帮助,当我使用
C-g
取消搜索时,它会在启动I-search的文档中执行向后删除字符

编辑:这让我想知道为什么
C-h
再次映射到minibuffer中的
help
。什么覆盖了我的全局地图定义及其原因?

您可以使用以下选项:

(keyboard-translate ?\C-h ?\C-?)
这将把C-h转换为任何地方的退格

当您执行
i搜索
i查找文件
时 覆盖小缓冲区中的某些键。你可以重新覆盖 每种模式都有这些键,但你必须为每种模式都这么做 您使用的新模式。这就是我建议使用上述代码的原因: 模式通常不会将退格重新绑定到不正常的内容 就像退格一样。关键是逻辑C-h仍然是 绑定到minibuffer内的帮助,但使用
键盘翻译
则不需要 再也没有C-h了——你只是有了另一个退格。如果你 要将某些命令绑定到它,不能绑定到C-h- 您必须绑定到
?\C-?

,您可以使用此选项:

(keyboard-translate ?\C-h ?\C-?)
这将把C-h转换为任何地方的退格

当您执行
i搜索
i查找文件
时 覆盖小缓冲区中的某些键。你可以重新覆盖 每种模式都有这些键,但你必须为每种模式都这么做 您使用的新模式。这就是我建议使用上述代码的原因: 模式通常不会将退格重新绑定到不正常的内容 就像退格一样。关键是逻辑C-h仍然是 绑定到minibuffer内的帮助,但使用
键盘翻译
则不需要 再也没有C-h了——你只是有了另一个退格。如果你 要将某些命令绑定到它,不能绑定到C-h-
您必须绑定到
?\C-?

我的猜测是,当您点击“control and h”时,您并不是真的想删除一个字符,而是由于某种原因,当您按下backspace键时,Emacs会收到
C-h
,对吗


如果是这样的话,最好的解决方案是找出如何更改您的终端仿真器,这样当您按backspace键时,它就不会向Emacs发送
C-h
(例如,它可以像现在大多数其他终端仿真器一样发送
C-?

我的猜测是,当您点击“control and h”时,您并不真的想删除字符,但是,由于某种原因,当您按下backspace键时,Emacs会收到
C-h
,对吗


如果是这样,最好的解决方案是找出如何更改您的终端仿真器,以便当您按backspace键时,它不会向Emacs发送
C-h
(例如,它可以像现在大多数其他终端仿真器一样发送
C-?
).

这似乎是重复的:但有趣的是,你的建议没有在那里被提及。我想知道为什么,你的方法有问题吗?我没有遇到任何问题。它实际上只是重新映射键盘上的键。但是如果你将某个内容绑定到backspace,那么同样的内容将绑定到
C-h
:它们现在是同一个键。我喜欢你的答案,但我想先更好地理解这个问题。我据此编辑了我的问题。也许你知道为什么minibuffer模式会覆盖我的全局重映射?这看起来像是重复的:但有趣的是,你的建议没有在那里被提及。我想知道为什么,你的方法有问题吗?我没有遇到任何问题。它实际上只是重新映射键盘上的键。但是如果你将某个内容绑定到backspace,那么同样的内容将绑定到
C-h
:它们现在是同一个键。我喜欢你的答案,但我想先更好地理解这个问题。我据此编辑了我的问题。也许你知道为什么迷你缓冲区模式会覆盖我的全局重新映射?不,我想在编辑文本时点击
C-I
时删除一个字符。我修改了我的问题,使之更清楚。不,我想在编辑文本时,当我点击
C-I
时删除一个字符。我修改了我的问题,使之更清楚。