Привіт, я Kernelka! Сьогодні покажу, як скласти супершвидкий стек для пошуку й навігації у терміналі Linux: fd для швидкого пошуку файлів, ripgrep (rg) для блискавичного пошуку вмісту та fzf для зручного fuzzy-вибору. Разом вони перетворюються на магічний телепорт по вашому проєкту 🔎⚡
Чому саме fd + ripgrep + fzf
Класичні find/grep — потужні, але повільні й багатослівні. Натомість:
- fd — швидша і дружня альтернатива find, поважає .gitignore.
- ripgrep (rg) — шукає вміст у мить, теж знає про .gitignore.
- fzf — інтерфейс для нечіткого пошуку, який дає вибрати потрібне без мороки.
У парі це дає миттєвий пошук файлів і рядків коду та моментальний перехід у потрібне місце. Це не просто трюк, а цілий набір трюки Linux, що економить години.
Встановлення
Нижче — швидкі apt команди та інші способи встановлення. Додатково раджу встановити bat для красивого попереднього перегляду у fzf.
Ubuntu/Debian
sudo apt update
sudo apt install fd-find ripgrep fzf bat
# На Debian/Ubuntu двійковий файл fd має назву fdfind — зробимо зручне посилання
mkdir -p ~/.local/bin
ln -s "$(command -v fdfind)" ~/.local/bin/fd
# Додамо ~/.local/bin у PATH (для bash)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Fedora
sudo dnf install fd-find ripgrep fzf bat
mkdir -p ~/.local/bin
ln -s "$(command -v fdfind)" ~/.local/bin/fd
Arch/Manjaro
sudo pacman -S --needed fd ripgrep fzf bat
How-to: миттєва навігація та пошук
1) Відкривати файли миттєво (fd → fzf → $EDITOR)
Обираємо файл фуззі-пошуком і відкриваємо в редакторі (працює з $EDITOR, за замовчуванням — nvim):
export EDITOR=${EDITOR:-nvim}
file=$(fd . --hidden --follow --exclude .git \
| fzf --preview 'bat --style=numbers --color=always {} | sed -n "1,200p"' \
--height 40% --reverse)
[ -n "$file" ] && "$EDITOR" "$file"
2) Шукати текст у файлах і стрибати на рядок (rg → fzf → +line)
Пошук за вмістом із підсвіткою, попереднім переглядом і переходом на потрібний рядок:
rg -n --no-heading --smart-case --color=always "search term" \
| fzf --ansi --delimiter : --preview 'bat --style=numbers --color=always --highlight-line {2} {1} | sed -n "1,200p"' \
--bind 'enter:execute(${EDITOR:-nvim} +{2} {1})+abort' \
--height 50% --reverse
3) Функції для щоденної роботи (bash скрипти)
Додайте це у ~/.bashrc або ~/.zshrc — і матимете гарячі команди щодня у терміналі Linux.
# fcd: fuzzy cd у директорію
fcd() {
local dir
dir=$(fd -t d . --hidden --follow --exclude .git | fzf --height 40% --reverse)
[ -n "$dir" ] && cd "$dir" || return
}
# v: вибрати файл та відкрити у $EDITOR з прев'ю
v() {
local file
file=$(fd . --hidden --follow --exclude .git \
| fzf --preview 'bat --style=numbers --color=always {} | sed -n "1,200p"' \
--height 50% --reverse)
[ -n "$file" ] && "${EDITOR:-nvim}" "$file"
}
# rgg: fuzzy-grep — шукати рядок і стрибати на нього
rgg() {
local q line file ln
q=${1:-}
[ -z "$q" ] && read -rp "Query: " q
line=$(rg -n --no-heading --smart-case --color=always "$q" \
| fzf --ansi --delimiter : \
--preview 'bat --style=numbers --color=always --highlight-line {2} {1} | sed -n "1,200p"' \
--height 60% --reverse) || return
file=$(printf '%s' "$line" | cut -d: -f1)
ln=$(printf '%s' "$line" | cut -d: -f2)
[ -n "$file" ] && "${EDITOR:-nvim}" +"${ln:-1}" "$file"
}
# fsearch: живий пошук із перезавантаженням списку під час набору
fsearch() {
fzf --ansi --phony -q "$1" \
--bind "change:reload:rg -n --no-heading --color=always --smart-case {q} || true" \
--delimiter : \
--preview 'bat --style=numbers --color=always --highlight-line {2} {1} | sed -n "1,200p"' \
--bind 'enter:execute(${EDITOR:-nvim} +{2} {1})+abort' \
--height 60% --reverse
}
Альтернативні способи
- Без fd/ripgrep:
find . -type f | fzfіgrep -R "term" | fzf— повільніше, але працює всюди. - Лише ripgrep для імен файлів:
rg --files | fzf— часто достатньо для невеликих проєктів. - Альтернатива fzf: skim (
sk) — сумісний інтерфейс із додатковими фішками.
GUI-спосіб (якщо без термінала ніяк)
У Visual Studio Code вбудовано ripgrep: натискайте Ctrl+P для швидкого відкриття файлів та Ctrl+Shift+F для пошуку по вмісту. Це майже та ж магія, що й у консолі, але з графічним інтерфейсом.
FAQ
fd: command not found
На Debian/Ubuntu/Fedora пакет називається fd-find, а двійковий файл — fdfind. Створіть симлінк на fd у ~/.local/bin (див. секцію встановлення) і додайте його у PATH.
Попередній перегляд не працює: bat: command not found
Встановіть bat з вашого пакетного менеджера або замініть прев'ю у командах на sed -n "1,200p".
Як ігнорувати зайві директорії (node_modules, venv)?
І fd, і ripgrep за замовчуванням читають .gitignore. Додатково використовуйте -g '!pattern' у rg або --exclude у fd. Приклад: fd . --exclude node_modules, rg -n -g '!node_modules' term.
Результати повільні на мережевих дисках
Обмежуйте глибину: fd -d 4, типи: fd -t f, або зону пошуку: fd . src/. Для rg — --max-columns, -S, -g фільтри.
Кольори зникають у pager
Використовуйте less -R або не переспрямовуйте кольоровий вивід у less. У fzf додавайте --ansi (ми це вже робимо).
Працює в zsh/fish?
Так. Функції з прикладів підходять і для zsh. Для fish синтаксис інший, але логіка та сама — виклики fd/rg → fzf → дія.
Порада від Kernelka
Збережіть типові опції в змінних середовища та конфігах, щоб не друкувати їх щоразу. Це міні-оптимізація, але дико зручна 😉
# fd: ховаємо сміття, але дивимось сховані файли й слідуємо за symlink
export FD_OPTIONS="--hidden --follow --exclude .git --exclude node_modules --exclude target --exclude venv"
# ripgrep: створимо ~/.ripgreprc з типовими опціями
cat > ~/.ripgreprc <<'EOF'
--smart-case
--hidden
--glob
!.git
!node_modules
!target
!venv
EOF
export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"
Підсумок
- fd + ripgrep + fzf = миттєвий пошук і навігація у терміналі Linux.
- Встановіть інструменти з пакетного менеджера; для Ubuntu/Debian використовуйте fd-find і симлінк на fd.
- Додайте функції bash скрипти у
~/.bashrc/~/.zshrcдля щоденного використання. - Використовуйте попередній перегляд через
batі вписуйте опції у конфіги для комфорту. - Ці трюки Linux реально економлять час у роботі з кодом і файлами.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.