Как перестать ждать и полюбить поиск файлов в Neovim с помощью FFF
Знакомая ситуация: вы работаете в огромном монорепозитории, нажимаете привычную комбинацию для поиска файла, и... Neovim на мгновение задумывается. Или, что еще хуже, вы допускаете опечатку в названии, и поисковик выдает «ничего не найдено», заставляя вас перепечатывать запрос. В мире, где скорость разработки решает всё, такие мелочи начинают раздражать.
Сегодня мы разберем проект, который обещает решить эти проблемы раз и навсегда. Знакомьтесь — FFF.nvim (Freakin Fast Fuzzy Finder). Это не просто очередной плагин для поиска, а инструмент с собственным «движком» на Rust, созданный специально для тех, кто ценит миллисекунды своего времени.
Почему стандартных средств уже мало?
Большинство из нас привыкло к Telescope или fzf.lua. Это отличные инструменты, но у них есть архитектурные особенности. Например, Telescope написан на Lua, и при очень больших объемах данных (десятки и сотни тысяч файлов) он может подтормаживать.
Автор FFF.nvim пошел другим путем. Вместо того чтобы нагружать процесс Neovim тяжелыми вычислениями, он вынес индексацию и поиск в отдельный бэкенд на Rust. Результат впечатляет: поиск по кодовой базе в 50 000 файлов занимает менее 10 миллисекунд. Это буквально быстрее, чем вы успеете моргнуть.
Что делает FFF по-настоящему «умным»?
1. Устойчивость к опечаткам
Это, пожалуй, моя любимая фича. Мы все люди, и пальцы иногда не попадают по нужным клавишам. FFF использует алгоритм frizbee, который понимает, что вы имели в виду main.rs, даже если написали mian.rs. Больше не нужно судорожно стирать и переписывать запрос.
2. Кросс-режимные подсказки
Представьте: вы ищете файл по названию, но такого файла нет. Обычный плагин просто покажет пустое окно. FFF в этот момент не сдается — он автоматически «пробежится» по содержимому файлов (grep) и предложит результаты оттуда. И наоборот: если вы искали текст и ничего не нашли, плагин предложит файлы с похожими названиями. Это экономит кучу времени и нервов.
3. Глубокая интеграция с Git
Плагин не просто игнорирует файлы из .gitignore. Он подсвечивает статус файлов прямо в списке поиска: измененные, новые, удаленные или стадированные. Вы сразу видите, над какими файлами работали недавно. Более того, FFF учитывает время последнего изменения в Git, чтобы поднимать наиболее актуальные для вас файлы выше в выдаче.
4. Мульти-выбор и Quickfix
Если вам нужно найти пять разных файлов и что-то в них поменять, вам не нужно открывать поиск пять раз. Выбираете нужные файлы через <Tab>, нажимаете <C-q>, и они мгновенно улетают в Quickfix-лист Neovim.
Под капотом: Rust и ленивая инициализация
FFF.nvim требует наличия Rust (nightly-версии) для сборки бинарного бэкенда. Кого-то это может отпугнуть, но поверьте, профит того стоит. Бэкенд работает в фоне, поддерживает актуальный индекс файлов и не блокирует основной поток редактора.
Интересно реализована ленивая загрузка: плагин практически не потребляет ресурсы, пока вы его не вызовете. А когда вызываете — он уже готов к работе благодаря эффективному кэшированию.
Как попробовать?
Установка через lazy.nvim выглядит стандартно, но с небольшим нюансом для сборки бинарника:
{
'dmtrKovalenko/fff.nvim',
build = function()
require("fff.download").download_or_build_binary()
end,
lazy = false, -- Плагин сам управляет своей ленивостью
keys = {
{ "ff", function() require('fff').find_files() end, desc = 'Найти файл' },
{ "fg", function() require('fff').live_grep() end, desc = 'Живой поиск по тексту' },
},
opts = {
-- Ваши настройки здесь
}
}
Практические кейсы: когда это спасает
- Работа с легаси-кодом: Когда структура папок напоминает лабиринт, и вы помните только примерное название файла. Устойчивость к опечаткам и Frecenty (приоритет часто используемых файлов) делают поиск почти интуитивным.
- Большие монорепозитории: Если ваш
node_modulesили папка с артефактами сборки весят гигабайты, FFF справится с индексацией без лагов. - Поиск по изображениям: Да, FFF умеет показывать превью картинок прямо в терминале (если ваш терминал это поддерживает, например, через
snacks.nvim). Удобно для фронтенд-разработчиков.
Итог: стоит ли переходить?
FFF.nvim — это инструмент для тех, кто чувствует, что «перерос» стандартные решения. Если вам не хватает скорости, если вы часто ошибаетесь в названиях или просто хотите более умного поведения от своего редактора — это отличный кандидат на место в вашем init.lua.
Проект активно развивается, и автор открыт к фидбеку. Сейчас отличное время, чтобы вкатиться и, возможно, даже предложить свою фичу в этот «чертовски быстрый» поисковик.
А какой поисковик используете вы? Готовы ли вы доверить индексацию своих файлов Rust-бэкенду ради скорости? Пишите в комментариях!
