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

Rom*_*nSt 140 bash putty

Home、End、PageUp、PageDown 键都~在我的 bash 会话中键入 a ,而不是移动光标/视图。为什么会发生这种情况,我需要更改哪些设置?

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60
Run Code Online (Sandbox Code Playgroud)

这个问题最初是这样写的:

在 PuTTY 中,为什么按 shell (bash) 上的“Home”键会键入“~”?或者更确切地说,如何让它将光标移动到我输入的命令的开头?

(我认为原因是 ~ 是目录,但答案说事实并非如此。)

小智 167

将 Connection > Data 选项卡下的 Terminal-type String 从默认的“xterm”更改为“linux”。它对我有用。

在此处输入图片说明

  • 重点:不是`终端->键盘`“功能键和键盘”。 (5认同)
  • 它可以工作,但会产生其他问题,例如禁用鼠标支持。所以,这对我来说是不可接受的解决方案 (5认同)
  • 谢谢!在尝试使用此方法 (http://superuser.com/a/103097/45410) 使 Ctrl Left/Right 工作后,我遇到了这个问题。 (2认同)
  • 发现这个解决方案有一个主要问题。当将长 bash 脚本从 Windows 复制粘贴到 Putty 中的 vi 时,顶部部分会被截断。建议将终端类型字符串设置为“putty”。 (2认同)

qua*_*ote 51

发生这种情况是因为您没有正确设置 PuTTY 的终端类型,或者因为您的服务器没有安装正确的 terminfo 定义。

在基于 Debian 的系统上,ncurses-term包(版本 5.7+20081213-1)包括用于puttyputty-256colorputty-vt100终端类型的terminfo 定义文件。如果你安装了这个包,你可以在 Putty 的会话配置(连接 -> 数据)中将“终端类型字符串”设置为“putty”而不是默认的“xterm”。

Stephen Irons 还提到“linux”是另一种有效的终端类型;我相信从以前的经验来看这是正确的,但最近没有测试过。

在我的系统上,这允许 Home 和 End 正常工作,尽管 PageUp/PageDown 不滚动控制台窗口。(它们确实在 ncurses 应用程序中正常工作,例如aptitude和 Shift-PgUp/Shift-PgDn 滚动控制台窗口。)

  • 是的,使用`TERM=putty` 或`TERM=putty-256color` 是最明智的,但不幸的是,目前后者似乎不适用于颜色 8-15(应该是 0- 7)。其他“解决方案”很可能有时会因为他们公然无视所涉及终端之间的差异而失败。 (3认同)

Dam*_*ido 23

如果您想在按下某个键或组合键时验证 PuTTY 将哪个代码发送到您的终端,您只需发出 aCtrl+V然后按下所需的键。

例如在我的盒子上,按Home键将在我的终端上生成以下字符串:

^[[1~
Run Code Online (Sandbox Code Playgroud)

这意味着 PuTTY 发送转义字符^[后跟字符串[1~

您可以~/.inputrc$HOME文件夹中创建一个文件,或者/etc/inputrc根据您的系统创建一个文件。然后使用 PuTTY 代码和您希望由 Bash 触发的匹配 Bash 操作填充此文件。

注意:将每个^[字符替换为等效的\e字符串

在我的示例中,我将添加一行,其中包含我的Home键代码和行首操作(默认情况下绑定到Ctrl+ABash):

"\e[1~": beginning-of-line
Run Code Online (Sandbox Code Playgroud)

仅供参考,我的 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
Run Code Online (Sandbox Code Playgroud)

来自@Cimbali:此参考页面上提供更多可绑定的命令(如以前的历史:在历史列表中“向上移动”)。


Iai*_*ain 14

Crtl+A 带你到行首

是 Bash 键盘快捷键列表

  • 这很好,但是 Home/End 在我的大脑中是硬连线的,而且由于我只在蓝色月亮中管理服务器一次,因此忘记硬连线的机会很小。 (16认同)

Den*_*son 9

它实际发送的^[[1~是一个终端转义序列,包括:

  • ^[ - 逃脱
  • [ - 左方括号
  • 1 - 一个
  • ~ - 波浪号

您可以通过按Ctrl+V然后看到Home

您可以通过将 Home 和 End 键的 PuTTY 键盘设置更改为 rxvt(这会生成转义序列^[[H或通过更改您正在使用的 $TERM(或通过编辑~/.inputrc)来解决您的问题。

顺便说一下,按下时得到Home的波浪号和代表主目录的波浪号之间没有关系。举例来说,在我的设置Page-Down产生^[[6~也将打印一个波浪线,如果它没有被正确地解释。

  • 您可以尝试将 `"\eOw": end-of-line`(即大写字母 O)添加到您的 `~/.inputrc` 文件中。 (3认同)