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 werase
bash は、独自の設定でオーバーライドされない限り、tty 設定で見つかったキーバインディングをエミュレートします。
werase
tty行エディタでタスクを設定できません。常に(ASCII)スペースで区切られた単語を削除します。 tty行エディタとのやり取りはほとんどありません。これはcat
引数なしで入力したときに得られるものです。クールなキーバインディングが必要な場合は、次のツールでコマンドを実行できます。巻き戻すreadlineを使用します。
Bashは2つを提供します前の単語を削除するコマンド:unix-word-rubout
(Ctrl+wまたはstty werase
)とbackward-kill-word
(M-DEL
、つまりEsc Backspace)現在のロケール内の単語を一連の英数字として扱います。_
。Ctrl+に古い英数字の文字シーケンスを削除させるには、設定しないでBackspace次stty werase
の行をに入力します.inputrc
。
"\C-h": backward-kill-word
これは、端末がCtrl+Ctrl + H文字を送信すると仮定しますBackspace。残念ながら、これは標準バインディングのないキーの1つです(Backspace具体的にはめちゃくちゃだ歴史的な理由で)。
デフォルトでは、(+)kill-word
にバインドされた対称コマンドもあります。 +にバインドするには、まず端末から送信されたエスケープシーケンスを識別し、次に+を入力して+を入力すると、次の内容が挿入されます。ここで、最初の文字はエスケープ文字の視覚的表現です。それからバインディングはM-d
AltDCtrlDelete.inputrc
CtrlVCtrlDelete^[[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")
実行します。