
這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 命令可能可以合併為一個,但我太笨了,無法做到這一點。