これfzf サンプル Wiki ページfzfを使用してディレクトリ内のすべてのファイルの内容内でファジー検索を実行する方法について説明します。しかし、wikiページの例では次のようになります。
ag --nobreak --nonumbers --noheading . | fzf
ファイルは行で区切られ、各行は個別に処理されます。
たとえば、ファイルは次のようになります。
hello
world
検索語「hello world」は、検索語が別の行にあるため一致しません。
行単位ではなくファイル全体を検索するためにfzfをどのように使用しますか?
答え1
やや汚れた解決策があります。
rg --heading --glob "*.txt" . some_directory_path | sed 's/^$/NEWLINEHEREYO/g' | tr '\n' ' ' | sed 's/NEWLINEHEREYO/\n/g' | fzf
説明する:
するとき
rg .
どこかで特定の形式で端末に出力を印刷し、どこかにパイプしようとすると、その形式が失われます。これを効果的に実行するにはフォーマットが必要であることがわかりました。したがって、--headingフラグはフォーマットを保持します。 --globとディレクトリは私のユースケースで実行したので追加しましたが、コマンドが壊れた場合に備えてコマンドを変更したくありませんでした私はコンピュータに精通していません。
次に、 sed を使用してファイルを区切る空白行をすべて NEWLINEHEREYO タグに置き換えます。その後、trを使用してすべての改行(空白行を切る)を切り取り、必要な1行の出力を提供します。次に、他のsedコマンドを使用してNEWLINEHEREYOを改行文字に変換し、fzfが文字通り単一行であるかのように検索しないように改行文字を再導入します。
これは非常に非効率的ですが、私のユースケースにはうまく機能します。私はsed、tr、およびsedコマンドを1つにまとめることができると思いましたが、そうするのはとても愚かです。