Home / End / PgUp / PgDnがbashで正しく動作するようにPuTTYを構成する方法は?


123

キーHome、End、PageUp、PageDownはすべて~、カーソル/ビューを移動する代わりに、bashセッションでa を入力します。なぜこれが起こり、どの設定を変更する必要がありますか?

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

最初に読んだ質問:

PuTTYで、シェル(bash)の「ホーム」キーを押すと「〜」が入力されるのはなぜですか?むしろ、入力したコマンドの先頭にカーソルを移動するにはどうすればよいですか?

(理由は〜がホームディレクトリだと思ったが、答えはそうではないと言う。)

回答:


150

[接続]> [データ]タブの下の端末タイプ文字列をデフォルトの[xterm]から[linux]に変更します。それは私のために働いた。

ここに画像の説明を入力してください


2
ありがとう!この方法(superuser.com/a/103097/45410)を使用してCtrl Left / Rightを機能させようとした後、この問題が発生しました。
エドウィンイップ

4
強調:Terminal -> Keyboard「ファンクションキーとキーパッド」ではありません。
エラザー14

2
動作しますが、マウスサポートを無効にするなどの他の問題が発生します。だから、それは私にとって受け入れがたい解決策ではない
アントン

このソリューションは、OS Xに接続するときにパテ内のウムラウトも有効にします!
Loremのサル

42

これは、PuTTYの端末タイプが正しく設定されていないか、サーバーに正しいterminfo定義がインストールされていないために発生しています。

Debianベースのシステムでは、ncurses-termパッケージ(バージョン5.7 + 20081213-1)に、puttyputty-256color、およびputty-vt100端末タイプのterminfo定義ファイルが含まれています。このパッケージがインストールされている場合は、Puttyのセッション構成(接続->データ)で、デフォルトの「xterm」の代わりに「Terminal-type string」を「putty」に設定できます。

Stephen Ironsは、動作する別の端末タイプとして「linux」についても言及しています。これは以前の経験から正しいと思いますが、最近テストしていません。

私のシステムでは、これによりHomeとEndが正しく機能しますが、PageUp / PageDownはコンソールウィンドウをスクロールしません。(aptitudeなどのncursesアプリケーションで適切に動作し、Shift-PgUp / Shift-PgDnはコンソールウィンドウをスクロールします。)


はい、使用するTERM=puttyTERM=putty-256color、最も賢いですが、残念ながら現時点では後者は8〜15色(0〜7の明るいバージョンであると想定されています)で正しく機能しないようです。他の「解決策」は、関連する端末間の違いを無視して無視するために、しばしばフレークアウトする可能性が非常に高いです。
SamB

yum install ncurses-termCentOS 7で次回ログイン時にパテでソートしてくれました、ありがとう。
さまようゾンビ

1
端末タイプをputty機能するように設定するが、xtermのようなマウスのサポートを壊す(例:Midnight Commander)
アントン

'ncurses-term'をインストールすると、Debianのテストでうまくいきました。
hochl 16

これらはどれも私にとってはうまくいきません。私はcentosに接続しているパテで、rootではないのでyum install ncurses-termを実行できません。
ハーマントゥーロット16

20

キーまたはキーの組み合わせを押したときにPuTTYから端末に送信されるコードを確認する場合は、aを発行してからCtrl+V目的のキーを押すだけです。

たとえば、私のボックスでは、Homeキーを押すと、端末に次の文字列が生成されます。

^[[1~

つまり、PuTTYはエスケープ文字^ [に文字列[1〜を続けて送信します。

フォルダーに~/.inputrcファイルを作成することも、システムに応じてファイルを作成することもできます。次に、このファイルにPuTTYコードと、Bashによってトリガーされる一致するBashアクションを入力します。$HOME/etc/inputrc

注:すべての^ [文字を同等の\ 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から:このリファレンスページで利用可能なよりバインド可能なコマンド(previous-history:履歴リスト内で「上」に移動)など。


はい !最後に !Puttyの端末タイプの文字列は、後方ワードと前方ワードに対して何もしませんでした。これは素晴らしい !
シンバリ

1
これは、xtermのようなマウスのサポートを無効にするTERM=linuxか、それをTERM=putty破る唯一の許容可能な解決策です。ありがとう!
アントン


9

実際に送信^[[1~するのは、次のもので構成される端末エスケープシーケンスです。

  • ^ [-エスケープ
  • [-左角括弧
  • 1-1
  • 〜-チルダ

確認するには、Ctrl+ Vを押しHomeます。

ホームキーとエンドキーのPuTTYキーボード設定をrxvtに変更することで問題を解決できる場合があります(エスケープシーケンスを作成する^[[Hか、使用している$ TERMを変更(または編集~/.inputrc)します)。

ちなみに、押すHomeと取得するチルダとホームディレクトリを表すチルダとの間に関係はありません。例えば、私の設定でPage-Down生成し^[[6~、それが適切に解釈されていなかった場合も、チルダを印刷することになります。


ありがとう!rxvtはホームキーを修正しました。Endキーが鳴ります。PgUp / Downは実際にを入力し~ますが、PuTTYキーボードの設定では機能しません。私のbashはめちゃくちゃですか、またはこれは「正常」ですか?
RomanSt

入力すると何が得られますecho $TERMか?
デニスウィリアムソン

xterm(15文字制限
引数

3
ファイルに追加してみてください"\eOw": end-of-line(大文字のO)~/.inputrc
デニスウィリアムソン

終了キーが修正されました。私はアイデアを得る。本当にしかし...このようなハックを必要としないなあ
RomanSt

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を破る
ゲルト・ファンデンベルク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.