
私の職場には、デフォルトのシェルとして csh を使用するサーバーがあります。私は bash を好むので、ログインするたびに を起動しますbash
。
しかし、何らかの理由で、バックスペース ボタンを押すと、文字が削除されるのではなく、単語全体が削除されます。これはなぜでしょうか。これを変更して、バックスペースで文字ごとに削除するにはどうすればよいでしょうか。
ちなみに、Shift+Bksp は文字単位で削除します。可能であれば、Shift+Bksp で単語単位で削除できるようにしたいと思います。可能な場合に限ります。
ありがとう
PS: Shift キーを押し続けるように言わないでください。本当に迷惑です。
答え1
^h
端末によっては、キーとして (文字番号 8)を送信しBackSpace、^?
(文字番号 127) を送信するものもあります。多くの端末エミュレーターは設定可能であり、ほとんどのプログラムは、どのキーが期待されるかを認識するように設定できます。当然、双方が同意する必要があります。
Stty は、アプリケーションが端末の設定を照会できる方法です。erase = ^?
は、サーバー上の端末記述ファイルで、端末が を送信すると^?
「前の文字を消去する」という意味になる、と規定されていることを意味します。werase = ^?
は、^?
「前の単語を消去する」という意味になります。 これら 2 つの設定には矛盾があります。
SSH 経由でログインすると、SSH クライアントはターミナルの名前を送信し、それがTERM
環境変数に設定されます。サーバー上のプログラムは、データベース (termcap または terminfo と呼ばれる) でターミナルの説明を検索します。これらの説明が壊れている場合、またはどこかの設定ファイル (または または など) が間違ったデータで説明を上書きしている場合/etc/profile
、~/.login
不一致~/.bashrc
が発生する可能性があります。たとえば、問題の原因の 1 つとして、ターミナルがバックスペース キーを送信しているときに、初期化ファイルに コマンド (単語の消去を意味するようにstty werase '^?'
強制する) が含まれていることが考えられます。^?
^?
理想的には、多くのプログラムがこの情報を読み取るため、競合を修正する必要があります。
^?
Putty では、または^h
キーのどちらを送信するかを設定できますBackSpace。この設定の値を確認してください。おそらく、問題を解決する最も簡単な方法は、Putty が を送信するようにし^h
、BackSpaceサーバーがその設定を使用していることを確認することです (stty erase '^h'
に を配置する は~/.bashrc
、それを強制します)。