我搜索了一番,但没能找到任何解决方案。我使用 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
答案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 + 箭头来跳转单词。