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

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



问题最初显示为:

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

(我以为原因是〜是主目录,但是答案说不是。)

#1 楼

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



评论


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

–叶德文
2012年11月4日在17:04

重点:不是终端->键盘“功能键和键盘”。

– Elazar
2014年12月3日13:43

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

–安东
15年9月22日在20:58

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

– lor猴
16 Mar 3 '16 at 17:30

发现此解决方案的一个主要问题。当从Windows复制粘贴一个长bash脚本到腻子中的vi时,顶部会被截断。建议将终端类型字符串设置为“ putty”。

–修补匠
20-10-7在8:35

#2 楼

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

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

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

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

评论


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

– SamB
2010-10-14 21:05

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

–流浪僵尸
2014年12月7日14:21

将终端类型设置为腻子可以工作,但是会破坏类似xterm的鼠标支持(例如,对于Midnight Commander)

–安东
15年9月22日在21:02

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

– hochl
16年8月8日在13:05

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

–Herman牙刷
16 Sep 10'在22:14

#3 楼

如果要在按某个键或组合键时验证PuTTY向终端发送的代码,只需发出Ctrl+V然后按所需的键即可。

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

^[[1~


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

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

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

在我的示例中,我将添加一行带有Home键代码和行首操作的行(默认情况下绑定到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:更多可绑定的命令(如以前的历史记录:在历史记录列表中上移'up' ),可在此参考页上找到。

评论


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

–辛巴利
15年1月24日在17:39

这是唯一可接受的解决方案,因为TERM = linux或TERM = putty break类似于xterm的鼠标支持。谢谢!

–安东
15年9月22日在21:06

#4 楼

Ctrl + A将您带到行的开头

这是Bash键盘快捷键的列表

评论


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

–RomanSt
2011年1月7日12:27

#5 楼

它实际发送的是^[[1~,它是一个终端转义序列,由以下内容组成:

[-左方括号
1-一个
〜-波浪号

您可以通过按Ctrl + V再按Home键来看到它。

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

通过按Home键,得到的波浪号之间没有任何关系和代表主目录的波浪号。例如,在我的设置中,Page-Down生成^[[6~,如果没有正确解释波浪号,也会打印波浪号。

评论


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

–RomanSt
2010年1月11日,17:39

输入echo $ TERM会得到什么?

–丹尼斯·威廉姆森
2010年1月11日,18:07

xterm(最多15个字符)

–RomanSt
2010年1月11日在18:08



您可以尝试在〜/ .inputrc文件中添加“ \ eOw”:行尾(即大写字母O)。

–丹尼斯·威廉姆森
2010年1月11日,18:21

结束键固定;我明白了真希望这样的黑客不是必需的...

–RomanSt
2010年1月11日,18:27

#6 楼

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

alias __A=$(print 'q4312078q20') # ^P = up = previous command
alias __B=$(print 'q4312078q16') # ^N = down = next command
alias __C=$(print 'q4312078q06') # ^F = right = forward a character
alias __D=$(print 'q4312078q02') # ^B = left = back a character


评论


对我不起作用

–Herman牙刷
16-09-10 22:29

#7 楼

我无法与其他方法一起使用。但是,只要您的外壳是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热键都可在其他程序中使用。

评论


这可能与我正在查看此屏幕的主要原因不符:屏幕,其默认设置会破坏Ctrl-A,因为它将它用作转义字符...。

– Gert van den Berg
16年4月19日在8:50

#8 楼

对于MTPuTTY

打开任何连接属性
单击Run PuTTY Config

打开Connection> Data选项卡并将Terminal-type string设置为linux

回到Session选项卡
在列表中选择Default Settings,然后单击Save
关闭窗口