Yazi - Файловый менеджер
Categories:
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 находится в активной разработке, ожидайте критических изменений.
Документация
- Использование: https://yazi-rs.github.io/docs/installation
- Возможности: https://yazi-rs.github.io/features
Обсуждение
- Discord Сервер (в основном английский): https://discord.gg/qfADduSdJu
- Telegram Группа (в основном китайский): https://t.me/yazi_rs
Предпросмотр изображений
Yazi автоматически выбирает подходящий метод предпросмотра на основе переменных окружения $TERM, $TERM_PROGRAM и $XDG_SESSION_TYPE. Убедитесь, что вы их не перезаписываете!
| Платформа | Протокол | Поддержка |
|---|---|---|
| kitty (>= 0.28.0) | Kitty unicode placeholders | ✅ Встроено |
| iTerm2 | Inline images protocol | ✅ Встроено |
| WezTerm | Inline images protocol | ✅ Встроено |
| Konsole | Kitty old protocol | ✅ Встроено |
| foot | Sixel graphics format | ✅ Встроено |
| Ghostty | Kitty unicode placeholders | ✅ Встроено |
| Windows Terminal (>= v1.22.10352.0) | Sixel graphics format | ✅ Встроено |
| st with Sixel patch | Sixel graphics format | ✅ Встроено |
| Warp (macOS/Linux only) | Inline images protocol | ✅ Встроено |
| Tabby | Inline images protocol | ✅ Встроено |
| VSCode | Inline images protocol | ✅ Встроено |
| Rio (>= 0.3.9) | Kitty unicode placeholders | ✅ Встроено |
| Black Box | Sixel graphics format | ✅ Встроено |
| Bobcat | Inline images protocol | ✅ Встроено |
| X11 / Wayland | Window system protocol | ☑️ Требуется Überzug++ |
| Fallback | ASCII 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+)
Информация
Этот метод использует неофициальный репозиторий COPR, поддерживаемый Peter Li.- Включите репозиторий COPR:
sudo dnf copr enable lihaohong/yazi - Установите Yazi:
sudo dnf install yazidnfавтоматически установит рекомендуемые зависимости (зависимостиRecommends). Чтобы установить только Yazi без них, выполните:Еслиsudo dnf install yazi --setopt=install_weak_deps=Falsednfсообщает об ошибке “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):
yazi.toml- Основные настройки менеджера, предпросмотра, задач.keymap.toml- Настройка горячих клавиш для всех слоев (менеджер, задачи, подсказки и т.д.).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. Установка и использование плагинов описана в полной документации. Вот краткий обзор:
- Структура: Плагины устанавливаются в
~/.config/yazi/plugins/. Каждый плагин — это папка с расширением.yazi, содержащая как минимумmain.lua. - Функциональные плагины: Связываются с клавишами в
keymap.tomlс помощью действияplugin. - Кастомные превьюеры: Позволяют настроить предпросмотр для специфических типов файлов и настраиваются в секции
[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.
Отладка плагинов
Для отладки плагинов:
- Установите переменную окружения
YAZI_LOG=debugперед запуском Yazi:YAZI_LOG=debug yazi - Используйте в коде плагина
ya.dbg()для вывода отладочной информации. - Логи будут записаны в файл
~/.local/state/yazi/yazi.log.
Дополнительные источники
- Полная документация по плагинам: https://yazi-rs.github.io/docs/plugins/overview
- Основная документация Yazi: https://yazi-rs.github.io/docs/