如何配置 PuTTY 以便 Home/End/PgUp/PgDn 在 bash 中正常工作?

如何配置 PuTTY 以便 Home/End/PgUp/PgDn 在 bash 中正常工作?

在我的 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~

相关内容