Helix: модальный текстовый редактор
Зачем
Helix: post-vim редактор, написанный на Rust. Ключевые отличия от Vim/Neovim:
- Всё работает из коробки: LSP, tree-sitter подсветка, автодополнение, файловый пикер, и всё это без плагинов
- Модель selection → action вместо vim-овского action → motion (сначала выделяешь, потом действуешь)
- Множественные курсоры как первоклассная фича
- Встроенный file picker, buffer picker, symbol picker с fuzzy-поиском
- Tree-sitter: структурная навигация и выделение по AST-узлам
Установка
Бинарник называется hx.
Модель: selection → action
Главное отличие от Vim. В Vim ты говоришь “удали слово” (dw), а в Helix: “выдели слово, затем удали” (wd).
Преимущество: ты видишь, что выделено, прежде чем действовать. Меньше неожиданностей.
Режимы (modes)
| Режим | Как войти | Как выйти |
|---|---|---|
| Normal | Esc | (по умолчанию) |
| Insert | i, a, o и др. | Esc |
| Select (visual) | v | Esc |
| Command | : | Esc / Enter |
| Goto | g | автовыход после команды |
| Match | m | автовыход после команды |
| Window | Ctrl+w | автовыход после команды |
| Space (меню) | Space | автовыход после команды |
Space-меню: интерактивная подсказка. Нажми Space и увидишь все доступные действия.
Навигация
Базовое перемещение
| Клавиша | Действие |
|---|---|
h j k l | влево / вниз / вверх / вправо |
w | следующее слово (начало) |
b | предыдущее слово (начало) |
e | конец слова |
W B E | то же, но WORD (разделитель: пробел) |
0 | начало строки |
$ | конец строки (в Helix: gl) |
^ | первый непробельный символ (в Helix: gh) |
gg | начало файла |
ge | конец файла |
:<number> | перейти к строке |
Goto-режим (g)
| Клавиша | Действие |
|---|---|
gg | начало файла |
ge | конец файла |
gh | начало строки (home) |
gl | конец строки (end) |
gs | первый непробельный символ |
gt | верх экрана |
gc | центр экрана |
gb | низ экрана |
gd | go to definition (LSP) |
gy | go to type definition |
gr | go to references |
gi | go to implementation |
ga | go to last accessed file |
gm | go to last modified file |
gn | go to next buffer |
gp | go to previous buffer |
Скролл
| Клавиша | Действие |
|---|---|
Ctrl+d | полстраницы вниз |
Ctrl+u | полстраницы вверх |
Ctrl+f | страница вниз |
Ctrl+b | страница вверх |
zz | текущая строка в центр экрана |
zt | текущая строка наверх |
zb | текущая строка вниз |
Поиск
| Клавиша | Действие |
|---|---|
/ | поиск вперёд |
? | поиск назад |
n | следующее совпадение |
N | предыдущее совпадение |
* | поиск текущего выделения |
Прыжки
| Клавиша | Действие |
|---|---|
Ctrl+o | назад по jumplist |
Ctrl+i | вперёд по jumplist |
Ctrl+s | сохранить позицию в jumplist |
Выделение и редактирование
Выделение
| Клавиша | Действие |
|---|---|
v | toggle select mode (расширяет выделение при навигации) |
x | выделить текущую строку |
X | выделить строку вверх (расширяет) |
% | выделить весь файл |
s | select (regex) внутри выделения, split |
S | split выделения по regex |
& | выровнять выделения |
; | сбросить выделение (курсор остаётся) |
, | убрать все курсоры кроме основного |
Alt+, | убрать основной курсор |
Действия над выделением
| Клавиша | Действие |
|---|---|
d | удалить |
c | удалить и перейти в insert |
y | копировать (yank) |
p | вставить после |
P | вставить перед |
r<char> | заменить выделение символом |
~ | переключить регистр |
` | в нижний регистр |
Alt+` | в верхний регистр |
> | увеличить отступ |
< | уменьшить отступ |
= | отформатировать выделение (LSP) |
J | объединить строки |
Вход в Insert mode
| Клавиша | Действие |
|---|---|
i | insert перед курсором |
a | insert после курсора |
I | insert в начало строки |
A | insert в конец строки |
o | новая строка снизу |
O | новая строка сверху |
Изменения
| Клавиша | Действие |
|---|---|
u | undo |
U | redo |
. | повторить последнее действие |
Множественные курсоры
Одна из самых мощных фич Helix.
| Клавиша | Действие |
|---|---|
C | дублировать курсор на строку ниже |
Alt+C | дублировать курсор на строку выше |
s | regex select: создаёт курсор на каждом совпадении в выделении |
, | оставить только основной курсор |
Alt+, | убрать основной курсор |
( | циклить основной курсор назад |
) | циклить основной курсор вперёд |
Alt+s | split selection по переносам строк |
& | выровнять курсоры |
_ | trim whitespace вокруг выделений |
Практические паттерны
Переименовать переменную вручную (без LSP):
Добавить текст в конец нескольких строк:
Обернуть каждую строку в кавычки:
Match mode (m)
Работа с парными символами (скобки, кавычки, теги):
| Клавиша | Действие |
|---|---|
mm | перейти к парной скобке |
ms<char> | surround: обернуть выделение символом |
md<char> | удалить surrounding |
mr<old><new> | заменить surrounding |
ma<char> | выделить вокруг (around) |
mi<char> | выделить внутри (inner) |
Примеры:
Space-меню (лидер)
Нажми Space, и появится меню с подсказками.
| Клавиша | Действие |
|---|---|
Space f | file picker (fuzzy) |
Space F | file picker в текущей директории |
Space b | buffer picker |
Space s | symbol picker (текущий файл, LSP) |
Space S | workspace symbol picker (весь проект, LSP) |
Space d | diagnostics picker (текущий файл) |
Space D | diagnostics picker (весь проект) |
Space g | debug menu |
Space a | code action (LSP) |
Space r | rename symbol (LSP) |
Space h | select symbol references (LSP) |
Space ' | last picker (повторить) |
Space w | window mode |
Space p | paste from system clipboard |
Space y | yank to system clipboard |
Space Y | yank main selection to clipboard |
Space R | replace from clipboard |
Space / | global search (grep в проекте) |
Space k | show docs popup (hover, LSP) |
Space ? | command palette |
Окна и буферы
Window mode (Ctrl+w или Space w)
| Клавиша | Действие |
|---|---|
Ctrl+w s или Ctrl+w v | вертикальный сплит |
Ctrl+w s | горизонтальный сплит |
Ctrl+w h/j/k/l | переключение между окнами |
Ctrl+w q | закрыть окно |
Ctrl+w o | оставить только текущее окно |
Буферы
Быстрое переключение: Space b (fuzzy picker буферов).
LSP: языковые серверы
Helix автоматически запускает LSP для распознанного языка. Проверить:
Установка языковых серверов
LSP-команды в Normal mode
| Клавиша | Действие |
|---|---|
gd | go to definition |
gy | go to type definition |
gr | go to references |
gi | go to implementation |
Space a | code action |
Space r | rename symbol |
Space k | hover docs |
Space s | document symbols |
Space S | workspace symbols |
Space d | diagnostics (файл) |
Space D | diagnostics (проект) |
]d | следующая диагностика |
[d | предыдущая диагностика |
Автодополнение
Появляется автоматически при вводе. Управление:
Ctrl+x: trigger вручнуюTab/Ctrl+n: следующий вариантShift+Tab/Ctrl+p: предыдущийEnter: подтвердитьCtrl+e: отменить
Конфигурация
Конфиги лежат в ~/.config/helix/:
config.toml
languages.toml
Темы
Превью темы: в командном режиме :theme и перебирай Tab, тема применяется мгновенно.
Tree-sitter: структурная навигация
Helix использует tree-sitter для парсинга кода в AST. Это даёт навигацию по структуре, а не по тексту.
| Клавиша | Действие |
|---|---|
Alt+p | выделить родительский узел AST |
Alt+o / Alt+i | расширить / сузить выделение по AST |
Alt+n | выделить соседний узел |
Alt+e | переместиться к концу узла |
]f | следующая функция |
[f | предыдущая функция |
]c | следующий класс |
[c | предыдущий класс |
]a | следующий аргумент/параметр |
[a | предыдущий аргумент/параметр |
]t | следующий тест |
[t | предыдущий тест |
Dev-флоу
Ежедневная работа
Типичная сессия:
Паттерн: рефакторинг
Паттерн: работа с ошибками
Паттерн: grep по проекту + массовое редактирование
Паттерн: быстрое переключение
Команды (:)
Pipe: мощный приём
Пропустить выделенный текст через внешнюю команду:
Частые проблемы
LSP не запускается:
Нет tree-sitter грамматик:
Копирование не работает с системным буфером:
Использовать Space y (yank to system clipboard) и Space p (paste from system clipboard). Требуется xclip (X11) или wl-copy (Wayland).
Привычка из Vim, dd удаляет строку:
В Helix: xd (выделить строку → удалить). Для нескольких строк: 3xd или xxd.
Автоформат раздражает: