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スタイルのキーバインディングの混乱した動作

答え2

努力する

alt+backspace

基本OSでは、希望の方法で動作します(ctrl+と同じbackspace)。

答え3

調理モード端末処理におけるWERASE文字の動作は次のとおりです。ハードコーディング、少なくともLinuxでは:

           if (kill_type == WERASE) {
                   /* Equivalent to BSD's ALTWERASE. */
                   if (isalnum(c) || c == '_')
                           seen_alnums++;
                   else if (seen_alnums)
                           break;
           }

したがって、単語は文字、数字、下線です。この状況は、独自のクッキングモード処理を実行するアプリケーションが実行されていない場合、Linux端末で常に発生します。

readlineバージョン(bashなどで使用)はカーネルバージョンと少し違うようですが、ハードコーディング:

単語は文字と数字で構成されています。

bashしかし、これは私が実際にやっていること、つまりfoo+bar^W単に削除するのではなく、すべてを削除することと一致しないようですbar。そしてより多くの関連情報ここ

答え4

あなたはそれを使用することができます自動キーターミナルアプリケーションと一致する「ウィンドウフィルタ」を使用してCtrl+をキャプチャBackspaceし、それに対処します。

たとえば、代わりにkeyboard.send_keys("<ctrl>+w")実行します。

自動キー1

関連情報