如何使用 fzf 在檔案的所有行中搜尋(忽略換行符號)?

如何使用 fzf 在檔案的所有行中搜尋(忽略換行符號)?

fzf 範例 wiki 頁面描述如何使用 fzf 在目錄中的所有檔案的內容中進行模糊搜尋。但在維基頁面的範例中,例如

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 截斷所有換行符(這會破壞空白行),給出單行輸出,這就是您想要的。然後,它透過將 NEWLINEHEREYO 轉換回換行符,使用另一個 sed 指令重新引入換行符,這樣 fzf 就不會像字面上的單行一樣搜尋它。

這是非常低效的,但對於我的用例來說工作正常。我認為 sed、tr 和 sed 命令可能可以合併為一個,但我太笨了,無法做到這一點。

相關內容