| .gitignore | ||
| ARCHITECTURE.md | ||
| commands.go | ||
| config.go | ||
| fetch.go | ||
| file.go | ||
| file_io.go | ||
| filetree.go | ||
| go.mod | ||
| go.sum | ||
| help.go | ||
| keybindings.go | ||
| LICENSE | ||
| main.go | ||
| menu.go | ||
| model.go | ||
| pdf.go | ||
| pdf_font.go | ||
| README.md | ||
| render.go | ||
| search.go | ||
| syntax.go | ||
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 — транслитерация если шрифт не найден
Загрузка статей
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 в текущей директории — имеет наивысший приоритет.
Создать конфиг с дефолтными настройками:
./grimoir --write-config
Пример конфига
[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+
go mod tidy
go build -ldflags="-s -w" -o grimoir
Зависимости:
| Пакет | Назначение |
|---|---|
charmbracelet/bubbletea |
TUI фреймворк (Elm-архитектура) |
charmbracelet/lipgloss |
стилизация вывода |
charmbracelet/bubbles |
компоненты (viewport) |
Вся остальная функциональность — подсветка синтаксиса, PDF генерация, TTF парсинг, INI парсер, HTML→Markdown конвертер — реализована без внешних зависимостей.