Шпаргалка по fzf

0.57

Нечёткий поиск всего — файлов, истории, процессов и не только

Русский: 2026-03-29

fzf — это fuzzy finder для вашего терминала, и когда вы начнёте им пользоваться, то удивитесь, как раньше обходились без него. Перенаправьте в него что угодно — списки файлов, git-ветки, ID процессов, переменные окружения, буквально любой построчный ввод — и fzf даст вам мгновенный, интерактивный, прощающий опечатки интерфейс поиска. Он превращает «пролистай 400 строк вывода, щурясь на каждую» в «набери три символа и ты на месте».

Красота fzf в том, что это Unix-фильтр. Он читает строки из stdin, позволяет выбрать одну (или несколько) и пишет выбранное в stdout. Вот и всё. Этот простой контракт означает, что он подключается ко всему. Комбинируйте его с find, rg, git, ps, docker или чем угодно, что выдаёт текст, и у вас бесплатный интерактивный селектор. Это скотч для терминальных рабочих процессов — только элегантный.

Эта шпаргалка фокусируется на паттернах, которые вы будете использовать постоянно: основные команды, интеграции с shell, которые изменят то, как вы навигируете по файловой системе, окно предпросмотра, которое делает выбор роскошным, и готовые рецепты, превращающие fzf из «прикольной игрушки» в «незаменимую инфраструктуру». Если вы запомните только три вещи отсюда, пусть это будут Ctrl-R, Ctrl-T и флаг --preview. Всё остальное — бонус.

Базовое использование

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

Базовое использование
fzf
Запустить fzf с рекурсивным списком файлов из текущей директории
<cmd> | fzf
Перенаправить вывод любой команды в fzf для интерактивной фильтрации
fzf --query "str"
Начать с заранее заполненным поисковым запросом
fzf --filter "str"
Неинтерактивный режим — выводит совпадения в stdout и завершается
fzf --select-1
Автоматически выбрать, если есть только одно совпадение
fzf --exit-0
Немедленно выйти, если совпадений нет
fzf -m
Включить множественный выбор (Tab для переключения)
fzf --height 40%
Открыть fzf встроенно вместо полноэкранного режима
fzf --reverse
Показывать список сверху вниз вместо снизу вверх
fzf --exact
Отключить нечёткое совпадение — показывать только точные подстроки

Синтаксис поиска

Язык поиска fzf компактный, но на удивление мощный. Эти токены можно комбинировать в одном запросе.

Синтаксис поиска
sbtrkt
Нечёткое совпадение — символы должны идти по порядку, но не обязательно подряд
'wild
Точное совпадение (с префиксом одинарная кавычка)
^music
Совпадение по префиксу — должно начинаться с "music"
.mp3$
Совпадение по суффиксу — должно заканчиваться на ".mp3"
!fire
Инвертированное точное совпадение — исключить строки, содержащие "fire"
!'.mp3$
Инвертированное совпадение по суффиксу — исключить строки, заканчивающиеся на ".mp3"
foo | bar
Оператор OR — найти строки с "foo" или "bar"

Горячие клавиши внутри fzf

Когда fzf открыт, эти клавиши управляют навигацией и выбором.

Горячие клавиши внутри fzf
Ctrl-j / Ctrl-n
Переместить курсор вниз
Ctrl-k / Ctrl-p
Переместить курсор вверх
Enter
Принять текущий выбор
Tab
Переключить выбор в режиме множественного выбора (-m)
Shift-Tab
Снять выбор в режиме множественного выбора
Ctrl-a
Выбрать все совпадения (режим множественного выбора)
Ctrl-d
Снять все выборы (режим множественного выбора)
Ctrl-/
Переключить видимость окна предпросмотра
Ctrl-c / Esc
Отменить и выйти из fzf
Ctrl-l
Очистить поисковый запрос

Интеграции с shell

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

Интеграции с shell
Ctrl-R
Поиск по истории команд — лучшая фича fzf
Ctrl-T
Найти файлы и вставить выбранный путь в командную строку
Alt-C
Нечётко найти директорию и сразу перейти в неё
**<Tab>
Активировать fzf-автодополнение (например, vim **<Tab>, cd **<Tab>)
kill **<Tab>
Нечётко найти процесс для kill через автодополнение
ssh **<Tab>
Нечётко найти хост из known_hosts / ssh config

Окно предпросмотра

Окно предпросмотра превращает fzf из селектора в полноценный браузер. Вы можете предпросматривать файлы, код с подсветкой синтаксиса, изображения, git diff — всё, что можно пропустить через команду.

Окно предпросмотра
--preview "cat {}"
Показать содержимое файла в панели предпросмотра
--preview "bat --color=always {}"
Предпросмотр с подсветкой синтаксиса через bat (золотой стандарт)
--preview-window right:60%
Расположить предпросмотр справа, занимая 60% ширины
--preview-window up:50%:wrap
Расположить предпросмотр сверху с переносом строк
--preview-window hidden
Начать со скрытым предпросмотром, переключать через Ctrl-/
--bind "ctrl-u:preview-half-page-up"
Привязать Ctrl-u к прокрутке вверх в предпросмотре
--bind "ctrl-d:preview-half-page-down"
Привязать Ctrl-d к прокрутке вниз в предпросмотре

Типичные паттерны

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

Управление процессами
kill -9 $(ps aux | fzf | awk '{print $2}')
Нечётко найти и убить процесс
ps aux | fzf -m | awk '{print $2}' | xargs kill
Убить несколько процессов одновременно
Git-рабочие процессы
git branch | fzf | xargs git switch
Нечётко найти и переключиться на git branch
git log --oneline | fzf --preview "git show {1}"
Просмотр commit с предпросмотром diff
git diff --name-only | fzf --preview "git diff {}"
Просмотр изменённых файлов с diff
git stash list | fzf | cut -d: -f1 | xargs git stash pop
Интерактивно выбрать stash для применения
Docker
docker ps | fzf | awk '{print $1}' | xargs docker stop
Нечётко найти и остановить запущенный контейнер
docker images | fzf | awk '{print $3}' | xargs docker rmi
Нечётко найти и удалить образ
docker logs -f $(docker ps | fzf | awk '{print $1}')
Следить за логами выбранного контейнера
Навигация по файлам и директориям
vim $(fzf)
Открыть найденный нечётким поиском файл в редакторе
cd $(fd -t d | fzf)
Нечётко найти директорию и перейти в неё
rg --files | fzf --preview "bat --color=always {}"
Просмотр файлов проекта с подсветкой синтаксиса
rg -l "pattern" | fzf --preview "rg --color=always pattern {}"
Найти файлы по паттерну и предпросмотреть совпадения в контексте

Советы

Установите FZF_DEFAULT_COMMAND, чтобы использовать fd или rg вместо стандартного find. Они быстрее, уважают .gitignore и автоматически пропускают мусор вроде node_modules. Попробуйте export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git' в вашем профиле shell.

Настраивайте интеграции с shell независимо друг от друга через FZF_CTRL_T_COMMAND, FZF_CTRL_R_OPTS и FZF_ALT_C_COMMAND. Например, установите FZF_ALT_C_COMMAND='fd --type d', чтобы Alt-C использовал fd для молниеносного поиска директорий и автоматически игнорировал записи из .gitignore.

Поместите ваши стандартные опции fzf в FZF_DEFAULT_OPTS, чтобы они применялись везде. Хорошая отправная точка: export FZF_DEFAULT_OPTS='--height 40% --reverse --border --preview-window right:50%:wrap'. Это даст вам компактный, вертикальный макет с панелью предпросмотра при каждом вызове.

Используйте --bind для добавления пользовательских действий. Например, --bind 'ctrl-y:execute-silent(echo {} | pbcopy)' копирует текущий выбор в буфер обмена, не покидая fzf. Можно привязать любую клавишу к execute, reload, preview или изменению поведения fzf на лету.

Команда --preview имеет доступ к плейсхолдерам: {} — полная строка, {1} — первое поле, {q} — текущий запрос, {n} — номер строки. Они позволяют строить удивительно продвинутые предпросмотры без написания скриптов-обёрток.

Комбинируйте fzf с --header, чтобы придать вашим скриптам понятный контекст. Что-то вроде git branch | fzf --header "Switch to branch:" делает одноразовые скрипты отполированными. Добавьте --prompt для кастомизации текста поисковой строки.

В tmux fzf может открываться во всплывающем окне вместо встроенного режима. Используйте fzf-tmux -p 80%,60% для запуска fzf в центрированном плавающем popup-окне. Это стильно, не мешает основной панели и исчезает по завершении. Попробовав, встроенный fzf покажется тесным.

Related Tools