【发布时间】:2014-06-10 08:11:14
【问题描述】:
运行cat -t后,我测试了以下情况:
ctrl+tab只添加了一个tab空格ctrl+/添加了^_ctrl+`添加了^@ctrl+shift+backspace删除到左侧(与backspace的行为相同)。
另一方面,以下键绑定保持一致:
ctrl+n添加^Nctrl+y添加^Y所有字母数字字符
[a-zA-Z0-9]添加对应的字母数字字符
有没有办法将组合键重新映射到首选输出?例如,在上面的前四个示例中,我想将它们重新映射为以下内容:
ctrl+tab到<C-tab>(而不是TAB)ctrl+/到^/(而不是^_)ctrl+`到^`(而不是^@)ctrl+shift+backspace到<C-S-backspace>(而不是DEL)
背景 (TLDR)
我想在远程机器上编辑时运行emacs -nw,但我注意到在运行emacs 和emacs -nw 之间检测到的几个键组合并不一致。以下是一些不一致的键映射,我在 Emacs 中使用 C-h k <key-binding> 进行了验证:
ctrl+tab在emacs中被检测为<C-tab>,但在emacs -nw中被检测为TAB。ctrl+/在emacs中被检测为C-/,但在emacs -nw中被检测为C-_。ctrl+`在emacs中被检测为C-`,但在emacs -nw中被检测为C-@。ctrl+shift+backspace在emacs中被检测为<C-S-backspace>,但在emacs -nw中被检测为DEL。
关于如何向我的无窗口 emacs 发送正确的组合键有什么想法吗?所有检测到不一致的键组合都涉及ctrl 的使用,但并非所有带有控件的键绑定都检测到不一致。例如,C-n 始终被检测到。
我使用的是 Ubuntu 14.04,但 Debian Wheezy 也存在这个问题。对于终端信息,我的所有服务器和本地机器上都有以下信息:
[lucas@server]/home/lucas/bin$ echo $TERM
screen
[lucas@server]/home/lucas/bin$ echo $SHELL
/bin/bash
我通常在tmux 中运行我的会话,但是无论我是否在 tmux 会话中,这个问题都仍然存在。
【问题讨论】:
-
你用什么终端?它也可以翻译键。
-
Emacs 可以处理它接收到的任何东西,但是大多数终端仿真器在它们可以发送的东西上受到严格限制(忠实地模拟特定终端的限制)。所以并不是 Emacs 检测到了错误的键序列;问题是终端从一开始就没有发送所需的序列。 FWIW Thomas Dickey's XTerm 是我所知道的最强大的终端,在发送修改后的键序列方面。
-
在您的终端中运行
cat -t,然后尝试各种按键序列可能会很有启发性。 (可能还需要在给定的键前面加上C-v前缀。也许有一种更简单的方法可以让所有输入的内容都达到这种效果?) -
this answer 中有一些类似问题的链接(尽管对于其他键)。
-
我会说一定要试试 XTerm;但配置可能是问题所在。将其配置为使终端 Emacs 和 GUI Emacs 完全等效是我的待办事项列表中长期搁置的事情,因此我没有方便的指针。 (我相信这是可能的,但上次我查找时找不到适合我的配置,而且我从来没有做过必要的工作来解决这个问题。emacswiki.org/emacs/XtermExtras 总是听起来很有希望,大概是为作者(所以 YMMV),但不幸的是,为我打破了很多绑定。)