Pull to refresh

Итак, вы установили fzf. Что дальше?

Level of difficultyEasy
Reading time4 min
Views18K
Original author: Andrew Quinn

Разработчики ПО — если не единственные, то практически единственные, кому очень просто создавать инструменты для улучшения своей профессиональной работы; однако со временем это усложняет жизнь людям, постоянно переключающимся между разными инструментами и не вкладывающим время в глубокое изучение своего инструментария. Имея глубокое уважение к негласным знаниям людей лучше меня, я всё же считаю, что отличная эвристика 80/20 заключается в том, чтобы изучать старые добрые инструменты Unix cat, ls, cd, grep и cut. (а если вам повезло устроиться на должность настоящего современного сисадмина, то ещё и sed с awk.)

Однако существуют инструменты, выгода от использования которых настолько мгновенна и ценность от применения настолько уникальна, что эвристика 80/20 полностью к ним неприменима. Один из них — это fzf. И меня очень печалит то, что многие скачивают его, запускают в командной строке «как есть», а потом просто мотают головой и произносят: «Я не понимаю».

Мне хотелось бы изменить ситуацию. Предположим, что вы работаете на более-менее стандартной машине с Ubuntu. Вы только что установили fzf при помощи стандартного скрипта установки. Что же дальше?

Сначала попробуйте Ctrl+R…


В большинстве терминалов, как в Linux, так и в Windows Ctrl+R позволяет выполнять поиск в обратном порядке введённых команд. Возможно вы, как и я, не слышали об этом до сего момента, несмотря на то, что работаете с шеллом уже десяток лет; причина в том, что базовая версия этого ПО неудобна по двум причинам:

  • Чтобы получить то, что вы пытаетесь вспомнить, нужно ввести полностью совпадающую строку.
  • Вы получаете только одно превью, поэтому если ошибётесь в полностью совпадающей строке хотя бы на один символ, придётся искать ветра в поле.

fzf — довольно странная программа, потому что её установка полностью перезаписывает целую кучу горячих клавиш, чтобы сделать их лучше. В обычной ситуации мне бы это не понравилось. Но…


… Это существенное улучшение по сравнению с тем, что было.

(Стоит заметить, что установка fzf через менеджер пакетов наподобие apt может и не дать такого результата! Именно поэтому я продолжаю намекать, что следует использовать скрипт установки, даже если вы согласны со мной в том, что curl | bash — это зло!)

… а теперь попробуйте Alt+C


Допустим, вы запускаете пустой терминал. Вы пытаетесь быстро найти свои репозитории хобби-проектов и перейти к ним с помощью cd, но вы уже несколько недель не работали с ними, потому что ваша основная работа необычайно интересна и увлекательна… Как их найти?

Ответ: с помощью fzf. fzf превращает Alt+C в сочетание горячих клавиш для тюнингованного cd с нечётким поиском и позволяет очень быстро перемещаться, когда единственное, что вы смутно помните — имя нужной папки.


Основная команда fzf


Итак, мы разобрались с горячими клавишами. Откровенно говоря, эти две функции сами по себе представляют основную ценность, получаемую мной от fzf, но давайте всё-таки посмотрим, что делает сама эта команда.


Она выполняет нечёткий поиск местоположений файлов! По крайней мере, относительно вашей собственной папки. Само по себе это не особо полезно.

Но попробуйте vi $(fzf), и вуаля…!



Вы получаете возможность нечёткого поиска в редакторе!

(Кстати, в данном случае в vi нет ничего уникального. Можно вызывать команду с emacs, nano, code и любым другим редактором!)

vi $(find. '/' | fzf): для поиска произвольных файлов конфигурации


Однажды я попытался создать свою первую автоматическую перезагрузку при помощи расширения Firefox, entr и nginx. И у меня возник вопрос: где же находится nginx.conf?

Я составил список возможных действий. Можно было:

  1. Воспользоваться полузабытыми знаниями FHS, чтобы попытаться угадать при помощи trees и grep, или
  2. Просто крепко запомнить местонахождение и ощущать своё превосходство над всеми остальными, или
  3. Присоединить пайпом find. ‘/’ к fzf и начать поиск.


Мне очень нравится этот клип, потому что в нём показаны некоторые тонкости использования fzf, а также одна из наиболее продвинутых функций поиска — поиск conf$ отфильтровывает все строки, которые не заканчиваются на conf. Обратите внимание, что fzf временно сходит с ума, когда find сталкивается с кучей ошибок «Permission denied», но спустя несколько секунд приходит в себя.

Стоят ли платить этими лишними секундами за возможность нахождения файлов конфигурации таким не требующим мыслительных усилий способом? На мой взгляд, да.

Ещё меньше проблем: vi **<TAB>


Спасибо sigmonsays за то, что напомнил мне об этой возможности!

Примерно посередине спектра между «перезаписать сочетания горячих клавиш» и «использовать стандартный fzf» находится «использовать две звёздочки для нечёткого автозаполнения отступов». Вот пример того, как я применяю это для выполнения чего-то похожего на vi $(fzf):


После получения команды всё-таки придётся ещё раз нажать на Enter.

У меня пока не появилось привычки использовать это часто, потому что в реальной жизни это пригождается мне дома только как замена $(fzf), а вызов явным образом мне запомнить намного проще. Думаю, для любителей tab-tab-звёздочки это похоже на то, как мой коллега копипастит вручную из терминала, вместо того, чтобы воспользоваться :read ! echo "Hello world!".

mv $(fzf) $(fzf) — для реально страдающих амнезией


Для случаев, когда вы не помните точно, ни куда вы выполнили перемещение, ни что переместили, но понимаете, что это точно было сделано.


Знакомство с rg: с быстрым и рекурсивным по умолчанию grep


Всё, что описано ниже, можно выполнить и при помощи grep, однако истинные возможности rg (также называемого ripgrep) раскрывает его рекурсивная по умолчанию природа. Крайне рекомендую скачать его и использовать в показанных ниже примерах. Но если вы боитесь новых инструментов, то не стоит волноваться!

rg . | fzf: нечёткий поиск каждой строки в каждом файле

Итак, теперь мы зашли на территорию настоящей амнезии.

rg . | fzf | cut -d ":" -f 1: нечёткий поиск каждой строки в каждом файле и возврат местоположения файла

vim $(rg . | fzf | cut -d ":" -f 1): нечёткий поиск каждой строки в каждом файле и открытие этого файла
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 54: ↑54 and ↓0+54
Comments25

Articles