# grimoir Терминальный текстовый редактор в стиле Vim, написанный на Go. Поддерживает Markdown с live preview, подсветку синтаксиса для 10 языков, встроенный файловый менеджер, экспорт в PDF с кириллицей, загрузку статей по URL и гибкую настройку через конфиг-файл. --- ## Возможности ### Редактор - **Vim-режимы** — NORMAL, INSERT, COMMAND, SEARCH с полным набором команд - **Unicode** — полная поддержка кириллицы и любых других символов при вводе - **Undo / Redo** — до 100 шагов (`u` / `Ctrl+R`) - **Числовые префиксы** — `5j`, `3dd`, `10G` - **Поиск** — `/pattern` с навигацией `n`/`N`, поиск символа `f`/`t`, парные скобки `%` - **Замена** — `:s/old/new/` и `:s/old/new/g` - **Автосохранение** — настраиваемый интервал ### Markdown - **Live preview** — разделённый экран редактор + preview - **Рендер** — заголовки, списки, таблицы, blockquotes, code blocks с подсветкой, ссылки, bold/italic ### Подсветка синтаксиса Go, Python, JavaScript, TypeScript, Rust, C/C++, Java, SQL, Bash ### Файловый менеджер - Дерево файлов с vim-навигацией - Открытие файлов прямо из дерева - `Ctrl+B` — показать/скрыть, `Tab` — переключить фокус ### PDF экспорт - Встраивает системный шрифт с кириллицей — полноценный русский текст в PDF - Автоматический поиск шрифта (LiberationSans, DejaVu, Arial и др.) - Subset embedding — в PDF попадают только использованные глифы - Fallback — транслитерация если шрифт не найден ### Загрузка статей ```bash grimoir https://example.com/article # или прямо в редакторе: :fetch https://example.com/article ``` Скачивает страницу, извлекает основной контент, конвертирует в Markdown, сохраняет файл с именем из заголовка статьи. --- ## Управление ### Режимы | Клавиша | Действие | |---------|----------| | `i` / `a` / `A` | INSERT: вставить / после курсора / в конец строки | | `I` / `o` / `O` | INSERT: в начало / новая строка ниже / выше | | `Esc` | вернуться в NORMAL | | `:` | режим команд | | `/` | поиск | | `?` | справка | ### Навигация | Клавиша | Действие | |---------|----------| | `h j k l` | ← ↓ ↑ → | | `w` / `b` / `e` | слово вперёд / назад / конец слова | | `0` / `^` / `$` | начало / первый символ / конец строки | | `gg` / `G` | начало / конец файла | | `42G` | перейти на строку 42 | | `f{c}` / `F{c}` | найти символ вправо / влево | | `t{c}` / `T{c}` | до символа вправо / влево | | `;` / `,` | повторить f/t / в обратном направлении | | `%` | парная скобка `()[]{}` | В INSERT режиме работают стрелки, `Home`, `End`, `Delete`. ### Редактирование | Клавиша | Действие | |---------|----------| | `x` | удалить символ | | `dd` / `3dd` | удалить строку / 3 строки | | `yy` / `p` / `P` | скопировать / вставить ниже / выше | | `u` / `Ctrl+R` | undo / redo | ### Команды | Команда | Действие | |---------|----------| | `:w` | сохранить | | `:w path` | сохранить копию | | `:saveas path` | сохранить как | | `:q` / `:q!` / `:wq` | выйти | | `:e path` | открыть файл | | `:new path` | новый файл | | `:N` | перейти на строку N | | `:s/old/new/g` | замена во всём файле | | `:fetch URL` | скачать статью | | `:export pdf` | экспорт в PDF | | `:export pdf path` | экспорт в указанный путь | | `:help` / `?` | справка | ### Панели | Клавиша / Команда | Действие | |-------------------|----------| | `Ctrl+B` | показать / скрыть файловое дерево | | `Tab` | переключить фокус между панелями | | `<` / `>` | уменьшить / увеличить ширину панели | | Пробел | показать / скрыть preview (только .md) | | `:treewidth 30` | установить ширину дерева | | `:previewwidth 45` | установить ширину preview | --- ## Конфигурация Конфиг ищется автоматически при запуске: | ОС | Путь | |----|------| | Linux | `~/.config/grimoir/grimoir.conf` | | macOS | `~/Library/Application Support/grimoir/grimoir.conf` | | Windows | `%APPDATA%\grimoir\grimoir.conf` | Также поддерживается локальный `./grimoir.conf` в текущей директории — имеет наивысший приоритет. Создать конфиг с дефолтными настройками: ```bash ./grimoir --write-config ``` ### Пример конфига ```ini [settings] tree_width = 28 preview_width = 42 line_numbers = true tab_width = 4 autosave = 60 show_tree = false show_preview = false [keys] quit = ctrl+c toggle_tree = ctrl+b focus_switch = tab panel_shrink = < panel_grow = > toggle_preview = " " redo = ctrl+r ``` ### Управление конфигом ``` :config show — откуда загружен конфиг и текущие значения :config paths — список путей поиска :config write — записать дефолтный конфиг :config reload — перезагрузить без перезапуска ``` Настройки можно менять и на лету: ``` :set number / nonumber — номера строк :set tab_width=2 — ширина таба :set autosave=30 — автосейв каждые 30 секунд :set autosave=0 — выключить автосейв ``` --- ## Флаги запуска ``` grimoir [флаги] [файл или URL] -f path файл для редактирования --config path явный путь к конфиг-файлу --write-config записать дефолтный конфиг и выйти ``` --- ## Сборка Требования: **Go 1.21+** ```bash go mod tidy go build -ldflags="-s -w" -o grimoir ``` Зависимости: | Пакет | Назначение | |-------|------------| | `charmbracelet/bubbletea` | TUI фреймворк (Elm-архитектура) | | `charmbracelet/lipgloss` | стилизация вывода | | `charmbracelet/bubbles` | компоненты (viewport) | Вся остальная функциональность — подсветка синтаксиса, PDF генерация, TTF парсинг, INI парсер, HTML→Markdown конвертер — реализована без внешних зависимостей.