<p align="center">
<img src="docs/images/icon.svg" height="128" alt="Иконка mdv" />
</p>
<p align="center">
<a href="https://github.com/WhoSowSee/mdv/graphs/contributors"><img src="https://img.shields.io/github/contributors/WhoSowSee/mdv?style=for-the-badge&color=CBA6F7&labelColor=302D41&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2NkZDZmNCIgZD0iTTkgMTFhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wIDJjLTMuOSAwLTcgMi03IDQuNVYyMGgxNHYtMi41QzE2IDE1IDEyLjkgMTMgOSAxM1ptOC41LTEuNWEzLjI1IDMuMjUgMCAxIDAgMC02LjUgMy4yNSAzLjI1IDAgMCAwIDAgNi41Wm0wIDEuOGMtLjkgMC0xLjc1LjE1LTIuNS40MiAxLjcgMS4wNSAyLjcgMi40NSAyLjcgMy45OFYyMEgyMnYtMi4zYzAtMi40LTItNC40LTQuNS00LjRaIi8+PC9zdmc+" alt="CONTRIBUTORS"></a>
<a href="https://github.com/WhoSowSee/mdv/forks"><img src="https://img.shields.io/github/forks/WhoSowSee/mdv?style=for-the-badge&color=89B4FA&labelColor=302D41&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI%2BPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTIgMTIpIHNjYWxlKDEuMDgpIHRyYW5zbGF0ZSgtMTIgLTEyKSI%2BPHBhdGggZmlsbD0iI2NkZDZmNCIgZD0iTTYgM2EzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZabTEyIDBhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02Wk0xMiAxNWEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaIi8%2BPHBhdGggZmlsbD0iI2NkZDZmNCIgZD0iTTUgOGgydjIuNGMwIC4zMy4yNy42LjYuNmg4LjhjLjMzIDAgLjYtLjI3LjYtLjZWOGgydjIuNGEyLjYgMi42IDAgMCAxLTIuNiAyLjZIMTN2MmgtMnYtMkg3LjZBMi42IDIuNiAwIDAgMSA1IDEwLjRWOFoiLz48L2c%2BPC9zdmc%2B" alt="FORKS"></a>
<a href="https://github.com/WhoSowSee/mdv/stargazers"><img src="https://img.shields.io/github/stars/WhoSowSee/mdv?style=for-the-badge&color=F9E2AF&labelColor=302D41&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI%2BPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMS42KSI%2BPHBhdGggZmlsbD0iI2NkZDZmNCIgZD0iTTEyIDIuNSAxNC45IDguNGw2LjUgMWEuOC44IDAgMCAxIC40NSAxLjM2bC00LjcgNC41OCAxLjEgNi40NWEuOC44IDAgMCAxLTEuMTYuODRMMTIgMTkuOTUgNi4yIDIyLjYzYS44LjggMCAwIDEtMS4xNi0uODRsMS4xLTYuNDUtNC43LTQuNThBLjguOCAwIDAgMSAxLjkgOS40bDYuNS0xTDEyIDIuNVoiLz48L2c%2BPC9zdmc%2B" alt="STARS"></a>
</p>
<p align="center">
<a href="https://crates.io/crates/mdv"><img src="https://img.shields.io/crates/v/mdv?style=for-the-badge&color=FAB387&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI%2BCjxwYXRoIGZpbGw9IiNjZGQ2ZjQiIGQ9Ik0xLjUgNi45ODRWMTFsNi41MDMgMy41TDE0LjUgMTFWM0wxMSAxLjVsLTYuNSAzdjF6Ii8%2BCjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMwMkQ0MSIgc3Ryb2tlLXdpZHRoPSIuOSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEuNSA3TDggMTAuNUwxNC41IDdtLTEwLTIuNWwzLjUwMyAyTDE0LjQ5OCAzTTQuNSA1LjV2N20zLjUtNlYxNCIvPgo8cGF0aCBkPSJNOC4wMDMgM0wxMS41IDQuNXY4Ii8%2BCjwvZz4KPC9zdmc%2B&labelColor=302D41" alt="CRATES.IO"></a>
<a href="https://crates.io/crates/mdv"><img src="https://img.shields.io/crates/d/mdv?style=for-the-badge&color=A6E3A1&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI%2BCjxwYXRoIGZpbGw9IiNjZGQ2ZjQiIGQ9Ik0xLjUgNi45ODRWMTFsNi41MDMgMy41TDE0LjUgMTFWM0wxMSAxLjVsLTYuNSAzdjF6Ii8%2BCjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMwMkQ0MSIgc3Ryb2tlLXdpZHRoPSIuOSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEuNSA3TDggMTAuNUwxNC41IDdtLTEwLTIuNWwzLjUwMyAyTDE0LjQ5OCAzTTQuNSA1LjV2N20zLjUtNlYxNCIvPgo8cGF0aCBkPSJNOC4wMDMgM0wxMS41IDQuNXY4Ii8%2BCjwvZz4KPC9zdmc%2B&labelColor=302D41" alt="DOWNLOADS"></a>
</p>
<h2 align="center">Быстрый и настраиваемый просмотрщик Markdown для терминала</h2>
<p align="center">
<img src="docs/images/overview.webp" width="750" alt="Обзор" />
</p>
> [!TIP]
> **English version:** [README.md](README.md)
> [!NOTE]
> mdv — терминальная утилита для точного рендеринга Markdown в ANSI-совместимых терминалах. В её арсенале:
>
> - **Рендеринг для терминала** — Подсветка синтаксиса, опциональный HTML-вывод и аккуратная работа с инлайновым форматированием.
> - **Гибкие схемы верстки** — Управляйте шириной, стратегией переноса, отступами заголовков и поведением таблиц под ваш терминал.
> - **Контроль ссылок** — Переключайтесь между кликабельными, инлайн- и табличными ссылками, выбирайте правила обрезки длинных URL.
> - **Расширенное тематизирование** — Встроенные палитры и моментальные переопределения цветов интерфейса и подсветки кода.
> - **Живой мониторинг** — Следите за файлами с `--monitor`, чтобы видеть обновления сразу после сохранения.
> - **CLI, удобный для скриптов** — Чтение из stdin, прыжки к разделам через `--from`, перенос конфигурации между машинами.
> [!IMPORTANT]
>
> ### Требования
>
> - Установленный Rust
> - Терминал с поддержкой ANSI-цветов для полноценного отображения
## Установка
### Установка с crates.io
```bash
cargo install mdv
```
Так вы установите последнюю опубликованную версию из crates.io в каталог бинарников Cargo.
### Установка через Nix (Flake)
```bash
nix run github:WhoSowSee/mdv
nix profile install github:WhoSowSee/mdv
```
Nix-пакет собирает mdv из `flake.nix` и устанавливает бинарник `mdv` в Nix-профиль. `nix run` запускает без установки, `nix profile install` — для постоянной установки.
### Установка из исходников
```bash
git clone https://github.com/WhoSowSee/mdv.git
cd mdv
cargo install --path .
```
Команда соберёт mdv и установит бинарник в каталог Cargo (обычно `~/.cargo/bin`).
### Запуск без установки
```bash
cargo build --release
./target/release/mdv README.md
```
Можно запускать бинарник из `target/release` напрямую или добавить путь к нему в `PATH`.
## Использование
```text
mdv [OPTIONS] [FILE]
```
Также, mdv поддерживает чтение из стандартного ввода (stdin) и работу в конвейерах (pipe)
```text
mdv [OPTIONS] -
cat <FILE> | mdv
```
### Вывод и рабочий процесс
- `-H, --html` — печать HTML вместо терминального форматирования.
- `-E, --render-html` — рендер встроенных HTML-фрагментов в документе как форматированного терминального вывода вместо их пропуска.
- `-A, --no-colors` — удаление ANSI-стилей независимо от выбранной темы.
- `-C, --hide-comments` — скрытие Markdown-комментариев в итоговом выводе.
- `-i, --theme-info [FILE]` — показ активной палитры; при указании `FILE` рендерит документ вместе со сведениями о теме.
- `-f, --from <TEXT>` — рендер начиная с первой строки, содержащей `<TEXT>`. Добавление `:<lines>` ограничит число строк (например, `--from "Install:20"`).
- `-r, --reverse` — рендер документа с конца, сохраняя форматирование блоков.
- `-p, --pager` — открыть результат во встроенном пейджере `minus`. Клавиши `E`|`e` или `У`|`у` открывают текущий файл в настроенном редакторе; сохранённые изменения перерисовываются автоматически.
- `-m, --monitor` — наблюдение за файлом и автоматический перерендер при изменениях.
- `-F, --config-file <CONFIG_DIR>` — чтение настроек из указанного каталога.
- `-n, --no-config` — игнорирование конфигурационных файлов (используются только параметры CLI и значения по умолчанию).
- `-G, --init-config [CONFIG_DIR]` — создание конфигурационного файла по умолчанию. Используется указанный каталог, `--config-file`, `MDV_CONFIG_PATH` или каталог по умолчанию.
### Темы
- `-t, --theme <NAME>` — выбор встроенной темы (по умолчанию `terminal`).
- `-T, --code-theme <NAME>` — выбор палитры подсветки кода (по умолчанию `terminal`).
- `-s, --code-block-style <simple|pretty>[:show-icons;icon-only]` — стиль оформления блоков кода: одинарная граница или рамка. `show-icons` добавляет иконку языка к подписи, `icon-only` показывает только иконку, скрывая текст языка (по умолчанию `pretty`).
- `-y, --custom-theme <key=value;...>` — переопределение цветов интерфейса поверх выбранной темы.
- `-Y, --custom-code-theme <key=value;...>` — переопределение цветов подсветки кода в том же формате, что и `--custom-theme`.
- `-J, --custom-code-block <lang:icon=...,label=...,aliases=...|...>` — переопределение иконки, подписи и псевдонимов для конкретных языков блоков кода. Несколько языков разделяются `;`, опции внутри одного языка — `,`, а псевдонимы — `|` (например, `python:icon=*,label=Python,aliases=py|py3;rust:icon=`). Работает для любого указанного языка, даже если его нет во встроенной карте иконок. Подсветка синтаксиса применяется только к языкам, которые поддерживает текущая логика подсветки mdv. Используйте `default:icon=...`, чтобы задать fallback-иконку для неизвестных языков.
### Callout-блоки
- `-O, --callout-style <pretty|simple>[:show-icons;fold-icons;label-inside;uppercase]` — стиль callout-блоков и правила отображения подписи. Для корректного отображения иконок нужны шрифты Nerd Fonts в терминале.
`label-inside` поддерживается только с `pretty`, `fold-icons` требует `show-icons`.
- `-U, --custom-callout <name:icon=...,color=...;...>` — переопределение или добавление подписей callout.
`icon` и `color` можно указывать по отдельности; формат цвета как в `--custom-theme`.
### Чекбоксы
- `-P, --pretty-checkbox <square|circle>` — рендерит чекбоксы task-list как иконки Nerd Font вместо стандартных `[ ]` / `[x]`. Требует шрифт Nerd Font в терминале.
- `-B, --custom-checkbox <char>:<icon>[:<color>];...` — переопределяет встроенные иконки чекбоксов или добавляет новые состояния (только с `--pretty-checkbox`). `<char>` — символ чекбокса (`, `, `x`, `*`, `?`, `!` и т.д.); `<icon>` — новая иконка; `<color>` — опциональный цвет. Цвета принимают именованные, hex, rgb и `ansi(N)`.
- Переопределение: `-B ' :icon'` заменить иконку неотмеченного
- Добавление: `-B '*:icon'` добавить состояние `[*]`
- Цвет: `-B ' :icon:yellow'` или `#ff0000`, `128,1,1`, `ansi(200)`
- Без иконки: `-B '?:red'` оставить иконку `[?]`, применить красный
### Списки
- `-D, --pretty-list` — заменяет стандартные маркеры `-` неупорядоченных списков на иконки Nerd Font для каждого уровня вложенности. Требует шрифт Nerd Font в терминале.
- `-Q, --custom-list <уровень>:<иконка>[:<цвет>];...` — переопределяет иконку и/или цвет маркера для конкретных уровней вложенности (только с `--pretty-list`). Уровень — 1-based; иконка — глиф маркера. Цвета принимают именованные (`red`), hex (`#ff0000`), rgb (`255,0,0`) и `ansi(N)`.
- Иконка + цвет: `--custom-list '1:*:yellow'` маркер `*` жёлтого цвета
- Только иконка: `--custom-list '1:>'` маркер `>` в цвете темы
- Только цвет: `--custom-list '1:red'` встроенная иконка, красный цвет
### Разметка и переносы
- `-c, --cols <N>` — фиксированная ширина вывода. Если не задана, mdv использует ширину терминала или запасное значение 80.
- `-b, --tab-length <N>` — замена символов табуляции на `N` пробелов (по умолчанию `4`).
- `-W, --wrap <char|word|none>` — режим переноса текста (по умолчанию `char`).
- `-R, --reflow` — склеивает внутриабзацные мягкие переносы строк (soft breaks) и заново заполняет каждую строку до ширины переноса, так что жёстко разбитый исходник перетекает под узкие экраны. Требует включённого переноса; жёсткие переносы сохраняются.
- `-w, --table-wrap <fit|wrap|none>` — логика отображения широких таблиц (по умолчанию `fit`).
- `-S, --table-smart-indent` — автоматический подбор отступа таблицы в зависимости от доступной ширины.
- `-d, --heading-layout <level|center|flat|none>` — схема выравнивания заголовков (по умолчанию `level`).
- `-I, --smart-indent` — сглаживание скачков отступов между уровнями заголовков в режиме `level`.
- `-K, --code-wrap-indent <none|base|double>` — управляет «висячим» отступом при переносе строк внутри блоков кода (по умолчанию `double`).
### Видимость элементов
- `-L, --no-code-language` — скрытие подписи языка над блоками кода, если она доступна.
- `-e, --show-empty-elements` — отображение пустых списков, цитат и блоков кода, которые обычно скрываются.
- `-g, --no-code-guessing` — отключение эвристики определения языка; неизвестные блоки остаются текстом.
### Ссылки
- `-u, --link-style <clickable|fclickable|inline|inlinetable|endtable|hide>` — способ отображения ссылок (по умолчанию `clickable`).
- `-l, --link-truncation <wrap|cut|tablecut|none>` — стратегия укорочения длинных ссылок (по умолчанию `wrap`).
### Сноски
- `-o, --footnote-style <endnotes|attached>` — размещение сносок в конце документа или после каждого абзаца.
- `-M, --missing-footnote-style <show|hide>` — поведение для отсутствующих, некорректных или пустых определений сносок.
`show` выводит сообщение-заглушку в блоке сносок
`hide` полностью скрывает такие записи.
### Справочная информация
- `-h, --help` — вывод справки.
- `-V, --version` — отображение текущей версии.
## Конфигурация
mdv объединяет настройки из нескольких источников в порядке уменьшения приоритета:
1. Параметры командной строки (максимальный приоритет).
2. Переменная окружения `MDV_CONFIG_PATH` или флаг `--config-file`.
3. Пользовательские файлы в `~/.config/mdv/` (`~\.config\mdv\` в Windows).
Создать конфиг по умолчанию можно командой `mdv --init-config` или `mdv -G`. Укажите каталог (`mdv -G custom/dir`), используйте `--config-file <CONFIG_DIR>` или задайте `MDV_CONFIG_PATH`, чтобы записать его в другой путь.
Файлы конфигурации поддерживают YAML (`.yaml` или `.yml`). В каталоге `docs/examples/config.yaml` расположен полный шаблон с комментариями:
```yaml
# docs/examples/config.yaml
theme: "terminal"
code_theme: null
wrap: "char"
table_wrap: "fit"
heading_layout: "level"
smart_indent: false
code_wrap_indent: "double"
link_style: "clickable"
link_truncation: "wrap"
```
## Переменные окружения
- `MDV_CONFIG_PATH` — кастомный путь к каталогу с конфигурацией; также используется `mdv --init-config`, если каталог не указан.
- `MDV_EDITOR` — редактор, открываемый из режима pager; имеет приоритет над `EDITOR`. Известные GUI-редакторы запускаются асинхронно, а терминальные блокируют pager до выхода; режим Emacs и Vim определяется по аргументам CLI. Неизвестные команды считаются терминальными редакторами.
- `MDV_EDITOR_MODE` — необязательный режим запуска редактора: `tui` ожидает его завершения, а `gui` запускает асинхронно. Если переменная не задана, режим определяется автоматически. Явный `tui` можно использовать с GUI-launcher, чтобы приостановить pager; явный `gui` переопределяет режим неизвестных команд, но отклоняется для известных терминальных редакторов, чтобы два процесса не управляли одним терминалом. Некорректные значения и конфликты показываются в pager, редактор при этом не запускается.
- `MDV_NO_COLOR` — принимает `True` или `False` и принудительно включает или отключает цвета независимо от темы и параметров CLI.
## Темы
Доступны встроенные темы:
<details>
<summary><code>terminal</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_terminal_1.webp" alt="Theme Terminal preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_terminal_2.webp" alt="Theme Terminal preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_terminal_3.webp" alt="Theme Terminal preview" width="900px">
</div>
</details>
<details>
<summary><code>monokai</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_monokai_1.webp" alt="Theme Monokai preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_monokai_2.webp" alt="Theme Monokai preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_monokai_3.webp" alt="Theme Monokai preview" width="900px">
</div>
</details>
<details>
<summary><code>solarized-dark</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_solarized-dark_1.webp" alt="Theme Solarized Dark preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_solarized-dark_2.webp" alt="Theme Solarized Dark preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_solarized-dark_3.webp" alt="Theme Solarized Dark preview" width="900px">
</div>
</details>
<details>
<summary><code>nord</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_nord_1.webp" alt="Theme Nord preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_nord_2.webp" alt="Theme Nord preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_nord_3.webp" alt="Theme Nord preview" width="900px">
</div>
</details>
<details>
<summary><code>tokyonight</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_tokyonight_1.webp" alt="Theme Tokyonight preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_tokyonight_2.webp" alt="Theme Tokyonight preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_tokyonight_3.webp" alt="Theme Tokyonight preview" width="900px">
</div>
</details>
<details>
<summary><code>kanagawa</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_kanagawa_1.webp" alt="Theme Kanagawa preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_kanagawa_2.webp" alt="Theme Kanagawa preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_kanagawa_3.webp" alt="Theme Kanagawa preview" width="900px">
</div>
</details>
<details>
<summary><code>gruvbox</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_gruvbox_1.webp" alt="Theme Gruvbox preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_gruvbox_2.webp" alt="Theme Gruvbox preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_gruvbox_3.webp" alt="Theme Gruvbox preview" width="900px">
</div>
</details>
<details>
<summary><code>material-ocean</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_material-ocean_1.webp" alt="Theme Material Ocean preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_material-ocean_2.webp" alt="Theme Material Ocean preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_material-ocean_3.webp" alt="Theme Material Ocean preview" width="900px">
</div>
</details>
<details>
<summary><code>catppuccin</code></summary>
<div style="text-align: center;">
<img src="docs/images/theme_catppuccin_1.webp" alt="Theme Catppuccin preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_catppuccin_2.webp" alt="Theme Catppuccin preview" width="900px">
</div>
<div style="text-align: center;">
<img src="docs/images/theme_catppuccin_3.webp" alt="Theme Catppuccin preview" width="900px">
</div>
</details>
Выбирайте их параметром `--theme` или задавайте по умолчанию в конфигурации.
Для точной настройки используйте `--custom-theme` и `--custom-code-theme`. Переопределения передаются в формате `ключ=значение`, пары разделяются точкой с запятой. Ключи соответствуют полям палитры (`text`, `h1`, `border`, `keyword`, `function` и т.д.). Значения поддерживают форматы `#rrggbb`, `r,g,b`, именованные цвета ANSI (`red`, `darkgrey`) и индексы 256-цветной палитры (`ansi(42)`).
Команда `mdv --theme-info` отображает выбранную палитру; добавление пути (`mdv --theme-info README.md`) позволяет посмотреть, как цвета применяются к документу. Используйте `examples/config.yaml` как отправную точку для своих тем и храните настройки в системе контроля версий.
### Пользовательские темы
Положите один или несколько файлов `*.yaml`/`*.yml` в каталог `<config_dir>/themes/`, чтобы зарегистрировать собственные темы. Каталог ищется в том же порядке, что и `config.yaml` (флаг `--config-file`, переменная `MDV_CONFIG_PATH`, затем `~/.config/mdv/`). В репозитории есть два готовых примера:
- [`docs/examples/themes/theme-warm.yaml`](docs/examples/themes/theme-warm.yaml) — использует `extends: monokai` и переопределяет лишь несколько полей.
- [`docs/examples/themes/theme-custom.yaml`](docs/examples/themes/theme-custom.yaml) — полностью самостоятельная палитра, в которой перечислены все доступные поля.
```yaml
# <config_dir>/themes/warm.yaml
name: warm
description: Тёплый красный акцент поверх monokai.
extends: monokai
h1: "#ff5577"
link: "#66ccff"
background: "#1c1c1c"
syntax:
keyword: "#ff5577"
```
Описание полей:
- `name` (обязательно) — значение, принимаемое параметром `--theme`.
- `description` (необязательно) — отображается в `mdv --theme-info`; если не задано, берётся описание базовой темы.
- `extends` (необязательно) — имя встроенной темы или другой темы, загруженной раньше в этом же каталоге (в алфавитном порядке). Если не указано, недостающие поля подставляются из встроенной темы `terminal`.
- Любое цветовое поле необязательно и наследуется от базовой темы. Доступны UI-поля: `text`, `text_light`, `h1`..`h6`, `code`, `code_block`, `quote`, `link`, `emphasis`, `strong`, `strikethrough`, `highlight_background`, `background`, `border`, `list_marker`, `table_header`, `table_border`, `error`, `warning`.
- `syntax:` (необязательно) — переопределение палитры подсветки синтаксиса; каждое поле необязательно и мерджится поверх базовой. Поля: `keyword`, `string`, `comment`, `number`, `operator`, `function`, `variable`, `type_name`.
- Значения цвета используют тот же синтаксис, что и `--custom-theme`: именованные (`red`, `darkgrey`, `dark_grey`), hex (`#ff5577`), rgb (`187,154,247`) или 256-цветные (`ansi(42)` или просто `42`).
Пользовательская тема с тем же именем, что и встроенная, имеет приоритет и полностью её заменяет — это поддерживаемый способ сделать форк встроенной темы, не копируя все 33 поля. Нечитаемые или повреждённые файлы пропускаются с предупреждением, поэтому одна битая тема не ломает остальные.
## История звёзд
<p align="center">
<a href="https://starchart.cc/WhoSowSee/mdv">
<picture>
<source
media="(prefers-color-scheme: dark)"
srcset="https://starchart.cc/WhoSowSee/mdv.svg?variant=custom&background=%230d1117&axis=%238b949e&line=%232f81f7"
/>
<source
media="(prefers-color-scheme: light)"
srcset="https://starchart.cc/WhoSowSee/mdv.svg?variant=custom&background=%23ffffff&axis=%2357606a&line=%230969da"
/>
<img
alt="История звёзд"
src="https://starchart.cc/WhoSowSee/mdv.svg?variant=custom&background=%23ffffff&axis=%2357606a&line=%230969da"
/>
</picture>
</a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/footers/gray0_ctp_on_line.svg?sanitize=true" alt="catppuccin" />
</p>
<p align="center">
<i><code>© 2026-present <a href="https://github.com/WhoSowSee">WhoSowSee</a></code></i>
</p>
<p align="center">
<a href="https://github.com/WhoSowSee/mdv/blob/main/LICENSE"><img src="https://img.shields.io/github/license/WhoSowSee/mdv?style=for-the-badge&color=CBA6F7&logoColor=cdd6f4&labelColor=302D41" alt="LICENSE"></a>
</p>