zshの貪欲でない(拡張された)地球儀

zshの貪欲でない(拡張された)地球儀

貪欲ではないワイルドカードを使用したいのですが、インターネット検索の結果、これはサポートされていません。そうですか?それでは、なぜこれが起こるのですか?

^ff* ^openたとえば、以前に再生したmp3を開くなど、記録拡張に貪欲でないグローブを使用したいと思います。

答え1

Zshには貪欲ではないワイルドカードはありません。貪欲なマッチングを実行するために私が考えることができる唯一の場所は、パラメータの代替${VAR#PATTERN}形式でプレフィックスを削除することです${VAR%PATTERN}(およびを使用した貪欲なマッチングとは対照的に${VAR##PATTERN})。${VAR%%PATTERN}

貪欲でないワイルドカードを使用するパターンをそれを使用しないパターンに変換することは常に可能ですが、変換は難しい場合があり、最悪の場合、結果のサイズは元のサイズよりも指数関数的に大きくなります。貪欲でない一致が便利な一般的な例は、数字の範囲とその後に他の項目を一致させたい場合です。たとえば、<1-42>*これは一致する43aため一致します。回避策はです。実行する操作によっては、接頭辞や接尾辞の置換を使用する準備や、他の観点から問題にアクセスするなど、他の方法が簡単になる可能性があります。<1-42>4<1-42>([^0-9]*)#

コマンドの履歴拡張を変更したいユースケースでは、例よりも1文字短く、特定の例ではより信頼性の高い別のアプローチがあります。代わりに を使用してコマンドラインの任意の位置に^ff* ^open一致させることffができ、引数にスペースが含まれていない場合にのみ機能します。

open !ff:*

これはffコマンドラインの先頭にのみ一致します(!?ffどこでも一致します)。

関連情報