%3F.png)
Thefzf примеры вики-страницаописывает, как 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 и каталог я добавил только потому, что я сделал это в своем собственном сценарии использования, и я не хотел изменять команду, чтобы она не сломалась — я не так хорош в компьютерах.
Затем он заменяет все пустые строки, которые разделяют файлы, тегом NEWLINEHEREYO с помощью sed. Затем он обрезает все символы новой строки (которые уничтожат пустые строки) с помощью tr, давая однострочный вывод, что и было нужно. Затем он снова вводит разрывы с помощью другой команды sed, преобразуя NEWLINEHEREYO обратно в разрывы строк, чтобы fzf не искал его так, как будто это буквально одна строка.
Это очень неэффективно, но работает нормально для моего варианта использования. Я думаю, что команды sed, tr и sed, вероятно, можно объединить в одну, но я слишком глуп, чтобы сделать это.