ssh
我正在通过使用访问Linux盒子putty
。
当我不跑步时,组合键工作正常screen
。但是,Ctrl 组合键在会话下不起作用screen
。事实上,a Ctrl-any key与没有组合的相同键注册相同Ctrl。
Ctrl我通过输入-V然后输入Ctrl-key组合来找出发送到我的终端的字符来知道这一点。
例如,Ctrl- ◄(左箭头)给我^[[D
(screen
screen256-color term)。◄给了我同样的结果。
奇怪的是Alt——key组合效果很好。
特别是,我想让“forward-word”和“backward-word”键绑定在screen
.
我尝试修改.inputrc
以使用各种终端。因此,我的.inputrc
看起来像这样:
$if term=xterm
'xxx' : forward-word # xxx key gotten from Ctrl-V
'xxx' : backward-word
$endif
$if term=screen-256color
...
...
TERM
我还通过设置我的bash
个人资料的 、设置TERM
和.screenrc
设置键盘终端映射来尝试各种终端Putty
。显而易见的linux
和xterm
,不起作用。然而,由于明显的原因,我并没有尝试所有设置的排列。
附加信息:
我纠正了,箭头键组合是唯一不起作用的组合。发行版是 RHEL 6。
.screenrc:
term xterm # tried other terms as well
shell -$SHELL # login shell to reload configs
caption string "%w"
hardstatus alwayslastline "%{b kw}%H %{r}%1` %{w}| %{g}%c %{w}| %{y}%d.%m.%Y %{w}| %{g}%l %{w}| %{-b kw}%u %-Lw%{= rW}%50> %n%f %t %{-}%+Lw%<"
vbell off
defscrollback 5000
Putty的默认键盘模式ESC [n~
。
摘自 putty 手册:“在默认模式下,标记为 ESC [n~,功能键生成 ESC [11~、ESC [12~ 等”等序列。这与 Digital 终端的一般行为相匹配。”
有趣的是,实际发送的内容Putty
(按照第一个答案)https://superuser.com/questions/342848/cant-get-keyboard-to-work- Correctly-in-putty), 是
^[0D : left-arrow
^[[D : Ctrl-{left-arrow}
既然它们不同,我想putty
这不是问题吗?
FWIW,我尝试更改 Putty 上的应用程序光标键模式设置,但无济于事。我也尝试使用tmux
,却遇到了同样的问题。
答案1
在默认配置中,PuTTY 将光标键发送到普通的模式,例如,^[OA
当屏幕将光标键设置为应用模式,例如^[[A
.
这是通过屏幕发送转义序列来打开键盘(在 termcap ks
、 terminfo中smkx
)来完成的。这恰好会打开数字键盘和光标键的应用程序模式,因为两者都存在于该ks/smkx
功能中。 screen 在初始化终端时使用此功能(如果存在)。 screen 还通过在 termcap 功能中发送字符串(CS
如果已设置)来跟进,暗示原始设计是使用终端描述,其中只有键盘由 初始化ks/smkx
。
您会注意到这种差异,因为您的键绑定期望由光标键发送的字符串普通的模式。如果您修改了屏幕的终端描述以省略更改光标键的部分,则可以继续使用这些绑定。
例如,您可以这样做:
infocmp screen >foo
vi foo
并更改分配
smkx=\E[?1h\E=,
到
smkx=\E=,
然后
tic foo
编译修改后的描述。如果您以(非 root)用户身份执行此操作,tic 会将编译后的描述放入您的~/.terminfo
目录中。这种方法有缺点,tput
最好使用它来获取键绑定信息。但这很简单。
进一步阅读:
- 如何设置私有 terminfo 数据库?(ncurses 常见问题解答)
- 特殊按键(xterm 手册)
答案2
我发现这个另一个问题发布赏金后...
* Ctrl 和箭头键在 putty 中不起作用!我该怎么办?
putty 反转了 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 及更高版本。
https://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ