如何在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
时删除一个字符。我修改了我的问题,使之更清楚。