bashでCtrl-BackspaceとCtrl-Delete

bashでCtrl-BackspaceとCtrl-Delete

Debian 8.3 のインストール

stty werase '^H'

またはArch Linux 2/2016で

stty werase '^?'

in .bashrc(例) make Ctrl-Backspace端末の最後の単語を削除します。ただし、これはまだ最新のGUIアプリケーション(Firefoxなど)と同じようには機能しません。スペース- スペースで区切られた最後の単語の代わりに区切られた単語またはこんなキャラクター. : , ; " ' & / ( )

端末で最新のGUIアプリケーションのように動作させるCtrlことは可能ですか?そして、カーソルの前にある単語を削除するBackspace方法はありますか?CtrlDelete

ベストアンサー1

これには、カーネルが提供するデフォルトの行エディタ(標準モードのtty行エディタ)とbash行エディタ(readlineライブラリを介して実装)の2行エディタがあります。どちらのコマンドも前の単語をクリアするコマンドを持ち、Ctrlデフォルトでは+にバインドされています。このキーはW標準モードのttyラインエディタで設定できます。stty werasebash は、独自の設定でオーバーライドされない限り、tty 設定で見つかったキーバインディングをエミュレートします。

werasetty行エディタでタスクを設定できません。常に(ASCII)スペースで区切られた単語を削除します。 tty行エディタとのやり取りはほとんどありません。これはcat引数なしで入力したときに得られるものです。クールなキーバインディングが必要な場合は、次のツールでコマンドを実行できます。巻き戻すreadlineを使用します。

Bashは2つを提供します前の単語を削除するコマンドunix-word-ruboutCtrl+wまたはstty werase)とbackward-kill-wordM-DEL、つまりEsc Backspace現在のロケール内の単語を一連の英数字として扱います。_Ctrl+に古い英数字の文字シーケンスを削除させるには、設定しないでBackspacestty weraseの行をに入力します.inputrc

"\C-h": backward-kill-word

これは、端末がCtrl+Ctrl + H文字を送信すると仮定しますBackspace。残念ながら、これは標準バインディングのないキーの1つです(Backspace具体的にはめちゃくちゃだ歴史的な理由で)。

デフォルトでは、(+)kill-wordにバインドされた対称コマンドもあります。 +にバインドするには、まず端末から送信されたエスケープシーケンスを識別し、次に+を入力して+を入力すると、次の内容が挿入されます。ここで、最初の文字はエスケープ文字の視覚的表現です。それからバインディングはM-dAltDCtrlDelete.inputrcCtrlVCtrlDelete^[[3;5~^[

"\e[3;5~": kill-word

単語定義のいずれも満足できない場合は、bashで独自の定義を提供できます。BashでのEmacsスタイルのキーバインディングの混乱した動作

おすすめ記事