bashでHome/End/PgUp/PgDnが正常に動作するようにPuTTYを設定するには?

bash putty

Home, End, PageUp, PageDownキーは、カーソルやビューを移動させるのではなく、bashセッションで~を入力します。なぜこのようなことが起こるのでしょうか、また、どのような設定を変更する必要がありますか?

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

質問は元々読みました

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

(理由は〜がホームディレクトリだからだと思っていたのですが、回答によるとそうではないとのこと)

  132  None  2010-01-11


ベストアンサー

Connection > DataタブのTerminal-type Stringをデフォルトの “xterm “から “linux “に変更します。これで私の場合はうまくいきました

enter image description here

161  None  2010-02-02


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

Debian ベースのシステムでは、ncurses-term パッケージ (バージョン 5.7+20081213-1) に putty, putty-256color, putty-vt100 のターミナルタイプの terminfo 定義ファイルが含まれています。本パッケージがインストールされていれば、Putty のセッション設定 (Connection -> Data) でデフォルトの “xterm” の代わりに “Terminal-type string” を “putty” に設定することができます

Stephen Irons は “linux” にも言及していますが、これは以前の経験から正しいと信じていますが、最近はテストしていません

私のシステムでは、Home と End は正しく動作しますが、PageUp/PageDown はコンソールウィンドウをスクロールしません。(aptitude のような ncurses アプリケーションでは正常に動作し、Shift-PGUp/Shift-PGDn はコンソールウィンドウをスクロールします)

50  quack quixote  2010-02-03


キーやキーの組み合わせを押したときに、PuTTYがどのコードを端末に送信するかを確認したい場合は、Ctrl+Vを発行して、目的のキーを押せばよいだけです

例えば、私のボックスでホームキーを押すと、私のターミナルでは以下のような文字列が生成されます

^[[1~

つまり、PuTTYはエスケープ文字^[の後に文字列[1~]を送ります

~/.inputrc ファイルを $HOME フォルダに作成するか、システムに応じて /etc/inputrc ファイルを作成してください。そして、このファイルに PuTTY コードと Bash でトリガーさせたい Bash アクションを入力します

注:すべての ^[ 文字を、等価な文字列で置き換えてください

私の例では、ホームキーのコードと行頭のアクション (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

From @Cimbali: より多くのバインド可能なコマンド (previous-history: 履歴リストから `up’ を移動するなど) が利用可能になりました このリファレンスページ にあります

21  Damien Garrido  2014-09-26


Crtl+Aでスタート地点に移動します

以下は Bash のキーボードショートカットのリスト です

14  Iain  2010-01-11


実際に送信しているのは ^[[1~ であり、これはターミナルエスケープシーケンスで構成されています

  • ^[ – 脱出
  • [ – 左の角括弧
  • 1 – 1
  • ~ チルダ

Ctrl+Vを押してからHomeを押すとわかります

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

ところで、Homeを押したときに表示されるチルダとホームディレクトリを表すチルダには関係がありません。例えば、私の設定では Page-Down を押すと ^[[6~ が出てきますが、これも正しく解釈されていなければチルダが表示されます

9  Paused until further notice.  2010-01-11


これらのオプションのどれも私には効きませんでした。私は古い 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

3  TruCK  2015-01-22


他の方法では動作しませんでした。しかし、シェルが 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 ホットキーのすべてが他のプログラムで動作するわけではないので、注意して使用してください

2  Ciantic  2014-04-01


タイトルとURLをコピーしました