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


Home Home,End,PageUp,PageDown鍵都是a ~ 在我的bash會話中,而不是移動光標/視圖。為什麼會發生這種情況以及我需要更改哪些設置?

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

最初的問題是:

在PuTTY中,為什麼按下shell(bash)上的“Home”鍵輸入“〜”?或者更確切地說,如何將光標移動到我鍵入的命令的開頭?

(我認為原因是〜是  目錄,但答案說不是這樣。)


112
2018-01-11 16:48


起源




答案:


將Connection> Data選項卡下的Terminal-type String從默認的“xterm”更改為“linux”。它對我有用。

enter image description here


137
2018-02-02 22:54



謝謝!我嘗試使用此方法使Ctrl左/右工作後出現此問題(superuser.com/a/103097/45410)。 - Edwin Yip
重點:沒有 Terminal -> Keyboard “功能鍵和鍵盤”。 - Elazar
它可以工作,但會產生其他問題,如​​禁用鼠標支持。所以,這對我來說是不可接受的解決方案 - Anton
當連接到OS X時,此解決方案還可以在putty中使用變音符號! - lorem monkey


發生這種情況是因為您沒有正確設置PuTTY的終端類型,或者因為您的服務器沒有安裝正確的terminfo定義。

在基於Debian的系統上, ncurses的長期 package(版本5.7 + 20081213-1)包括terminfo定義文件 油灰膩子256color 和 膩子-VT100 終端類型。如果安裝了此軟件包,則可以在Putty的會話配置(連接 - >數據)中​​將“終端類型字符串”設置為“putty”而不是默認的“xterm”。

Stephen Irons還提到“linux”是另一種有效的終端類型;我相信這在以前的經驗中是正確的,但最近沒有測試過。

在我的系統上,這允許Home和End正常工作,儘管PageUp / PageDown不會滾動控制台窗口。 (它們在ncurses應用程序中可以正常工作 能力傾向,和Shift-PgUp / Shift-PgDn滾動控制台窗口。)


41
2018-02-03 00:21



是的,使用 TERM=putty 要么 TERM=putty-256color 是最明智的,但不幸的是,目前後者似乎不適合8-15的顏色(這應該是0-7的明亮版本)。其他“解決方案”很可能有時會剝奪他們公然無視所涉及的終端之間的差異。 - SamB
yum install ncurses-term 請在下次登錄時使用putty在CentOS 7上為我排序,謝謝。 - Wandering Zombie
將終端類型設置為 putty 工作但打破xterm般的鼠標支持(例如Midnight Commander) - Anton
安裝'ncurses-term'在Debian測試中為我工作。 - hochl
這些都不適合我,我在連接到centos的putty,並且不能運行yum install ncurses-term因為我不是root。 - Herman Toothrot


如果要在按鍵或組合鍵時驗證PuTTY將哪些代碼發送到終端,您只需發出一個 Ctrl+V 然後按所需的鍵。

例如在我的盒子上,按下  key將在我的終端上生成以下字符串:

^[[1~

這意味著PuTTY發送轉義字符 ^ [ 後跟字符串 [1〜

你可以創建一個 ~/.inputrc 你的文件 $HOME 文件夾,或者是 /etc/inputrc 文件取決於您的系統。然後使用PuTTY代碼和您希望由Bash觸發的匹配Bash操作填充此文件。

注意:每次更換 ^ [ 字符等同於 。\ E 串

在我的例子中,我將添加一行與我的  關鍵代碼和 開始-線的 動作(默認情況下綁定到 Ctrl+A 在Bash):

"\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')可用 在這個參考頁面上


17
2017-09-26 21:59



是的!最後! Putty的終端類型字符串對後向單詞和前向單詞沒有任何作用。這很棒 ! - Cimbali
這是唯一可接受的解決方案,因為 TERM=linux 要么 TERM=putty 打破類似xterm的鼠標支持。謝謝! - Anton


Crtl + A帶你到線的起點

這是一個 Bash鍵盤快捷鍵列表


13
2018-01-11 17:02



這一切都很棒,但Home / End在我的大腦中很難接線,而且由於我只在藍色月亮中管理過一次服務器,所以忘掉硬接線的可能性很小。 - RomanSt


它實際發送的是什麼 ^[[1~這是一個終端逃逸序列,包括:

  • ^ [ - 逃脫
  • [ - 左方括號
  • 1 - 一
  • 〜 - 代字號

你可以按下來看到 按Ctrl+V 然後

您可以通過將Home和End鍵的PuTTY鍵盤設置更改為rxvt(這使得轉義序列)來解決您的問題 ^[[H 或者通過更改您正在使用的$ TERM(或通過編輯 ~/.inputrc)。

順便說一下,當你按下時,你得到的波浪號沒有任何關係  以及代表主目錄的代字號。例如,在我的設置中 向下翻頁 產生 ^[[6~ 如果沒有正確解釋,它也會打印波浪號。


9
2018-01-11 16:58



謝謝! rxvt修復了Home鍵; End鍵現在產生一個ding。 PgUp / Down確實輸入了 ~,並沒有任何PuTTY鍵盤設置使它們工作。我的bash搞砸了,還是這個“正常”? - RomanSt
打字時你會得到什麼? echo $TERM? - Dennis Williamson
xterm (15個字符限制argh) - RomanSt
你可以嘗試添加 "\eOw": end-of-line (那是大寫字母O)給你的 ~/.inputrc文件。 - Dennis Williamson
結束鍵固定;我明白了。真的希望這樣的黑客沒有必要雖然...... - RomanSt


沒有這些選項對我有用。我正在運行一個舊的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

2
2018-01-22 22:22



對我不起作用,真可惜 - Herman Toothrot


我無法使用其他方法。然而,我創建了這個AutoHotkey腳本,只要您的shell是Bash:

#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熱鍵都適用於其他程序。


1
2018-04-01 20:41



這會弄亂我正在看這個的主要原因: screen,使用默認設置會破壞Ctrl-A,因為它將其用作轉義字符.... - Gert van den Berg