タブ拡張を元に戻しますか?

タブ拡張を元に戻しますか?

BashでTab電話をかけるとプログラム可能な完成機能および(a)入力した内容に一致する一意のパスまたはコマンドで展開するか、(b)可能なオプションのリストに展開します。

キャンセルは可能ですか?フル拡張Tabを押して作った?

例:

  1. 私の現在のコマンドはですls application/views/
  2. このコマンドには2つの拡張子helpers/がありますscripts/
  3. 入力heTabしたらhelpers/
  4. 私は実現する他の意味 scripts
  5. これで、完全な拡張「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-markkill-region行の読み取り、set-mark現在のカーソル位置の表示、kill-region表示からカーソルまでの削除など、あまり使用されない機能です。これを行うには、後で再度削除を有効にするために事前にset-mark(デフォルトmeta- )呼び出す必要があります(デフォルトバインディングなし)。spacekill-region
  • possible-completionsmeta- にバインド=)完了項目を一覧表示します。いいえコマンドバッファの変更

入力バッファを変更し、それを関数にバインドする関数を直接作成することもできます。以前に作ったものbackward-kill-word)しかし、この状況よりはるかに良いかどうかはわかりません。

.inputrcbashコマンドを使用せずにすぐにバインディングをテストできますbind。たとえば、次のようになります。

bind "\C-o: backward-kill-word"
bind "\C-o: shell-backward-kill-word"

backward-kill-wordが最も適しており、デフォルトのバインディングはmetactrl-ですhset-mark/でkill-regionあればもっといいでしょうが、これを自動化する賢い方法が思い出されません。

おすすめ記事