Yazi - Файловый менеджер

Молниеносный терминальный файловый менеджер

Yazi - Молниеносный файловый менеджер

Yazi (переводится как “утка”) — это файловый менеджер для терминала, написанный на Rust с использованием неблокирующего асинхронного ввода-вывода. Он нацелен на предоставление эффективного, удобного и настраиваемого опыта управления файлами.

Новая статья, объясняющая его внутреннее устройство: Why is Yazi Fast?

Возможности Yazi

  • 🚀 Полная асинхронная поддержка: Все операции ввода-вывода асинхронны, задачи CPU распределены по нескольким потокам, что позволяет максимально использовать доступные ресурсы.
  • 💪 Мощное планирование и управление асинхронными задачами: Предоставляет обновления прогресса в реальном времени, отмену задач и назначение внутренних приоритетов.
  • 🖼️ Встроенная поддержка нескольких протоколов отображения изображений: Также интегрирован с Überzug++ и Chafa, охватывая почти все терминалы.
  • 🌟 Встроенная подсветка кода и декодирование изображений: В сочетании с механизмом предзагрузки значительно ускоряет загрузку изображений и обычных файлов.
  • 🔌 Конкурентная система плагинов: Плагины для UI (переопределяющие большую часть интерфейса), функциональные плагины, кастомные превьюеры/прелоадеры/споттеры/фетчеры; всё это на Lua.
  • ☁️ Виртуальная файловая система: Управление удаленными файлами, пользовательские поисковые движки.
  • 📡 Служба распространения данных: Построена на архитектуре клиент-сервер (не требует отдельного серверного процесса), интегрирована с Lua-моделью публикации-подписки, обеспечивая межэкземплярное взаимодействие и сохранение состояния.
  • 📦 Менеджер пакетов: Установка плагинов и тем одной командой, поддержка актуальных версий или привязка к конкретной.
  • 🧰 Интеграция с ripgrep, fd, fzf, zoxide
  • 💫 Компоненты в стиле Vim для ввода/выбора/подтверждения/which/уведомлений, автодополнение для путей cd
  • 🏷️ Поддержка нескольких вкладок, выделение в разных каталогах, прокручиваемый предпросмотр (для видео, PDF, архивов, кода, каталогов и т.д.)
  • 🔄 Массовое переименование/создание, распаковка архивов, визуальный режим, выбор файлов, интеграция с Git, менеджер точек монтирования
  • 🎨 Система тем, поддержка мыши, перетаскивание, корзина, кастомные макеты, CSI u, OSC 52
  • … и многое другое!

Статус проекта

Публичная бета-версия, можно использовать для повседневной работы.

Yazi находится в активной разработке, ожидайте критических изменений.

Документация

Обсуждение

Предпросмотр изображений

Yazi автоматически выбирает подходящий метод предпросмотра на основе переменных окружения $TERM, $TERM_PROGRAM и $XDG_SESSION_TYPE. Убедитесь, что вы их не перезаписываете!

ПлатформаПротоколПоддержка
kitty (>= 0.28.0)Kitty unicode placeholders✅ Встроено
iTerm2Inline images protocol✅ Встроено
WezTermInline images protocol✅ Встроено
KonsoleKitty old protocol✅ Встроено
footSixel graphics format✅ Встроено
GhosttyKitty unicode placeholders✅ Встроено
Windows Terminal (>= v1.22.10352.0)Sixel graphics format✅ Встроено
st with Sixel patchSixel graphics format✅ Встроено
Warp (macOS/Linux only)Inline images protocol✅ Встроено
TabbyInline images protocol✅ Встроено
VSCodeInline images protocol✅ Встроено
Rio (>= 0.3.9)Kitty unicode placeholders✅ Встроено
Black BoxSixel graphics format✅ Встроено
BobcatInline images protocol✅ Встроено
X11 / WaylandWindow system protocol☑️ Требуется Überzug++
FallbackASCII art (Unicode block)☑️ Требуется Chafa (>= 1.16.0)

Подробнее: https://yazi-rs.github.io/docs/image-preview

Лицензия

Yazi распространяется под лицензией MIT. Дополнительную информацию смотрите в файле LICENSE.

Установка

Для использования Yazi необходимо установить следующие зависимости:

  • file (для определения типа файлов)

Yazi также может быть расширен с помощью других утилит командной строки для дополнительных функций:

  • nerd-fonts (рекомендуется)
  • ffmpeg (для миниатюр видео)
  • 7-Zip (для распаковки и предпросмотра архивов, требуется не standalone версия)
  • jq (для предпросмотра JSON)
  • poppler (для предпросмотра PDF)
  • fd (для поиска файлов)
  • rg (для поиска по содержимому файлов)
  • fzf (для быстрой навигации по дереву файлов, >= 0.53.0)
  • zoxide (для навигации по истории каталогов, требует fzf)
  • resvg (для предпросмотра SVG)
  • ImageMagick (для предпросмотра шрифтов, HEIC и JPEG XL, >= 7.1.1)
  • xclip / wl-clipboard / xsel (для поддержки буфера обмена в Linux)

Обновите эти зависимости до последней версии, если какая-либо функция работает не так, как ожидалось.

Установка в Fedora (и Centos Stream 9+/RHEL 9+)

  1. Включите репозиторий COPR:
    sudo dnf copr enable lihaohong/yazi
    
  2. Установите Yazi:
    sudo dnf install yazi
    
    dnf автоматически установит рекомендуемые зависимости (зависимости Recommends). Чтобы установить только Yazi без них, выполните:
    sudo dnf install yazi --setopt=install_weak_deps=False
    
    Если dnf сообщает об ошибке “No such command: copr”, сначала установите плагин dnf-plugins-core:
    sudo dnf install dnf-plugins-core
    
    а затем повторите команды включения репозитория и установки.

Установка дополнительных зависимостей (рекомендуется)

Для полной функциональности рекомендуется установить дополнительные утилиты:

sudo dnf install ffmpeg 7zip jq poppler fd-find ripgrep fzf zoxide resvg ImageMagick

Обратите внимание, что в Fedora пакет fd может называться fd-find. Если команда fd не работает после установки, возможно, потребуется создать симлинк:

sudo ln -s /usr/bin/fdfind /usr/bin/fd

Другие методы установки

Официальные бинарные файлы

Вы можете загрузить последние официальные бинарные файлы из GitHub Releases. На этой странице предлагаются сборки GNU/Musl для различных пользователей. Также доступна nightly-сборка, собранная из последнего кода за последние 6 часов.

Сборка из исходного кода

Установите последний стабильный Rust через rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update

Клонируйте репозиторий и соберите Yazi:

git clone https://github.com/sxyazi/yazi.git
cd yazi
cargo build --release --locked

Затем добавьте yazi и ya в ваш $PATH (например, скопировав в /usr/local/bin/):

sudo mv target/release/yazi target/release/ya /usr/local/bin/

Если сборка не удалась, проверьте, установлены ли make и gcc.

Другие менеджеры пакетов

  • Arch Linux: sudo pacman -S yazi (и дополнительные зависимости)
  • Nix: nix-env -iA nixos.yazi или nix-env -iA nixpkgs.yazi
  • Homebrew (macOS): brew install yazi (и дополнительные зависимости через brew install ...)
  • Windows (Scoop): scoop install yazi (и дополнительные зависимости)
  • Windows (WinGet): winget install sxyazi.yazi (и дополнительные зависимости)

Быстрый старт

После установки запустите Yazi командой:

yazi

Нажмите q для выхода, F1 или ~ для открытия меню помощи.

Обёртка для оболочки (Shell Wrapper)

Рекомендуется использовать эту обёртку, которая позволяет изменить текущую рабочую директорию при выходе из Yazi. Добавьте эту функцию в ваш файл конфигурации оболочки (например, .bashrc, .zshrc):

Для Bash / Zsh:

function y() {
    local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
    command yazi "$@" --cwd-file="$tmp"
    IFS= read -r -d '' cwd < "$tmp"
    [ "$cwd" != "$PWD" ] && [ -d "$cwd" ] && builtin cd -- "$cwd"
    command rm -f -- "$tmp"
}

Теперь используйте команду y вместо yazi для запуска. Нажмите q для выхода и смены директории. Если не хотите менять директорию, нажмите Q (Shift+q).

Основные горячие клавиши

Все горячие клавиши описаны в файле keymap.toml. Вот некоторые из них:

Навигация

КлавишаАльтернативаДействие
kПереместить курсор вверх
jПереместить курсор вниз
lВойти в выделенный каталог
hВыйти из текущего каталога в родительский
KПрокрутить предпросмотр вверх на 5
JПрокрутить предпросмотр вниз на 5
g gПереместить курсор в начало
GПереместить курсор в конец
zПерейти в каталог или открыть файл через fzf
ZПерейти в каталог через zoxide

Выделение

КлавишаДействие
SpaceПереключить выделение текущего файла/каталога
vВойти в визуальный режим (режим выделения)
VВойти в визуальный режим (режим снятия выделения)
Ctrl + aВыделить все файлы
Ctrl + rИнвертировать выделение
EscОтменить выделение

Операции с файлами

КлавишаДействие
oОткрыть выбранные файлы
EnterОткрыть выбранные файлы
TabПоказать информацию о файле
yСкопировать выбранные файлы (yank)
xВырезать выбранные файлы (yank cut)
pВставить скопированные/вырезанные файлы
PВставить с перезаписью, если файл существует
Y или XОтменить состояние копирования/вырезания
dПереместить выбранные файлы в корзину
DБезвозвратно удалить выбранные файлы
aСоздать файл (с / на конце для каталога)
rПереименовать выбранный файл (или массовое переименование)
.Переключить отображение скрытых файлов
;Выполнить команду оболочки (в фоне)
:Выполнить команду оболочки (блокируя Yazi до завершения)

Настройка горячих клавиш: keymap.toml

Файл ~/.config/yazi/keymap.toml позволяет полностью контролировать все горячие клавиши в Yazi. Он состоит из 8 слоев (layers), каждый из которых отвечает за определенную часть интерфейса:

  • [mgr] - Управление файлами (основной слой).
  • [tasks] - Менеджер задач.
  • [spot] - Просмотр информации о файле.
  • [pick] - Компонент выбора (например, “открыть с помощью”).
  • [input] - Поля ввода (создание, переименование и т.д.).
  • [confirm] - Диалоги подтверждения (удаление, перезапись).
  • [cmp] - Автодополнение (например, для команды cd).
  • [help] - Меню справки.

Структура и приоритеты

В каждом слое вы можете определить новые сочетания клавиш, используя ключи prepend_keymap (добавить перед стандартными) или append_keymap (добавить после стандартных). Yazi выполняет первое подходящее сочетание, поэтому приоритет выше у prepend_keymap.

Синтаксис:

[mgr]
prepend_keymap = [
    { on = "<C-a>", run = "act1", desc = "Описание для Ctrl+a" },
]
append_keymap = [
    { on = [ "g", "b" ], run = "act2", desc = "Описание для g ⇒ b" },
    { on = "c", run = [ "act1", "act2" ], desc = "Несколько действий для c" }
]

Или в альтернативном стиле (таблицы):

[[mgr.prepend_keymap]]
on   = "<C-a>"
run  = "act1"
desc = "Описание для Ctrl+a"

Чтобы полностью переопределить все стандартные назначения клавиш, используйте ключ keymap:

[mgr]
keymap = [
    { on = "<C-a>", run = "act1" },
    { on = [ "g", "b" ], run = "act2" },
]

Обозначения клавиш

  • Обычные клавиши: a-z, A-Z, <Space>, <Enter>, <Tab>, <Esc>, <F1>-<F19>, стрелки (<Up>, <Down>, <Left>, <Right>) и т.д.
  • Модификаторы:
    • <C-...>: Ctrl (например, <C-a>)
    • <S-...>: Shift (например, <S-Tab> или <BackTab>)
    • <A-...>: Alt (может не работать на macOS без настройки терминала)
    • <D-...>: Super/Windows (требуется поддержка CSI u в терминале)
  • Комбинации: <C-S-b> или <C-B> для Ctrl + Shift + b.

Привязка для разных ОС

С помощью параметра for можно ограничить действие клавиши определенной операционной системой ("linux", "macos", "windows", "android", "unix").

[mgr]
prepend_keymap = [
    { on = [ "g", "d" ], run = "cd ~/dev", desc = "Перейти в dev", for = "unix" },
    { on = [ "g", "d" ], run = 'cd C:\dev', desc = 'Перейти в C:\dev', for = "windows" },
]

Примеры часто используемых действий

1. Добавление “закладок” (быстрый переход):

[[mgr.prepend_keymap]]
on   = [ "g", "d" ]
run  = "cd ~/Downloads"
desc = "Перейти в папку Загрузки"

[[mgr.prepend_keymap]]
on   = [ "g", "p" ]
run  = "cd ~/Pictures"
desc = "Перейти в папку Изображения"

2. Отключение стандартной клавиши:

Чтобы отключить, например, стандартное сочетание g ⇒ c, используйте действие noop:

[[mgr.prepend_keymap]]
on  = [ "g", "c" ]
run = "noop"

3. Навигация по вкладкам:

[[mgr.append_keymap]]
on   = "<C-Tab>"
run  = "tab_switch --relative 1"
desc = "Следующая вкладка"

[[mgr.append_keymap]]
on   = "<C-S-Tab>"
run  = "tab_switch --relative -1"
desc = "Предыдущая вкладка"

4. Выполнение команд оболочки:

Используйте действие shell. Специальные подстановки: %s (все выделенные файлы), %h (файл под курсором).

[[mgr.prepend_keymap]]
on   = "<C-g>"
run  = 'shell -- git status'
desc = "Показать статус Git"

# Интерактивная команда с предустановленным шаблоном
[[mgr.prepend_keymap]]
on   = "<C-z>"
run  = 'shell "zip -r archive.zip %s" --interactive'
desc = "Создать ZIP архив"

Полный список действий

Для получения исчерпывающей информации обо всех доступных действиях (actions) для каждого слоя и их аргументах, пожалуйста, обратитесь к официальной документации keymap.toml. Там вы найдете описание таких действий, как escape, quit, close, arrow, cd, reveal, toggle, yank, paste, remove, create, rename, copy, search, find, filter, sort, plugin и многих других.

Для более подробной информации о настройке keymap.toml, пожалуйста, обратитесь к полной документации.

Настройка

Конфигурация Yazi состоит из трех основных файлов в ~/.config/yazi/ (или %AppData%\yazi\config\ на Windows):

  1. yazi.toml - Основные настройки менеджера, предпросмотра, задач.
  2. keymap.toml - Настройка горячих клавиш для всех слоев (менеджер, задачи, подсказки и т.д.).
  3. theme.toml - Настройка цветовой схемы.

По умолчанию Yazi использует встроенные предустановки. Вы можете переопределить любую настройку, создав соответствующий файл в директории конфигурации и указав в нем нужные параметры. Необязательно копировать весь файл целиком.

Основные параметры yazi.toml

Пример базовой конфигурации для отображения скрытых файлов и изменения сортировки:

# ~/.config/yazi/yazi.toml
[mgr]
show_hidden = true          # Показывать скрытые файлы
sort_by = "natural"         # Сортировка: "natural", "alphabetical", "mtime", "size"
sort_reverse = false        # Обратный порядок сортировки
sort_dir_first = true       # Показывать каталоги первыми
linemode = "mtime"          # Показывать время модификации справа от имени файла

Настройка opener и open: открытие файлов по расширению

Это ключевой раздел для настройки, какие программы использовать для разных типов файлов.

1. Определение команд ([opener]):

Сначала в yazi.toml вы определяете команды, которые будут использоваться для открытия файлов.

# ~/.config/yazi/yazi.toml
[opener]
# Команда для редактирования
edit = [
    { run = 'nvim %s', block = true, for = "unix" },        # Для Unix (Linux/macOS)
    { run = 'notepad.exe %s', block = true, for = "windows" } # Для Windows
]
# Команда для просмотра (например, просмотрщик изображений)
view_image = [
    { run = 'feh %s', orphan = true, for = "unix" } # orphan = true - процесс не завершится при закрытии Yazi
]
# Команда для открытия в браузере
browser = [
    { run = 'firefox %s', orphan = true, for = "unix" }
]
# Универсальная команда для открытия системным способом
open_system = [
    { run = 'xdg-open %s1', desc = "Открыть системой", for = "unix" } # %s1 - путь к первому выделенному файлу
]
  • run: Команда.
    • %s - пути всех выделенных файлов.
    • %s1, %s2 - путь к первому, второму и т.д. файлу.
  • block: Блокировать Yazi, пока программа не завершится (полезно для редакторов).
  • orphan: Запустить программу как отдельный процесс (полезно для просмотрщиков, браузеров).
  • for: Ограничить операционную систему ("unix", "windows", "macos", "linux").

2. Применение правил ([open]):

Затем вы создаете правила, которые говорят Yazi, какую команду (use) использовать для файлов, соответствующих определенному шаблону (url или mime).

# ~/.config/yazi/yazi.toml
[open]
# ДОБАВЛЯЕМ правила ПЕРЕД стандартными (prepend)
prepend_rules = [
    # Текстовые файлы открывать в редакторе
    { mime = "text/*", use = "edit" },
    # Изображения открывать через просмотрщик
    { mime = "image/*", use = "view_image" },
    # PDF открывать в браузере или системной программе
    { url = "*.pdf", use = "browser" },
    # HTML файлы открывать в браузере
    { url = "*.html", use = "browser" },
    # MP3 файлы открывать системным плеером
    { mime = "audio/*", use = "open_system" },
]

# Можно добавить правила И ПОСЛЕ стандартных (append)
append_rules = [
    # Все остальные файлы открывать системным способом
    { url = "*", use = "open_system" },
]
  • url: Шаблон для пути файла (например, "*.pdf", "*.jpg").
  • mime: Шаблон для MIME-типа (например, "text/*", "image/png").
  • use: Имя команды из [opener].

Теперь при нажатии Enter на файле Yazi выберет первое подходящее правило.

Работа с плагинами

Yazi позволяет расширять свою функциональность с помощью плагинов на Lua. Установка и использование плагинов описана в полной документации. Вот краткий обзор:

  1. Структура: Плагины устанавливаются в ~/.config/yazi/plugins/. Каждый плагин — это папка с расширением .yazi, содержащая как минимум main.lua.
  2. Функциональные плагины: Связываются с клавишами в keymap.toml с помощью действия plugin.
  3. Кастомные превьюеры: Позволяют настроить предпросмотр для специфических типов файлов и настраиваются в секции [plugin] файла yazi.toml.

Пример: подключение функционального плагина

Допустим, у вас есть плагин my_plugin.yazi в папке ~/.config/yazi/plugins/. Чтобы вызвать его по нажатию Ctrl + p, добавьте в keymap.toml:

# ~/.config/yazi/keymap.toml
[[mgr.prepend_keymap]]
on   = "<C-p>"
run  = "plugin my_plugin --arg1 value1"
desc = "Запустить мой плагин"

Внутри плагина (main.lua) аргументы будут доступны через job.args.

Пример: настройка кастомного превьюера

В yazi.toml вы можете переопределить или добавить правила для превью:

# ~/.config/yazi/yazi.toml
[plugin]
prepend_previewers = [
    # Использовать плагин 'my_hex_previewer' для .bin файлов
    { url = "*.bin", run = "my_hex_previewer" },
    # Использовать плагин 'my_sql_preview' для .sql файлов
    { mime = "text/x-sql", run = "my_sql_preview" },
]

Плагин my_hex_previewer должен реализовывать интерфейс peek и seek.

Отладка плагинов

Для отладки плагинов:

  1. Установите переменную окружения YAZI_LOG=debug перед запуском Yazi:
    YAZI_LOG=debug yazi
    
  2. Используйте в коде плагина ya.dbg() для вывода отладочной информации.
  3. Логи будут записаны в файл ~/.local/state/yazi/yazi.log.

Дополнительные источники