Привіт, я 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/rgfzf → дія.

Порада від 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 реально економлять час у роботі з кодом і файлами.