使用 PuTTY 和屏幕的 ctrl-arrow 键

使用 PuTTY 和屏幕的 ctrl-arrow 键

我搜索了一番,但没能找到任何解决方案。我使用 Windows 上的 PuTTY 连接到运行 bash 和 screen 的各种服务器。bash 似乎可以很好地使用 ctrl-arrow 键在命令行上逐字跳转,但在 screen 中却不行。在 screen 中不行,ctrl-left 发送“^[OC”,ctrl-right 发送“^[OD”。在 screen 中我得到的却是“^[[C”和“^[[D”,这似乎只是左/右箭头键的代码。在使用 PuTTY 时,有没有办法让 screen 识别 ctrl-arrow 键?(仅供参考,我不记得在 linux 中使用 gnu-terminal 而不是 PuTTY 时遇到过这个问题)。

更新:看来 PuTTY 是问题所在,因为它没有发送使此功能正常运行所需的转义代码。我暂时放弃了,并使用 Cygwin+mintty。

答案1

编辑:

以下是对我有用的方法:

  • 我的~/.bashrc设置TERM=xterm(我的恰好是TERM=xterm-256colors)覆盖屏幕的TERM=screen
  • 我设置PuTTY > 终端 > 功能 > 禁用应用程序光标键模式已检查
  • tput smkx在 Bash 提示符下输入
  • 现在 Ctrl-箭头键可以逐字跳转

  • 仅供参考,如果我这样做:
    tput smkx | hexdump -c
    我得到
    0000000 033 [ ? 1 h 033 =

    tput rmkx | hexdump -c
    给我
    0000000 033 [ ? 1 l 033 >

我认为有一种方法可以将其重新加工成更好的东西,但这是我目前所得到的,而且它似乎有效。

原始答案:

info screen

“screen”会话中的每个窗口都模拟一个 VT100 终端,并添加了一些额外功能。VT100 仿真器是硬编码的,无法模拟其他终端类型。

而且 VT100 没有 Ctrl-Arrow 键码。

答案2

正如所提到的这里,你可以输入~/.inputrc:

"\eOD": backward-word
"\eOC": forward-word

它对我有用。

答案3

我有点惊讶您让 Putty 即使在不使用屏幕的情况下也能正确发送 ctrl-arrowkeys,因为这对我来说从来没有用过。我的解决方案是切换到使用 alt-arrowkeys(meta-arrowkeys),我相信默认情况下它们在 bash 中具有相同的前向单词/后向单词绑定,尽管我不得不发出几个额外的命令让 zsh 识别它们:

bindkey "^[^[[C" 前向词 # Meta-RightArrow
bindkey "^[^[[D" 向后单词 # Meta-LeftArrow

答案4

我正在使用终端 > 键盘 > 功能键 > Xterm R6,这有助于 htop(f4 搜索等)功能键按预期工作。

我发现,不是使用 CTRL + 箭头,而是使用 ALT + 箭头来跳转单词。

相关内容