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

Ubuntu终端:如何从默认终端重新映射密钥绑定,ubuntu,emacs,terminal,Ubuntu,Emacs,Terminal,运行cat-t后,我测试了以下情况: ctrl+tab只添加了一个选项卡空间 ctrl+/添加了^ ctrl+`添加了^@ ctrl+shift+backspace向左删除(行为与backspace相同) 另一方面,以下键绑定保持一致: ctrl+n添加^n ctrl+y添加^y 所有字母数字字符[a-zA-Z0-9]添加相应的字母数字字符 有没有办法将组合键重新映射到首选输出?例如,在上面的前四个示例中,我想将它们重新映射到以下内容: ctrl+tab到(而不是tab) ctrl+/

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

  • ctrl
    +
    tab
    只添加了一个
    选项卡
    空间

  • ctrl
    +
    /
    添加了
    ^

  • ctrl
    +
    `
    添加了
    ^@

  • ctrl
    +
    shift
    +
    backspace
    向左删除(行为与
    backspace
    相同)

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

  • ctrl
    +
    n
    添加
    ^n

  • ctrl
    +
    y
    添加
    ^y

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

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

  • ctrl
    +
    tab
    (而不是
    tab

  • ctrl
    +
    /
    ^/
    (而不是
    ^

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

  • ctrl
    +
    shift
    +
    backspace
    (而不是
    DEL

背景(TLDR)

在远程机器上编辑时,我希望运行
emacs-nw
,但我注意到,在运行
emacs
emacs-nw
之间,并没有不一致地检测到几个组合键。下面是一些不一致的密钥映射,我已经在Emacs中使用
C-hk
验证了它们:

  • ctrl
    +
    tab
    emacs
    中检测为
    ,但在
    emacs-nw
    中检测为
    tab

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

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

  • ctrl
    +
    shift
    +
    backspace
    emacs
    中检测为
    ,但在
    emacs-nw
    中检测为
    DEL

有没有关于如何将正确的组合键发送到我的无窗口emacs的想法?所有检测到的不一致的键组合都涉及使用
ctrl
,但并非所有具有控件的键绑定都检测到不一致。例如,
C-n
始终被检测到

我使用的是Ubuntu14.04,但Debian Wheezy也存在这个问题。对于终端信息,我在所有服务器和本地计算机上都有以下信息:

[lucas@server]/home/lucas/bin$ echo $TERM
screen

[lucas@server]/home/lucas/bin$ echo $SHELL
/bin/bash

我通常在
tmux
中运行会话,但无论我是否在tmux会话中,此问题都会持续存在。

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

设置新机器时,我需要做的第一件事就是检查并删除或更改所有的密钥绑定。主要原因是我广泛使用emacs,而现在,很多东西在交付给emacs之前就“窃取”了它们的按键

请注意,我很少在终端中运行emacs。我几乎只在自己的窗口中运行emacs,并将环境变量(如编辑器等)设置为EmacClient。这意味着我可以比打开终端并运行emacs更快地打开emacs框架。目前,我正在运行UbuntuGNOME,但我正在认真考虑切换回Sawfish或Stumpwm

如果您打算在gnome下的终端中运行emacs,那么您需要查看关于键绑定的三个“层”

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

第2层:终端仿真器。这可能会因您使用的终端而异。一般来说,由于终端仿真器转换按键事件并将其发送到应用程序的方式,这一级别的限制稍微多一些。终端还可以窃取一些关键事件。还有一个问题是,一些终端仿真器比其他终端仿真器更符合传统的“控制台”接口,在这种情况下,在xsession层可能出现的一些键组合在终端层是不可能的。对于gnome终端,您需要查看“编辑->键盘快捷方式”下的设置和“编辑->配置文件首选项”下的兼容性部分

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


您希望在终端内而不是作为本机X11客户端运行emacs,有什么特殊原因吗?有时有这样做的理由(例如使用tmux与远程同事协作)。但是,如果没有在终端下运行的强大案例,我强烈建议在GUI模式下运行。这将至少消除一层。我还发现,与在终端下运行相比,在运行本机时,面部设置似乎更加一致,并且可以避免在终端中使用emacs和运行外部接口功能(如ssh、tramp等)时可能遇到的一些问题。

您使用的终端是什么?Emacs可以处理它接收到的任何东西,但是大多数终端仿真器在它们的功能上受到了严格的限制