使用带有PuTTY和屏幕的Ctrl +箭头键

我search,找不到任何地方的解决scheme。 我使用Windows中的PuTTY连接到运行bash屏幕的各种服务器。 看来bash可以很好的使用Ctrl-箭头键在命令行上逐字跳转,但在屏幕内却不起作用。 不是在屏幕上,按住左键发送“^ [OC和CTRL右键是'^ [OD]。在屏幕内我得到”^ [[C“和”^ [[D“,这似乎是代码只是左/右箭头键有没有什么办法让屏幕识别CTRL-箭头键时使用PuTTY?(FYI,我不记得有这个问题,当在Linux中使用gnuterminal而不是腻子)。

更新:它显示腻子是问题,因为它不是发送这个工作所必需的转义码。 我现在放弃使用Cygwin + mintty。

编辑:

以下是对我有用的东西:

  • 我的~/.bashrc设置TERM=xterm (我碰巧是TERM=xterm-256colors )覆盖屏幕的TERM=screen
  • 我设置PuTTY>terminal>function>禁用应用程序光标键模式进行检查
  • 我在Bash提示符处inputtput smkx
  • 现在Ctrl-Arrow键逐字跳转

  • 为了提供信息,如果我这样做:
    tput smkx | hexdump -c
    我明白了
    0000000 033 [ ? 1 h 033 =

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

我认为有一种方法可以将它改写成更好的东西,但这是我迄今为止所看到的,似乎是有效的。

原始答案:

info screen

“屏幕”会话中的每个窗口仿真一个VT100terminal,添加一些额外的function。 VT100仿真器是硬编码的,不能仿真其他terminaltypes。

而VT100s没有Ctrl-Arrow键码。

正如在这里提到的,你可以把〜/ .inputrc:

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

它为我工作。

我有点惊讶,即使没有使用屏幕,你也可以正确地发送CTRL +箭头键,因为这从来没有为我工作过。 我的解决scheme是切换到使用alt-arrowkeys(meta-arrowkeys),我相信默认情况下在bash中有相同的前向/后向字符绑定,但是我必须为zsh发出几个额外的命令来识别它们:

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

如果其他人发现像我这样的老问题,最近的解决scheme:

Ctrl和箭头键不起作用在腻子! 我该怎么办?

putty在ctrl上反转了光标键模式的感觉,这对tmux来说是很难被正确检测的。 要正确获取CTRL键,请更改terminfo设置,以便kUP5(Ctrl-Up等)为已调整的版本,并禁用smkx / rmkx,以便tmux不会更改模式。 例如,使用.tmux.conf中的这行(假设你将TERM设置为xterm):

设置-gterminal覆盖“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

如果你想正确debugging/configuration你应该看看terminfo,ncurses,screen和putty的文档。 也可以使用inputrcconfigurationbash快捷键。 查看bash的man页面并searchinputrc。

你在Putty中有正确的字符编码吗? 如果你用UTF-8连接到服务器,并且你的putty是标准字符集,那么在vim中,箭头键就会被写入。 如果腻子使用UTF-8,则可以移动光标。 也许在你的情况是一样的…

在Terminal – > Features下的puttyconfiguration中,有一些“禁用”checkbox。 您可能要尝试禁用应用程序光标键或应用程序键盘模式 – 有时腻子会尝试“太聪明”,并发送与服务器不兼容的控制字符。