Библиотека — Fish Shell — справка [X]
Шифр
fish-reference
Разделы
cheatsheet tooling
Сверено
2 сентября — в этот день утверждения статьи сверялись с первоисточниками, а не правился текст
Объём
7 476 знаков · 26 разделов · чтения около 10 минут

Fish Shell — справка


Справка по fish shell с учётом конфигурации CachyOS (cachyos-config.fish). Текст выверялся на fish 4.5.0 (февраль 2026); апстрим с тех пор ушёл к 4.8.x, так что при расхождениях стоит сверяться с fish --version и релиз-нотами своей сборки.


Архитектура конфигурации

Fish загружает конфиги в определённом порядке, и это критично для понимания, почему одни настройки перезатираются другими.

Порядок загрузки:

  1. ~/.config/fish/conf.d/*.fish — фрагменты конфигурации (алфавитный порядок)
  2. ~/.config/fish/config.fish — основной пользовательский конфиг
  3. Внутри config.fish выполняется source /usr/share/cachyos-fish-config/cachyos-config.fish — конфиг дистрибутива

Autoload-функции из ~/.config/fish/functions/ загружаются лениво при первом вызове, но sourced-определения из config.fish перезатирают autoload-функции с тем же именем. Поэтому если CachyOS определяет function history в своём конфиге, твой functions/history.fish не будет работать — переопределять нужно в config.fish после строки source.


Интерактивный поиск: Ctrl+R

Основной способ работы с историей в fish. Открывает fuzzy-поиск по всей истории команд. Начинаешь вводить фрагмент — fish фильтрует в реальном времени. Enter выполняет, Tab вставляет в строку для редактирования.

!! и !$ (эмуляция bash)

В конфиге CachyOS определены keybindings для ! и $, которые эмулируют bash-поведение:

  • !! — подставляет предыдущую команду целиком. Работает только интерактивно, при наборе в командной строке. Типичный сценарий: sudo !!.
  • !$ — подставляет последний аргумент предыдущей команды. Например, после cat /etc/pacman.conf ввод nvim !$ подставит путь.

Важно: это не bash-синтаксис !42 для запуска команды по номеру. В fish такого механизма нет нативно.

Команда history

CachyOS переопределяет history так, что она всегда выводит timestamps в формате %F %T. Вывод идёт от новых к старым (поведение fish по умолчанию). Номера команд не отображаются.

Полезные варианты вызова:

history search --prefix "git"       # поиск по префиксу
history search --contains "docker"  # поиск по подстроке
history delete --prefix "secret"    # удалить команды по префиксу
history clear-session               # очистить историю текущей сессии

↑/↓ — перемещение по истории (как в bash). Но если начать вводить текст и нажать ↑, fish отфильтрует историю по введённому префиксу — это часто удобнее Ctrl+R для коротких запросов.


Алиасы и утилиты из конфига

Файловая система

ls, la, ll, lt — всё работает через eza (замена ls с иконками, git-статусами и цветами). l. — показывает только dotfiles.

ls   → eza -al --color=always --group-directories-first --icons
la   → eza -a  (без long format)
ll   → eza -l  (long format без hidden)
lt   → eza -aT (дерево)

.. через ...... — быстрая навигация вверх по директориям (от 1 до 5 уровней).

Pacman / система

update    → sudo pacman -Syu
cleanup   → sudo pacman -Rns (pacman -Qtdq)    # удаление orphan-пакетов
fixpacman → sudo rm /var/lib/pacman/db.lck      # разблокировка pacman
mirror    → sudo cachyos-rate-mirrors           # обновление зеркал
big       → список установленных пакетов по размеру
gitpkg    → количество -git пакетов
rip       → 200 последних установленных пакетов с датами

Архивы

tarnow <имя> <файлы>  → tar -acf (автоопределение формата по расширению)
untar <архив>          → tar -zxvf

Диагностика

hw      → hwinfo --short
jctl    → journalctl -p 3 -xb (только ошибки текущей загрузки)
psmem   → процессы отсортированные по RAM
psmem10 → топ-10 по RAM

Утилиты

backup myfile.txt          # создаёт myfile.txt.bak
copy dir1 dir2             # cp -r с автоопределением директорий
tb                         # nc termbin.com 9999 — быстрый pastebin из pipe

Man pages

Конфиг настраивает рендеринг man-страниц через bat с подсветкой синтаксиса:

set -x MANPAGER "sh -c 'col -bx | bat -l man -p'"

Это означает, что man будет показывать страницы с цветовой подсветкой вместо стандартного less.


Уведомления о завершении команд

Плагин done.fish отслеживает длительные команды и показывает desktop-уведомление, когда команда, выполнявшаяся дольше 10 секунд (__done_min_cmd_duration), завершается. Уровень urgency — low, чтобы не отвлекать.


LF — файловый менеджер

Привязка Ctrl+O запускает lf (терминальный файловый менеджер) с автоматическим cd в выбранную директорию при выходе. Конфигурация загружается из ~/.config/lf/lfcd.fish.


Полезные встроенные возможности fish

Автодополнение

Fish автодополняет команды, пути, аргументы и даже man-страницы из коробки. Подсказка отображается серым — Tab принимает целиком, → принимает посимвольно, Alt+→ принимает пословно.

Abbreviations vs aliases

В конфиге используются alias, но fish также поддерживает abbr — аббревиатуры, которые раскрываются при нажатии Space/Enter. Преимущество abbr: видишь полную команду перед выполнением, она попадает в историю в развёрнутом виде. Для критичных команд (типа cleanup) это безопаснее.

abbr -a update 'sudo pacman -Syu'

Переменные окружения

В fish вместо export VAR=value используется set -x VAR value. Для персистентных переменных — set -Ux VAR value (universal, сохраняется между сессиями). В конфиге __done_min_cmd_duration и __done_notification_urgency_level установлены через set -U, поэтому достаточно выполнить их один раз.

PATH

Добавление в PATH: fish_add_path ~/bin (идемпотентно, не дублирует). В конфиге также используется set -p PATH для prepend с ручной проверкой на дубликаты — fish_add_path делает это автоматически и предпочтительнее.


Структура конфигурации

~/.config/fish/
├── config.fish                  # основной конфиг (sourced при запуске)
├── conf.d/                      # фрагменты (sourced до config.fish)
├── functions/                   # autoload-функции (одна функция = один файл)
│   └── имя_функции.fish         # файл должен совпадать с именем функции
└── completions/                 # пользовательские автодополнения

Системные конфиги CachyOS: /usr/share/cachyos-fish-config/.


Частые операции

Создание персистентной функции

function greet
    echo "Hello, $argv"
end
funcsave greet    # сохранит в ~/.config/fish/functions/greet.fish

Проверка, откуда загружена команда

type -a history    # покажет все определения: функции, builtins, внешние команды
functions history  # покажет тело функции

Перезагрузка конфига без перезапуска

source ~/.config/fish/config.fish

Для функций из functions/ перезагрузка не нужна — autoload подхватит изменения при следующем вызове.


Связанные заметки

Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.

Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.