grimoir/README.md
2026-07-04 13:04:33 +03:00

205 lines
7.6 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 конвертер — реализована без внешних зависимостей.