Ubuntu终端:如何从默认终端重新映射键绑定

时间:2014-06-10 08:11:14

标签: ubuntu emacs terminal

运行cat -t后,我测试了以下情况:

  • ctrl + tab仅添加tab空格

  • ctrl + /已添加^_

  • ctrl + `已添加^@

  • 左侧删除了
  • ctrl + shift + backspace(与backspace相同的行为)。

另一方面,以下键绑定保持一致:

  • ctrl + n添加^N

  • ctrl + y添加^Y

  • 所有字母数字字符[a-zA-Z0-9]添加相应的字母数字字符

有没有办法将键组合重新映射到首选输出?例如,在我上面的前四个例子中,我想将它们重新映射到以下内容:

  • ctrl + tab<C-tab>(而不是TAB

  • ctrl + /^/(而不是^_

  • ctrl + `^`(而不是^@

  • ctrl + shift + backspace<C-S-backspace>(而不是DEL

背景(TLDR)

我想在远程计算机上进行编辑时运行emacs -nw,但我注意到在运行emacsemacs -nw之间没有检测到多个组合键。以下是一些不一致的键映射,我在Emacs中使用C-h k <key-binding>进行了验证:

  • ctrl + tab<C-tab>中被检测为emacs,但在TAB中被检测为emacs -nw

  • ctrl + /C-/中被检测为emacs,但在C-_中被检测为emacs -nw

  • ctrl + `C-`中被检测为emacs,但在C-@中被检测为emacs -nw

  • ctrl + shift + backspace<C-S-backspace>中被检测为emacs,但在{{1}中检测为DEL }}。

有关如何将正确的密钥组合发送到无窗口的emacs的任何想法?所有不一致检测到的密钥组合都涉及emacs -nw的使用,但并非所有具有控制的密钥绑定都被不一致地检测到。例如,始终检测到ctrl

我正在使用Ubuntu 14.04,但Debian Wheezy也存在这个问题。对于终端信息,我在所有服务器和本地计算机上都有以下内容:

C-n

我通常在[lucas@server]/home/lucas/bin$ echo $TERM screen [lucas@server]/home/lucas/bin$ echo $SHELL /bin/bash 中运行会话,但无论我是否在tmux会话中,此问题仍然存在。

1 个答案:

答案 0 :(得分:1)

我怀疑你遇到的问题不仅仅是一个层面。这意味着您需要在不同的点/级别调整配置。

设置新机器时我需要做的第一件事就是遍历并删除或更改所有地方的键绑定。主要原因是因为我大量使用emacs,而现在很多事情都在偷走&#39;在他们被送到emacs之前他们是击键。

请注意,我很少在终端中运行emacs。我几乎完全在自己的窗口中运行emacs并将我的环境变量(例如EDITOR等)设置为emacsclient。这意味着我可以比打开终端和运行emacs更快地打开emacs框架。目前,我正在运行Ubuntu Gnome,但我正在认真考虑转回Sawfish或Stumpwm。

如果您要在gnome下的终端中运行emacs,则有三个&#39;层。你需要关注键绑定。

第1层:会话(gnome)层。许多标准&#39; wm可以窃取emacs密钥绑定。我通常会进入键盘设置选项,并禁用与我想在emacs中使用的绑定冲突的快捷方式,或者将它们重新绑定到另一个键。

第2层:终端模拟器。根据您使用的终端,这可能会有所不同。一般而言,由于终端仿真器将按键事件转换为应用程序并将其发送到应用程序的方式,因此在此级别上的事情会受到更多限制。终端还可以窃取一些关键事件。还有一个问题是,一些终端仿真器将更多地遵守传统的控制台&#39;接口比其他接口,在这种情况下,xsession层可能的一些键组合在终端层是不可能的。对于gnome终端,您需要查看&#39; edit-&gt; keyborad快捷键&#39;下的设置。和&#39;编辑 - &gt;配置文件首选项&#39;下的兼容性部分。

第3层:在某些情况下,您可能需要调整emacs中的密钥转换表,以便它了解终端发送的密钥转换。

是否有特殊原因要在终端中运行emacs而不是本机X11客户端?有时候有理由这样做(例如使用tmux与远程同事协作)。但是,如果在终端下没有强大的运行情况,我强烈建议在GUI模式下运行。这将消除至少1层。我还发现在运行本机时面部设置看起来比在终端下运行时更加一致,并且您可以避免在终端中使用emacs并运行外部接口功能时遇到的一些问题,例如使用ssh,tramp等。 / p>