fzf を使用してファイルのすべての行内を検索するにはどうすればよいですか (改行を無視)?

fzf を使用してファイルのすべての行内を検索するにはどうすればよいですか (改行を無視)?

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 を使用してすべての改行文字 (空行を破壊する) を切り捨て、必要な単一行の出力を生成します。次に、別の sed コマンドを使用して NEWLINEHEREYO を改行に変換し直して改行を再導入し、fzf が文字通り単一行であるかのように検索しないようにします。

非常に非効率的ですが、私の使用例では問題なく動作します。sed、tr、sed コマンドはおそらく 1 つに統合できると思いますが、私にはそれができないほど愚かです。

関連情報