Debian 8.3を搭載する
_stty werase '^H'
_
またはArch Linux 2/2016
_stty werase '^?'
_
_.bashrc
_(例)では Ctrl-Backspace 端末の最後の単語を削除します。それでも、最近のGUIアプリケーション(Firefoxなど)と同じ動作ではありません。最後のwhitespace-で区切られたWordを削除します。空白で区切られた最後の単語ではありませんor. : , ; " ' & / ( )
のような文字。
作ることは可能ですか Ctrl-Backspace 端末で最新のGUIアプリケーションと同様に動作しますか?また、作る方法はありますか Ctrl-Delete カーソルの直前の単語を削除しますか?
ここには2つのラインエディターがあります。カーネルによって提供される基本的なラインエディター(標準モードのttyラインエディター)とbashのラインエディター(readlineライブラリを介して実装)です。これらの両方には、にバインドされている、前の単語への消去コマンドがあります Ctrl+W デフォルトでは。キーは、stty werase
;を使用して、標準モードのttyラインエディター用に構成できます。 bashは、独自の構成でオーバーライドされない限り、tty設定で見つけたキーバインディングを模倣します。
Ttyラインエディタのwerase
アクションは設定できません。空白で区切られた単語(ASCII)は常に消去されます。 ttyラインエディタを操作することはほとんどありません。たとえば、次のようなものです。引数なしでcat
を入力した場合。そこで豪華なキーバインディングが必要な場合は、readlineを使用する rlwrap のようなツールの下でコマンドを実行できます。
Bashには2つの 前の単語を削除するコマンド :unix-Word-rubout
(Ctrl+w またはstty werase
)とbackward-kill-Word
(M-DEL
を介して設定されます。 EscBackspace)which Wordを現在のロケールおよび_
で英数字のシーケンスとして扱います。お望みならば Ctrl+Backspace 以前の英数字のシーケンスを消去するには、stty werase
を設定せず、代わりに次の行を.inputrc
に挿入します。
"\C-h": backward-kill-Word
これは、端末がCtrl + H文字を送信することを前提としています。 Ctrl+Backspace。残念ながら、これは標準のバインディングがない(そして Backspace 特に 混乱している 歴史的な理由による)。
kill-Word
にバインドされている対称コマンドM-d
もあります(Alt+D)デフォルトで。バインドする Ctrl+Delete、まず端末が送信するエスケープシーケンスを特定し、次に対応する行を.inputrc
に追加する必要があります。タイプ Ctrl+V その後 Ctrl+Delete;これにより、^[[3;5~
のようなものが挿入されます。最初の^[
は、エスケープ文字の視覚的表現です。次に、バインディングは
"\e[3;5~": kill-Word
Wordのどちらの定義にも満足できない場合は、bashで独自の定義を提供できます。参照 bacでのemacsスタイルのキーバインディングの動作の混乱
試す
alt+backspace
初級OSでは、それはあなたが望むように機能します(ちょうどのように ctrl+backspace)
クックドモードの端末処理でのWERASE文字の動作は、少なくともLinuxでは hardcoded です。
if (kill_type == WERASE) {
/* Equivalent to BSD's ALTWERASE. */
if (isalnum(c) || c == '_')
seen_alnums++;
else if (seen_alnums)
break;
}
つまり、単語は文字、数字、アンダースコアです。これは、独自のクックドモード処理を実行するアプリケーションが実行されていない場合に、Linuxのターミナルで常に行われる方法です。
readlineのバージョン(bashなどで使用)は、カーネルのバージョンとは少し異なるようですが、 hardcoded のようにも見えます。
単語は文字と数字で構成されます。
しかし、これはbash
が実際に私に対して行うことと一致していないようです:foo+bar^W
は、bar
だけでなく、すべてを消去します。その詳細情報は here です。