【问题标题】:gnu screen - changing the default escape command key to ALT-X?gnu screen - 将默认的转义命令键更改为 ALT-X?
【发布时间】:2010-12-05 07:58:06
【问题描述】:

在 GNU 屏幕中,我想将默认命令绑定更改为 Alt-s(通过调整 .screenrc)而不是默认 Ca,原因是我使用 emacs,因此 GNU 屏幕绑定了 Ca 键,将“Ca”发送到emacs 变得乏味(正如@Nils 所说,要发送“Ca”我应该输入“Ca a”),以及 bash shell 中的“Ca”,我可以将转义更改为 C- 但其中一些已经映射在 emacs 和其他组合中并不像 ALT-s 那样容易。如果有人已经完成了 ALT 键映射,请告诉我。

【问题讨论】:

    标签: emacs gnu gnu-screen screenrc


    【解决方案1】:

    从我对man screen 的阅读来看,screen 可以用于命令绑定的唯一元字符似乎是CTRL

       escape xy
    
       Set  the  command character to x and the character generating a literal
       command character (by triggering the "meta" command) to y (similar to
       the -e option).  Each argument is either a single character, a two-character
       sequence of the form "^x" (meaning "C-x"), a backslash followed by an octal
       number (specifying the ASCII code of the character),  or a backslash followed
       by a second character, such as "\^" or "\\".  The default is "^Aa".
    

    如果有一些你在 emacs 中不使用的映射,即使它不方便,比如C-|,那么你可以使用你的终端输入管理器将ALT-X 重新映射到那个,让你使用ALT而是绑定。不过,这会有点骇人听闻。

    【讨论】:

    • 谢谢。这有点棘手,也许有一种直接的方法可以做到这一点
    • 您不必在转义键前面加上 Control。我使用“escape `~”,它将它设置为反引号(没有控制)。不过,我认为您不能使用 Alt-anything。
    • @silentbicyle 谢谢。是的,我知道我不必以 Control 开头,“escape `~” 对我不起作用。当我不得不在 shell 上运行的任何程序中实际操作时,我会变得乏味,这就是我更喜欢 CTL/ALT 映射的原因。
    • 在下面查看我的答案。 “转义”命令使用所谓的插入符号。因此,您将 ^G 用于 G 作为控制字符。棘手的部分是“转义”需要两个连接的参数:“控制字符”(默认为 a)和元字符(默认为 [)
    【解决方案2】:

    Screen 没有任何用于 alt 绑定的简写语法,但您可以直接给它八进制代码。例如在我的机器上,Alt-x 有十六进制代码 F8,或 370 八进制,所以放

    转义 \370x

    在我的 screenrc 中将转义码更改为 alt-X

    经过测试并在 Linux 上使用屏幕 4.00.03。

    您可能必须更改转义,因为我认为这可能取决于您的语言和代码集等:我如何发现我的转义代码是输入

    $ echo -n ^QM-x | perl -ne 'printf "%lo\n", ord($_)'
    

    ^Q 是 readline 的quoted-insert 命令(它直接插入您键入的内容而不试图解释它),而 M-x 是文字 Alt-X。

    【讨论】:

    • 我已经尝试过这个技巧,但它对我不起作用。有没有办法调试这个?
    • 嗨 Siva - 我认为最可能的差异是由于元键的终端编码。我将 xterm 与 xterm termcap/terminfo 设置一起使用;其他终端(如 kterm 或 gnome-terminal)或不同的 TERM 设置可能使用不同的编码。我的回声技巧在你的机器上产生了什么?
    【解决方案3】:

    我也是 Emacs 和 screen 用户。尽管我很少在终端中使用 Emacs —— 并且在屏幕会话中也是如此—— 我也不想放弃 C-a 的 shell(它使用 Emacs 键绑定)。我的解决方案是使用 C-j 作为 screen 的前缀键,我愿意牺牲它。在 Emacs 编程模式下,它绑定到 (newline-and-indent),我也绑定到 RET,所以我真的不会错过它。

    顺便说一句:我知道这是一个建议而不是一个答案,但我觉得这仍然足够有价值。

    【讨论】:

      【解决方案4】:

      这里是emacs用户。

      我发现的最佳解决方案是一个 ~/.screenrc 文件,其中包含以下内容:

      # C-a :source .screenrc
      
      escape ^gg
      

      在这里实时更新:https://gist.github.com/1058111

      另见:http://ubuntuforums.org/showthread.php?t=498675

      【讨论】:

      • 顺便说一句,这对我来说非常有效,因为 ^G 是 emacs 中的“取消”序列。因此,如果您的肌肉记忆“痉挛”,您不会在 emacs 中搞砸任何事情。
      • 我不喜欢这个。 C-g 是我在 Emacs 中最后想要放弃的键之一。
      • 将其更改为 "escape ^`[" 以使用反引号。默认情况下,C-` 不绑定到 Emacs 中的任何内容。
      【解决方案5】:

      可以使用 registers:bindkey 命令解决 :escape 命令限制。把它放在 .screenrc 中:

      # reset escape key to the default
      escape ^Aa
      
      # auxiliary register
      register S ^A
      
      # Alt + x produces ^A and acts as an escape key
      bindkey "^[x" process S
      
      ## Alt + space produces ^A and acts as an escape key
      # bindkey "^[ " process S
      

      http://adb.cba.pl/gnu-screen-tips-page-my.html#howto-alt-key-as-escape

      【讨论】:

        【解决方案6】:

        要使 Alt+X 成为命令的默认前缀并释放 C-a,请将以下行添加到 .screenrc:

        escape ^||
        bindkey "^[x" command
        

        作为副作用 C-|也将是命令前缀。如果您也需要这些键是免费的,那么修复“escape ^||”相应地。

        【讨论】:

        • ^[x如何转移到Alt-x,其中^表示Ctrl(我不确定)? [ 是指Alt 吗?谢谢。
        • 如果您有幸拥有Alt Gr 键(例如,在拉丁美洲键盘中),您可以利用它作为第三级修饰符来输入您可以绑定的很少使用的符号作为命令键。例如,在 Ubuntu 中使用我的 LA 键盘,我在 .screenrc 中有 bindkey "ð" command。所以,我使用Alt Gr + d(发送 ð 字符)作为我的命令键。
        【解决方案7】:

        我多年来在.screenrc 中拥有的东西:

        escape ^Zz
        

        现在对我来说,它已经被固定在肌肉记忆中了。

        不知何故,我最终不得不与其他人的配置共享屏幕,现在我一直在停止进程 (bash ^Z)...不好笑...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-19
          • 2012-08-03
          • 1970-01-01
          • 2013-09-26
          • 2015-05-09
          • 2022-01-27
          • 1970-01-01
          相关资源
          最近更新 更多