在PuTTY和屏幕上使用Ctrl-箭头键


33

我进行了搜索,但找不到任何解决方案。我从Windows使用PuTTY连接到运行bash和screen的各种服务器。bash似乎可以使用ctrl-arrow键在命令行上逐字跳转,但在屏幕内无法正常工作。不在屏幕上,向左ctrl发送“ ^ [OC,向右发送ctrl-” [^ OD]。在屏幕上,我得到的是“ ^ [[C”和“ ^ [[D”,这似乎是使用PuTTY时,是否有任何方法可以使屏幕识别ctrl箭头键(仅供参考,我不记得在Linux中使用gnu-terminal而不是PuTTY时遇到此问题)。

更新:看来腻子是问题所在,因为它没有发送进行此操作所需的转义码。我现在放弃,使用Cygwin + mintty。


哇,薄荷味很棒-一段时间以来一直在寻找Windows的体面的终端模拟器。感谢那。
2011年

Answers:


13

编辑:

这对我有用:

  • 我的~/.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

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

VT100没有Ctrl-Arrow键码。


set -o vi(如果您是那种人:)
MikeyB 2010年

1
@MikeyB:这有什么帮助(顺便说一句没有帮助)?
暂停,直到另行通知。

谢谢。不是我希望的答案,但是现在我可以继续使用此限制,或者使用其他键绑定。
kbosak

1
@丹尼斯:好吧,如果您是可以将头围住的人的错别字,那么它为您提供了另一种处理前进/后退的方法。set -o vi打开vi命令行模式,以便您可以击打ESC并使用vi键来移动和编辑命令行。
MikeyB 2010年

1
@kbosak:我也不满意这个答案。这就是我修复它的原因。:-)
暂停,直到另行通知。

23

正如提到这里,U可以放在〜/ .inputrc文件:

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

它为我工作。


5
这对我有用,比接受的答案容易得多。
Petrus Theron

这也对我
有用

+1个简洁有效的答案。
亚当·卡维尼斯

3
确保$include /etc/inputrc.inputrc文件的顶部,否则readline不会读取系统范围的绑定,并且Home和End之类的键会断开。
詹姆斯

1
这应该是公认的答案!
Shailen

4

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

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

我也可能走这条路线。左ctrl键比meta键或alt键要容易得多(至少在我的键盘上)。那好吧。
kbosak

4

如果其他人像我一样找到了这个老问题,可以使用一个更新的解决方案:

Ctrl和方向键在腻子中不起作用!我该怎么办?

油灰会反转ctrl上的光标键模式,这对于tmux很难正确检测到。要正确获得Ctrl键,请更改terminfo设置,使kUP5(按Ctrl-Up等)成为调整后的版本,并禁用smkx / rmkx,以便tmux不会更改模式。例如,在.tmux.conf中使用以下行(假设您将TERM设置为xterm):

设置-g终端重写“ xterm *:kLFT5 = \ eOD:kRIT5 = \ eOC:kUP5 = \ eOA:kDN5 = \ eOB:smkx @:rmkx @”

请注意,这仅适用于tmux 1.2及更高版本。

http://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ


0

如果要正确调试/配置,则应查看terminfo,ncurses,屏幕和腻子的文档。bash快捷方式也可以使用inputrc进行配置。查看bash的手册页并搜索inputrc。


我不认为输入RC中的问题是什么。我已经尝试了几种可能的解决方案,其中涉及将条目放入inputrc中没有成功。再次,似乎不正确的代码被发送到屏幕的ctrl-箭头键。我也不想花很多时间在此上,因为这实际上只是一个小麻烦。
kbosak 2010年

0

您在Putty中使用正确的字符编码吗?如果您以UTF-8连接到服务器,并且腻子位于标准字符集(vim)中,则将写入箭头键。如果Putty在UTF-8中,则可以移动光标。也许您的情况是一样的...


这根本不是vi / vim问题,我在PuTTY中只看到了一个字符集选项,但没有帮助。
kbosak 2010年

尝试使用“终端”->“键盘”->“功能键和键盘”中的其他选项。顺便说一句,对我来说,Ctrl-Arrow也无法在bash中工作,它的功能与不按Ctrl相同。
莫里亚蒂教授

是的,我尝试了尽可能多的选项和选项组合,但没有任何运气。仅供参考,您可以在inputrc中输入一些条目,以帮助使用bash中的ctrl-arrow键,但是在使用屏幕时它们无济于事。
kbosak

0

在终端->功能下的腻子配置中,有一些“禁用”复选框。您可能想尝试禁用应用程序光标键或应用程序键盘模式-有时腻子会变得“太聪明”,并发送与服务器不兼容的控制字符。


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.