Найдите все, что вам нужно с fzf

Инструмент нечеткого поиска Linux

Я благодарен за инструмент нечеткого поиска Linux, потому что он превосходит возможности командной строки, позволяя быстро находить все, что я ищу.

In this article:
* What Is fzf?
* Install fzf
* Get Started Using fzf
* Preview File Content
* Change the Default Search Command
* Use Autocompletion
* Superpower Your Command Line with fzf Key Bindings
* Other Ways to Use This Powerful Tool

🎥 Примечание. В записях терминального сеанса в этой статье используется asciinema. Когда вы нажмете на один из них, он откроется в новой вкладке, где вы сможете воспроизвести запись. Medium пока не поддерживает воспроизведение записей из статьи.

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

Некоторые из этих инструментов могут сломать парадигмы и изменить способ вашей работы. Для меня одним из таких инструментов является fzf, нечеткий поиск командной строки, разработанный в Go.

Если вы видели другие мои статьи, то, вероятно, знаете, что я большой поклонник использования среды командной строки Linux. Команда fzf значительно улучшает работу с терминалом и повышает производительность. fzf настолько универсален и мощен, что я часто говорю, что он наделяет вашу командную строку магическими способностями.

Что такое фзф?

В своей самой простой форме fzf работает как фильтр, обрабатывая текст со стандартного ввода (stdin), а затем выводя соответствующий выбор на стандартный вывод (stdout). В некотором смысле fzf похож на grep, но добавляет функции, которые делают его более подходящим для интерактивного поиска, в том числе:

  • Возможности нечеткого поиска позволяют проводить приблизительный поиск по любой части совпадения в любом порядке.
  • Сверхбыстрая скорость обработки.
  • Интерактивный выбор соответствия позволяет пользователю выбрать желаемое совпадение после первоначальной фильтрации.
  • Выбор одного или нескольких текстов.
  • Предварительный просмотр содержимого файла.
  • Полный набор функций и параметров настройки.

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

Когда я думаю об этом, я все еще в восторге от того, что у меня есть доступ к такому фантастическому инструменту от сообщества открытого исходного кода. Я благодарен, что Junegunn Choi и другие участники сделали его доступным для других.

Установить ФЗФ

Поскольку fzf разработан на Go, вы устанавливаете его, загружая бинарное приложение прямо с веб-страницы проекта Релизы. Однако, чтобы воспользоваться всеми его преимуществами, вам также следует загрузить файлы расширения оболочки, чтобы добавить новые привязки клавиш и автодополнение для вашей оболочки. Кроме того, вы можете установить версию пакета, содержащую все, что есть в репозитории вашего дистрибутива. Например, для Fedora установите его с помощью dnf:

$ sudo dnf -y install fzf

Я также рекомендую вам установить два дополнительных инструмента, которые улучшат работу с fzf: fd-find, более быструю и улучшенную версию команды find, и bat для предварительного просмотра содержимого файла. Дополнительную информацию о bat можно найти в статье Сета Кенлона Удалите команду Linux cat для bat.

Установите эти пакеты в Fedora, используя dnf:

$ sudo dnf -y install fd-find bat

Теперь, когда у вас есть fzf и все необходимые компоненты, посмотрите, как это может улучшить работу вашего терминала.

Начните использовать fzf

Чтобы начать с fzf, запустите его без аргументов. По умолчанию fzf ищет все файлы в текущем каталоге, позволяет выполнять фильтрацию и поиск в интерактивном режиме, а затем выводит результат на стандартный вывод. Например, чтобы найти файл конфигурации Pipewire по умолчанию, не зная, где он находится, вы можете использовать fzf, начиная с корневого каталога:

Обратите внимание, что fzf динамически обновляет совпадения, когда вы вводите условия поиска в любом порядке.

Кроме того, поскольку fzf печатает выборку в стандартный вывод, это дает вам неограниченную гибкость в том, как использовать его вывод. Например, представьте, что вы хотите отредактировать файл выше с помощью Vim. Вы можете использовать fzf, чтобы получить имя файла и передать его следующим образом:

$ vim $(fzf)

Или вы можете использовать fzf для копирования файла в другое место:

$ cp $(fzf) ~/.config/pipewire

Возможности безграничны, но fzf добавляет больше тонкостей, чтобы еще больше повысить вашу производительность.

Предварительный просмотр содержимого файла

Еще одна приятная функция fzf — возможность предварительного просмотра каждого файла при перемещении по интерактивному селектору. Предварительный просмотр файлов во время поиска дает вам дополнительную возможность найти то, что вы ищете, особенно если вы не уверены, какой файл вам нужен.

Вы можете использовать любую команду, которую хотите просмотреть. Вы также можете использовать сценарии, чтобы сделать его умнее и изменить его в соответствии с выбранным элементом. Например, чтобы использовать bat для предварительного просмотра файлов, вызовите fzf, используя флаг командной строки --preview:

$ fzf --preview 'bat --color=always {}'

Чтобы не вводить эту опцию каждый раз, вы можете настроить переменную среды FZF_DEFAULT_OPTS так, чтобы она применялась автоматически при каждом запуске fzf:

$ export FZF_DEFAULT_OPTS="--preview 'bat --color=always {}'"

Вы также можете установить эту переменную среды в сценарии инициализации оболочки, например .bashrc для Bash, чтобы сделать ее постоянной.

Изменить команду поиска по умолчанию

По умолчанию, когда вы выполняете fzf без аргументов, для поиска файлов используется команда find. Для более быстрого и многофункционального поиска вы можете заменить команду поиска по умолчанию на fd, установив переменную среды FZF_DEFAULT_COMMAND следующим образом:

$ export FZF_DEFAULT_COMMAND="fd --type f"

fd быстрее и умнее, чем find, игнорируя такие каталоги, как .git, и используя ваши параметры .gitignore при поиске. fdзначительно улучшает опыт.

Для постоянных изменений установите эту переменную среды в сценарии инициализации оболочки.

Используйте автозаполнение

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

Если вы установили fzf с помощью пакета Fedora, автодополнение включается автоматически. Перезагрузите терминал после установки, чтобы убедиться, что он загружает параметры автозаполнения.

Чтобы использовать автозаполнение, введите ** и нажмите Tab перед командой, чтобы запустить fzf со списком контекстно-зависимых предложений. Например, если вы используете его перед командой, которая ожидает файл, такой как vim, fzf перечисляет файлы. С другой стороны, если вы используете его с ssh, то fzf перечисляет возможные удаленные системы для подключения с ваших хостов или файлов конфигурации SSH.

$ vim ** <TAB>

Для SSH:

Вы также можете использовать автодополнение fzf для заполнения переменных среды или для поиска процессов в контексте команды kill:

Дополнительные примеры использования и настройки этой функции см. в документации проекта.

Усильте свою командную строку с помощью привязок клавиш fzf

Использование fzf напрямую или через автозаполнение — это здорово, но добавление привязок клавиш делает его еще лучше. Чтобы включить привязки клавиш, создайте соответствующий файл для вашей оболочки. Например, для Bash источник /usr/share/fzf/shell/key-bindings.bash:

$ source /usr/share/fzf/shell/key-bindings.bash

Вы также можете добавить эту строку в файл инициализации оболочки, чтобы сделать ее постоянной. Если у вас нет этого файла, скачайте его прямо из репозитория проекта.

Как только вы загрузите этот файл, вы можете использовать три привязки клавиш, чтобы быстро вызвать fzf:

  • Ctrl+t: для выбора файлов аналогично автодополнению, но с меньшим количеством нажатий клавиш.
  • Alt+c: для быстрого переключения в выбранный подкаталог.

Например, представьте, что вы хотите переключиться на каталог dnsmasq.d под /etc/NetworkManager, начиная с корневого каталога:

  • Ctrl+r: для интеллектуального поиска в истории команд.

Это одно из самых полезных fzf приложений. Эта привязка клавиш заменяет поиск по истории по умолчанию интеллектуальным поиском, который позволяет более эффективно извлекать ранее выполненные команды.

Например, используя стандартный поиск по истории, вам нужно ввести именно то, что вы ищете, иначе поиск не будет выполнен. Таким образом трудно найти длинные предыдущие команды. Использование fzf приводит к желаемому результату с помощью нескольких нажатий клавиш:

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

Другие способы использования этого мощного инструмента

fzf — это мощный и универсальный инструмент, который помогает мне значительно повысить эффективность работы с командной строкой. Я благодарен за доступ к такому инструменту.

fzf может сделать гораздо больше, чем то, что я исследовал в этой статье. Он следует философии Unix делать что-то одно и делать это хорошо. Но это одно позволяет вам использовать fzf по-разному.

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

Ознакомьтесь с Книгой Рикардо, изданной The Pragmatic Bookshelf.



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