在我的 Bash 会话中,Home、End、PageUp、PageDown 键均会键入 a,~
而不是移动光标/视图。为什么会发生这种情况?我需要更改哪些设置?
GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60
问题原文如下:
在 PuTTY 中,为什么按下 shell (bash) 上的“Home”键会输入“~”?或者说,如何让光标移动到我输入的命令的开头?
(我以为原因是~是家目录,但答案表明事实并非如此。)
答案1
在下面联系>数据选项卡,更改终端类型字符串 从默认的“xterm”改为“linux”。对我来说,这个方法有效。
答案2
发生这种情况是因为您没有正确设置 PuTTY 的终端类型,或者因为您的服务器没有安装正确的 terminfo 定义。
在基于 Debian 的系统上,ncurses-term软件包(版本 5.7+20081213-1)包含 terminfo 定义文件油灰,putty-256色和putty-vt100终端类型。如果您安装了此软件包,则可以在 Putty 的会话配置(连接 -> 数据)中将“终端类型字符串”设置为“putty”,而不是默认的“xterm”。
Stephen Irons 还提到“linux”是另一种可行的终端类型;根据我之前的经验,我相信这是正确的,但最近还没有测试过。
在我的系统中,这允许 Home 和 End 正常工作,尽管 PageUp/PageDown 不会滚动控制台窗口。(它们在 ncurses 应用程序中可以正常工作,例如资质,然后按 Shift-PgUp/Shift-PgDn 滚动控制台窗口。)
答案3
如果您想验证当您按下一个键或多个键组合时 PuTTY 向您的终端发送了哪个代码,您只需发出一个Ctrl+V
,然后按下所需的键。
例如在我的盒子上,按下家key 将在我的终端上生成以下字符串:
^[[1~
这意味着 PuTTY 发送转义字符^[后面跟着字符串[1~。
您可以在文件夹~/.inputrc
中创建一个文件$HOME
,或者/etc/inputrc
根据您的系统创建一个文件。然后用 PuTTY 代码和您希望由 Bash 触发的匹配 Bash 操作填充此文件。
注意:更换所有^[相当于\e细绳
在我的示例中,我将添加一行家密钥代码和行首动作(在 Bash 中默认绑定Ctrl+A
):
"\e[1~": beginning-of-line
仅供参考,我的 inputrc 文件包含以下内容:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line # Home key
"\e[4~": end-of-line # End key
"\e[5~": beginning-of-history # PageUp key
"\e[6~": end-of-history # PageDown key
"\e[3~": delete-char # Delete key
"\e[2~": quoted-insert # Insert key
"\eOD": backward-word # Ctrl + Left Arrow key
"\eOC": forward-word # Ctrl + Right Arrow key
来自@Cimbali:有更多可绑定的命令(如以前的历史记录:在历史记录列表中向上移动)可用在此参考页面上。
答案4
它实际发送的是^[[1~
一个由以下内容组成的终端转义序列:
- ^[ — 转义
- [ - 左方括号
- 1 - 一
- ~ - 波浪符号
Ctrl您可以通过按+V然后 来查看Home。
您可以通过将 PuTTY 键盘设置中的 Home 和 End 键更改为 rxvt(这会产生转义序列^[[H
,或者通过更改您正在使用的 $TERM(或通过编辑~/.inputrc
))来解决您的问题。
Home顺便说一句,按下时显示的波浪号和代表主目录的波浪号之间没有任何关系。例如,在我的设置中,如果没有正确解释波浪号,则会产生波浪号Page-Down。^[[6~