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


122

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

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60

该问题最初显示为:

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

(我认为原因是〜是目录,但答案却并非如此。)

Answers:


149

将“连接”>“数据”选项卡下的终端类型字符串从默认的“ xterm”更改为“ linux”。它为我工作。

在此处输入图片说明


2
谢谢!我尝试使用此方法(superuser.com/a/103097/45410)使Ctrl向左/向右工作后出现了这个问题。
埃德温业

4
重点:不是Terminal -> Keyboard“功能键和键盘”。
Elazar 2014年

2
它可以工作,但会产生其他问题,例如禁用鼠标支持。因此,这对我来说是无法接受的解决方案
Anton

当连接到OS X时,此解决方案还可以在腻子内部产生变音符号!
lorem猴子

42

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

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

斯蒂芬·艾恩斯(Stephen Irons)还提到“ Linux”是另一种有效的终端类型。我相信从以前的经验来看这是正确的,但最近尚未对其进行测试。

在我的系统上,尽管PageUp / PageDown不会滚动控制台窗口,但这可以使Home和End正常工作。(它们在aptitude之 ncurses应用程序中可以正常工作,并且Shift-PgUp / Shift-PgDn滚动控制台窗口。)


是的,使用TERM=puttyTERM=putty-256color最明智,尽管不幸的是,目前后者似乎不适用于8-15的颜色(本来应该是0-7的明亮版本)。其他“解决方案”很可能有时会失败,因为他们公然无视所涉及终端之间的差异。
SamB 2010年

yum install ncurses-term在CentOS 7上为我对它进行了排序,下次登录时会腻子,谢谢。
Wandering Zombie

1
将终端类型设置为putty有效,但会中断类似xterm的鼠标支持(例如,对于Midnight Commander)
Anton

安装'ncurses-term'在Debian测试中对我有用。
hochl

这些对我都不起作用,我在连接centos的腻子上不能使用yum install ncurses-term,因为我不是root。
Herman Toothrot

20

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

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

^[[1~

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

您可以~/.inputrc$HOME文件夹中创建文件,也可以/etc/inputrc根据系统创建文件。然后用PuTTY代码和您要由Bash触发的匹配的Bash操作填充该文件。

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

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

"\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:此参考页上提供更多可绑定的命令(例如以前的历史记录:在历史记录列表中向上移动)。


是的!终于!Putty的终端类型字符串对于后向单词和正向单词没有任何作用。这很棒 !
Cimbali 2015年

1
这是唯一的可接受的解决方案,因为TERM=linuxTERM=putty打破的xterm状鼠标支持。谢谢!
安东

14

Crtl + A将您带到生产线的起点

是Bash键盘快捷键列表


13
一切都很好,但是Home / End扎根在我的脑海里,并且由于我只在蓝色的月亮中一次管理服务器,因此无法学习硬接线的机会很小。
2011年

9

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

  • ^ [-逃生
  • [-左方括号
  • 一对一
  • 〜-波浪号

您可以按Ctrl+ V然后按Home

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

顺便说一下Home,当您按下波浪号与代表主目录的波浪号之间没有任何关系。例如,在我的设置中,如果未正确解释代字号,也会Page-Down生成^[[6~一个代字号。


谢谢!rxvt固定了Home键;现在,“结束”键会产生响声。PgUp / Down确实可以键入~,并且PuTTY Keyboard设置都不会使它们起作用。我的bash搞砸了,还是“正常”?
RomanSt 2010年

键入时会得到什么echo $TERM
丹尼斯·威廉姆森

xterm(限制为15个字符)
RomanSt 2010年

3
您可以尝试在文件中添加"\eOw": end-of-line(大写字母O)~/.inputrc
丹尼斯·威廉姆森 Dennis Williamson)2010年

结束键固定;我知道了 真希望这样的黑客不是必需的...
RomanSt 2010年

2

这些选项都不适合我。我正在运行旧的AIX系统。我必须将以下别名添加到我的.profile中

alias __A=$(print '\0020') # ^P = up = previous command
alias __B=$(print '\0016') # ^N = down = next command
alias __C=$(print '\0006') # ^F = right = forward a character
alias __D=$(print '\0002') # ^B = left = back a character

不适合我,
可惜

1

我无法与其他方法一起使用。但是,只要您的外壳是Bash,我就创建了可以运行的AutoHotkey脚本:

#IfWinActive ahk_class PuTTY
PgUp::Send +{PgUp}
PgDn::Send +{PgDn}
Home::Send ^a   ; beginning of line
End::Send ^e    ; end of line
+^Del::Send ^k  ; delete whole line after cursor
+End::Send ^k   ; delete whole line after cursor
+Home::Send ^u  ; delete whole line before cursor
^Del::Send !d   ; delete word after cursor
^BS::Send ^w    ; delete word before cursor
^Left::Send !b  ; jump word left
^Right::Send !f ; jump word right
#IfWinActive

但是请谨慎使用,因为并非所有这些bash热键都可在其他程序中使用。


:这与我在看这个的主要原因混乱screen,其默认设置打破按Ctrl-A,因为它使用它作为转义字符....
格特·范登贝尔赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.