Bash のバックスペースで単語を 1 つずつ削除する

Bash のバックスペースで単語を 1 つずつ削除する

私の職場には、デフォルトのシェルとして 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 が を送信するようにし^hBackSpaceサーバーがその設定を使用していることを確認することです (stty erase '^h'に を配置する は~/.bashrc、それを強制します)。

関連情報