← Блог

zoxide + fzf: как перестать печатать пути в терминале

Сережа Рис · 15 January 2026

zoxidefzfтерминал

Установил zoxide. Не работает.

Полчаса искал причину — оказалось, сам сломал одной строкой.

Починил, добавил fzf. Теперь z hsl вместо cd ~/Documents/GitHub/hsl-dashboard.

Что такое zoxide

Умный cd. Запоминает куда ты ходишь и потом прыгает туда по ключевому слову.

Написан на Rust, работает быстрее autojump в 10 раз. Стартует за 5ms против 50ms у autojump. На практике разница незаметна, но приятно.

Алгоритм называется frecency — комбинация частоты и свежести. Директория куда ходил вчера весит больше, чем та куда заглядывал месяц назад. Со временем старые пути опускаются вниз рейтинга.

Установка

brew install zoxide

Потом добавить в ~/.zshrc:

eval "$(zoxide init zsh)"

Перезапустить терминал. Всё.

Как я сломал zoxide одной строкой

У меня в конфиге было:

eval "$(zoxide init zsh)"
alias z='cd'

Видишь проблему? Alias перезаписывает функцию z, которую создаёт zoxide. Вместо умного прыгуна получаем обычный cd.

Хуже того — ломается hook. zoxide записывает пути в базу через функцию __zoxide_hook, которая вызывается при каждой смене директории. Alias убивает эту связь.

Не перезаписывай z Если хочешь заменить cd на zoxide целиком — используй --cmd cd при инициализации, а не alias.

Удалил строку с alias. Заработало.

Как пользоваться

Сначала база пустая. Ходишь по директориям через cd — zoxide запоминает каждый переход.

cd ~/Documents/GitHub/my-project
cd ~/Downloads
cd /etc/nginx

Дня за два-три база заполнится. Дальше прыгаешь:

z my-project    # → ~/Documents/GitHub/my-project
z down          # → ~/Downloads
z nginx         # → /etc/nginx

Можно комбинировать слова: z git my найдёт что-то типа ~/Documents/GitHub/my-project.

Добавляем fzf для интерактивного выбора

Tab-completion для zoxide требует fzf. Без него z foo<TAB> работает только для локальных директорий.

brew install fzf

После этого открываются два режима:

Ввод Что делает
z foo<TAB> Completion локальных директорий
z foo <TAB> Интерактивный выбор из базы zoxide
zi foo То же самое — fzf-выбор

Обрати внимание на пробел. z foo<TAB> и z foo <TAB> — разные вещи. С пробелом открывается fzf со списком всех путей из базы.

Если не хочешь помнить про пробел — используй zi. Это alias для интерактивного режима. zi git сразу откроет fzf с фильтром.

Полезные команды

Команда Что делает
zoxide query -ls Показать всю базу с весами
zoxide add /path Добавить путь вручную
zoxide remove /path Удалить путь из базы

Альтернативы

Есть autojump, оригинальный z, fasd. Я выбрал zoxide.

Rust. Быстрее autojump в 10 раз — 5ms на старт против 50ms. На практике не замечаешь, но на слабых машинах разница есть.

fzf-интеграция из коробки. 32K звёзд на GitHub, активная разработка.

autojump работает, но медленнее. Оригинальный z — shell-скрипт, fuzzy search нет. fasd заархивирован в 2022.

Итого

Две команды:

brew install zoxide fzf
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc

У меня в базе 120 путей за месяц. Чаще всего: z hsl, z whisper, z claude. Секунды на каждом переходе — за день набегает.

Источники

Подписаться на обновления — @sereja_tech