
BashでTab電話をかけるとプログラム可能な完成機能および(a)入力した内容に一致する一意のパスまたはコマンドで展開するか、(b)可能なオプションのリストに展開します。
キャンセルは可能ですか?フル拡張Tabを押して作った?
例:
- 私の現在のコマンドはです
ls application/views/
。 - このコマンドには2つの拡張子
helpers/
がありますscripts/
。 - 入力heTabしたら
helpers/
。 - 私は実現する他の意味
scripts
。 - これで、完全な拡張「helpers /」を削除する必要があります。
私は通常フルパス(helpers/
この場合)をバックスペースします。なぜなら、行を読むのは元に戻すControl+_退屈するからです。私が望むのは、最初に入力した文字や末尾に追加されたスペースやスラッシュに関係なく、拡張の完全一致を削除する単一のキーシーケンスです。
コメントまたは私が読んだ内容で提案されたキーシーケンスの実行リストGNUリファレンス。これらのどれも目標を達成できませんでした。:
- Meta+ - 削除せずに前bに移動します。
/
- Meta+ Del- 単語全体ではなく1文字を削除します。
- Meta+ Backspace- 削除せずに1文字後ろに移動します。
- Control+ W- 拡張パスだけでなくフルパスも削除します。したがって、私の例では、bashを押すとTab展開され、+ bashを
ls application/views/helpers
押すと削除されます。ControlWapplication/views/helpers
関連がある場合は、Gentoo Linuxシステムでvi編集モードを使用しています。設定を確認しましたが、文字が再マップされませんでした。
答え1
あなたが提供するものはキーストロークですが、そうではありません。リードラインバインディング、これは観察された動作の違いを説明することができます(試みbind -p
)。
私が考えることができる唯一の方法正確にあなたが必要とするのは、バッファ状態を格納するカスタムコンプリート関数と、バッファ状態を復元するために伴うシェル関数を呼び出す別のキーバインディングです。
@Mark Plotnickの素晴らしい提案に加えて、menu-complete
他のreadline / bashオプションは次のとおりです。
shell-backward-kill-word
拡張ファイルまたはパスの場合、完全なファイルまたはパス名となる「シェルワード」が削除されます。backward-kill-word
これは、ファイルまたはパスの場合、末尾を含むファイルまたはディレクトリ名コンポーネントになる「readline ワード」を削除します。/
undo
すべての変更をアトミックにキャンセルしますが、拡張全体を完全に削除するには何度も試す必要があります。これはほぼ確実にバインドする機能ですctrl。_(bash デフォルト)set-mark
kill-region
行の読み取り、set-mark
現在のカーソル位置の表示、kill-region
表示からカーソルまでの削除など、あまり使用されない機能です。これを行うには、後で再度削除を有効にするために事前にset-mark
(デフォルトmeta- )呼び出す必要があります(デフォルトバインディングなし)。spacekill-region
possible-completions
(meta- にバインド=)完了項目を一覧表示します。いいえコマンドバッファの変更
入力バッファを変更し、それを関数にバインドする関数を直接作成することもできます。以前に作ったものbackward-kill-word
)しかし、この状況よりはるかに良いかどうかはわかりません。
.inputrc
bashコマンドを使用せずにすぐにバインディングをテストできますbind
。たとえば、次のようになります。
bind "\C-o: backward-kill-word"
bind "\C-o: shell-backward-kill-word"
backward-kill-word
が最も適しており、デフォルトのバインディングはmetactrl-ですh。set-mark
/でkill-region
あればもっといいでしょうが、これを自動化する賢い方法が思い出されません。