【问题标题】:How do I rebind a key in Emacs globally?如何在全局范围内重新绑定 Emacs 中的键?
【发布时间】:2013-08-15 12:46:26
【问题描述】:

我的 .emacsrc 中有这个

(define-key global-map "\C-h" 'backward-delete-char) ;;previously help

但是,当我进行 I-search 并点击 C-h 删除字符时,emacs 使用默认绑定并尝试打开帮助,当我使用 C-g 取消搜索时,它会执行向后 -在我开始搜索的文档中删除字符。

编辑:这让我想知道为什么C-h 再次映射到迷你缓冲区内的help。什么覆盖了我的全局地图定义,为什么?

【问题讨论】:

    标签: emacs keyboard-shortcuts backspace incremental-search


    【解决方案1】:

    你可以用这个:

    (keyboard-translate ?\C-h ?\C-?)
    

    这会将 C-h 翻译成退格键。

    当您执行isearchido-find-file 时,他们 覆盖 minibuffer 中的一些键。你可以重新覆盖 每种模式都有这些键,但你必须真正为每个模式都这样做 您使用的新模式。这就是为什么我建议上面的代码: 模式通常不会将退格键重新绑定到不正常的东西 就像退格一样。关键是逻辑 C-h 仍然是 在 minibuffer 内寻求帮助,但使用 keyboard-translate 你不会 有 C-h 了 - 你只是有另一个退格键。如果你 想绑定一些命令,你不能绑定到 C-h - 你必须绑定到?\C-?

    【讨论】:

    • 这似乎是重复的:stackoverflow.com/questions/683425/… 但有趣的是,您的建议并没有被提及。我想知道为什么,你的方法有问题吗?
    • 我没有遇到任何问题。它实际上只是重新映射键盘上的键。但是如果你将某些东西绑定到退格,同样的东西将绑定到C-h:它们现在是同一个键。
    • 我喜欢你的回答,但我想先更好地理解这个问题。我相应地编辑了我的问题。也许你知道为什么 minibuffer 模式会覆盖我的全局重映射?
    【解决方案2】:

    我的猜测是,当你点击“control and h”时,你并不是真的想删除一个字符,而是因为某种原因,当你按下退格键时,Emacs 会收到C-h,对吧?

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

    【讨论】:

    • 不,我想在编辑文本时点击C-i 时删除一个字符。我修改了我的问题以使其更清楚。
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2011-07-16
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2010-10-21
    • 2014-07-11
    相关资源
    最近更新 更多