Редактор кода Helix — лучше чем NeoVim?

Откиньтесь на спинку кресла, пододвиньте монитор поудобнее, сейчас будет краткий магически метафоризированный рассказ о редакторах кода. А потом, о новом явлении, или даже тектоническом сдвиге, в этом древнем мире. О редакторе Helix, глазами старого Vim-овода.

Существует три мира

1. Мир IDE

Они всевластны. Их прародитель Turbo Pascal 1983. Ныне его можно встретить в музеях и на скриншотах. Хотя может быть еще есть люди, которые владеют древним знанимем DOS и могут его запустить.

В мире IDE много сект, которые отличаются друг от друга обрядами, однако между собой, в целом, живут мирно. Microsoft VS и VSCode 1997, IntelliJ IDEA 2001, QtCreator 2009 и многие другие.

Здесь живут маги творящие заклинания из:

  • ctrl+[a, z, x, c, v, b, f, h]

  • ctrl/shift+«чето_там»

  • и еще они владеют мышкой

Они уверены, что их заклинания самые сильные. Что самые крутые маги принадлежат школе IDE, что все масштабные проекты созданы IDE магией. А их заклинания по рефакторингу вообще не имеют аналогов. Остальное — это недоделанные блокноты, экзотика, а использующие их гики ковыряют только свои маленькие проекты.

d6f5210133a333e4193474e76d55aeda.png

2. Мир Emacs

Я мало знаю об этом мире. Это древние маги. Впервые они появились в мире в 1976 г, это 48 лет назад. Их верховный мастер сам Ричард Столлман! В том, что сейчас называют GNU/Linux, первые 3 буквы это его рук дело.

Здесь владеют могущественными заклинаниями из:

  • Ctrl+Shift+Meta+[все_буквы_цифры_символы]

  • У них есть божество Lua, которое многократно усиливает их магические способности. Однако, доступ к этому божеству есть не у всех. Необходимо обучение и посвящения от старых мастеров.

  • Говорят у них даже есть своя операционная система, в которой они делают все, но для конспирации ее называют так же как редактор — Emacs.

3. Мир vi-Vim-NeoVim

Об этих магах стали говорить после 1991 г, когда пророк Брам Моленар явил миру учение Vim. Но адепты этой школы знают, что на самом деле, все началось задолго до пришествия Брама. В 1976 г будда Билл Джой достиг просветления при редактировании кода и сказал — это «vi». Таким образом это тоже древнейшие маги.

Здесь владеют могущественными заклинаниями из:

  • [Все_Буквы_Цифры_Символы_ПримчемРегистроЗависимые], которые имеют разные эффекты в зависимости от руны 'n' 'i' 'v'. Есть и другие, продвинутые, менее известные руны, например 'с' 't', говорят их аж 14. Но их никто не знает. И вообще даже самый крутой Neo маг знает и владеет не более чем 5% учения, настолько уж оно обширно.

  • У них есть божество Vimscript, которое многократно усиливает их магические способности. А теперь, с приходом эпохи NeoVim они так же получили доступ к божеству Lua.

  • Тот кто попал к ним, обычно не может выйти.

Эти три мира непримиримы, каждый из них за десятилетия доказал право на место под солнцем, и в целом во вселенной редакторов кода поддерживался баланс. Но вот, в третьем мире «vi-Vim-NeoVim» началось что-то нетипичное:

If Neovim is the modern Vim, then Helix is post-modern.

За бугром уже вовсю крутятся обзорные ролики показывающие первые заклинания, доступные без посвящения. Старейшины собираются на githube и записывают учение. А вокруг обсуждают вопрос: «Helix Text Editor: Better than Neovim?».
На территории рунета пока тихо, один ролик на ютюбе, да пара упоминаний мельком на хабре. Попробую свои силы в первой статье для многочисленного, сильного и уважаемого клана «Хабр», надеюсь меня возьмут в их ряды.

Чем Helix отличается от Vim?

Цитата с официального сайта:

Начав с нуля, мы смогли извлечь уроки из нашего опыта работы с Vim и внести некоторые кардинальные изменения. Результатом является гораздо меньшая кодовая база и современный набор значений по умолчанию. Легче начать работу, если вы никогда раньше не использовали модальный редактор, и надо будет гораздо меньше возиться с файлами конфигурации.

А еще он многое взял от Kakoune, про который тут речь не пойдет, но можно посмотреть здесь.

Helix написан на Rust, без Electron, без VimScript, без JavaScript. Работает ощутимо быстрее чем Vim, но сравнение некорректно, Vim у меня плагинами обвешан, и их гораздо больше чем в базе у Helix.

Да, Helix приходит не голым чистым листом, предназначенным для дальнейшей доработки напильником. Он уже заряжен и готов к работе. Лица ортодоксов кастомизации сейчас должны выражать глубокое разочарование. Я тоже, услышав это не воодушевился, а напрягся. Но посмотрите на этот список! Что тут лишнее, если это редактор для кода?

Color scheme

Из коробки доступны все темы для NeoVim с первой страницы по популярности. Пишем »: theme » и щелкаем «tab» в поисках того, что глаз радует, или вводим первые буквы своей любимой темы. Не надо ничего качать, не надо ничего в конфиг писать. Просто. Удобно. Такой же функционал предоставляет, например, NvChad сборка для Vima.

6cba0fd22a54024e21ce6174f322b6de.png

Multiple Cursor

Это вообще за гранью добра и зла. Жмем «Shift-с» и появляется второй курсор, еще раз «Shift-с» и еще один. Хоть 100500 курсоров делай, жми »,» чтобы вернуться к одному курсору. В начале курсоры располагаются друг под другом, и позволяют делать примерно тоже что можно делать в NeoVim в блочном выделение «Ctrl-v». И еще на много больше, это все таки отдельные курсоры, а не блок выделения. В паре предложений не описать то, что они позволяют делать. Просто посмотрите туториал, он как в Vim сделан »: tutor». Наверное не все так удивляются как я, позже выяснилось что для Vim есть плагин реализующий подобную функцию.

Fuzzy find

Как telescope для Vim, только работает по ощущениям быстрее.

3cb00c106d7e11a3e70ce334c8ff0b8a.png

Tree-sitter

Создает устойчивые к ошибкам и надежные синтаксические деревья, что обеспечивает лучшую подсветку синтаксиса, расчет отступов и навигацию по коду.

LSP

Когда начинал писать конфиг для NeoVim вообще не знал, что такое Language Server Protocol, примеры из интернета не работали, мне понадобилось несколько дней, чтобы заставить nvim-cmp работать.

К Helix все прикручивается само, нужно набрать в терминале »~helix --health», чтобы увидеть список доступных LSP, DAP, Formatter, Highlight, Textobject, Indent. Затем установить нужный пакет, например в Arch Linux для С/C++ выполнить »~yay -S clangd», или »~yay -S pylsp» для Python. Вуаля, автодополнение работает. И аргументы функции при вводе подсвечиваются, и документация подтягивается.

63fc5149264f56dbb915003c51906d6c.png

Surround

Похож на nvim-surround плюс автозакрытие скобок.

Интеграция с git

Измененные/удаленные/добавленные строки подсвечиваются по-умолчанию. Может еще что-нибудь, не знаю.

161e63b9e61b6e1f76677c97bee52db4.png

Я из тех, которые несколько месяцев причесывали и дополняли свой конфиг Vim-a. Это было интересное время, полезный опыт. Получился отличный, удобный для моих задач инструмент, гибкий, мощный, быстрый, легкий. Работать с которым в кайф.

Во второй половине работы над конфигом, когда основное уже настроил и было все почти идеально, читая очередную статью про NeoVim я видел, что темы пересекаются, грубо, на 50–80%. Одни и те же плагины, одни и те же рецепты.

То есть уже сформировался лучшей user experience, и большинство решает одинаковые задачи одним способом. Helix собрал лучший опыт и сделал его по-умолчанию. Это просто экономит время.

Но есть и другие, более существенные отличия.

Editing model «selection → action»

В Vim мы сначала выбираем действие, затем область его применения:
«di (» — удалить все что в скобках. В Helix сначала выделяем, затем выбираем действие: «mi (d» — match inside (delete. На мой взгляд эта модель более интуитивна и естественна. Комфортнее видеть что изменяешь, до того как изменяешь. После Vim это, конечно, раздражает, а не радует, но это только дело привычки, нескольких дней или недель использования. Обе модели в принципе жизнеспособны, и существуют давно. В конце концов на практике это приводит лишь к тому что вместо «dw», вы будете нажимать «wd»

Simple config — toml

После Vim никакой конфиг нам не страшен. Но некоторые конфиги приятно удивляют своей простотой и понятностью. А тут еще и краткостью. Думаю рабочий конфиг Helix-a будет где-то в 10–50 раз меньше вашего конфига в Vim. И было очень приятно увидеть простые команды »: config-open», «config-reload».
Пример конфига:

theme = "kanagawa"

[editor]
line-number = "relative"
color-modes = true

[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"

[editor.statusline]
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"

Всплывающие окна справки по хоткеям

В составных командах, типа «gg», после нажатия первой клавиши появляется окно с хоткеями. Тут много общего с Vim, по ощущениям где то на 70%. А изменения на мой взгляд в лучшую сторону. В Vim было «d» и «x» которые делают примерно одно и тоже. В Helix есть только «d». Он более ортогонален. Эти всплывающие окна наверняка можно отключить, не копал еще, в начале они помогают.

c757dacf33308784ca77cf7777917f0a.png

А что с плагинами?

А их пока нет. Но точно будут. Возможно на языке Scheme. В сообществе идет активное обсуждение.

Пара слов для эмигрантов из мира Vim

Готовьтесь, будет боль, больше всего бомбить будет когда «х» выделяет строку, а не удаляет то что выделено, или символ под курсором. А так же dd и yy сработают только на символ под курсором… Но это все мелочи.

Философия и пророчества

Некоторые могут морщить нос, мол это не Unix-way, одна программа должна решать одну задачу, комбайны и коробки это не труЪ.

На мой взгляд тут есть одно принципиальное отличие. Когда делали IDE и другие масштабные коробочные продукты (типа Photoshop, Autocad), люди думали над тем, что нужно пользователю в работе, как ему это лучше делать, и реализовывали это. Решения были и удачные, и не очень. Потом шло время, нужны были новые функции, нужно было поддерживать обратную совместимость, так комбайны становились все тяжелее. Они с одной стороны становились лучше, умели больше, а с другой стороны накапливали плохое наследие.

С Helix-ом кое-что по другому. Сначала был минималистичный, но гибкий редактор Vim. Который с годами делали еще и еще более гибким. А сообщество написало триллион плагинов, начиная от навигации по файлам заканчивая «завариванием_кофе» и «подачей_тапочек_к_кровати». Эти плагины прошли естественный отбор. И только теперь, когда мы уже знаем, что нужно всем нам, пишущим код в модальном редакторе, и как это лучше всего сделать, вот теперь это интегрировали. А еще многое было пересмотрено в Kakoune, теперь Helix пытается собрать лучшее из обоих. И у него получается. Посмотрите вот это обсуждение хоткеев.

Метафорически это не строительство комбайна. Это как раз похоже на то как работает эволюция. Сначала появляются отдельные формы, они тестируются, выживают лучшие, потом они интегрируются в более крупные системы. И так многократно.

Вот так вот за раз сесть и сходу написать проект человека со всеми его глазами, ушами, нервной системой, органами, колониями «пищеварительных» бактерий в кишечнике и с гораздо более низкоуровневыми подсистемами, — видимо даже архитектору этого мира было сложно. И он писал этот проект частями, проводя время от времени рефакторинг, и отбрасывая целые модули (типа динозавров).

При таком подходе сквозь годы можно выделить удачные решения, а плохое наследие само уходит на дно забытых репозитариев. То есть улучшения улучшаются, а плохое отмирает никому не мешая, благодаря тому, что это все отдельные кусочки, а не изначально целостная система.

Похоже что «никогда такого не было, и вот опять» пришли перемены.
system V → systemd
xorg → wayland
neovim → helix

Хоть это и совершенно не равнозначные аналогии между длинным, горячим и зеленым, я вижу в этих переменах один и тот же принцип — интеграция проверенных элементов. И создание нового проекта с нуля опираясь на уроки и опыт работы с предшественником.

Конец мира NeoVim определенно не близок. Но Helix весьма вероятная замена. Жаль только название не PostNeoVim / pnvim. И он никак не может именовать себя чистокровным потомком древних магов vi.

Немного цифр

Количество звезд на гитхабе:
Vim — 35k
NeoVim — 79k
Helix — 30k

Количество строк кода:
Vim — 1.8m
NeoVim — 1.5m
Helix — 0.5m

Post scriptum

Я не перешел на Helix, но думаю, что перейду. Проекту еще только 2 года. В нем еще не хватает некоторых необходимых мне функций. Нет фолдинга. Нет древовидного обзора файлов проекта (в моих dev проектах можно без него обойтись, а в работе с блогом где гораздо больше файлов и разных форматов, и много одинаковых имен, но лежащих в разных папках, тут fzf не удобен).

И если с навигацией еще можно решить вопрос костылями, хаками и отдельным TUI файловыми менеджерами. То с фолдингом вроде пока никак нельзя. Ну и поддержки работы с русской раскладкой в normal-mode тоже, конечно, нет.

Я с интересом буду наблюдать за развитием проекта. Время от времени пробую набирать в нем несложные тексты, жду систему плагинов. Что-то мне в нем нравится, в самой его сути, философии. Helix обычно очаровывает пользователей Vim, а не разочаровывает. И по моему будущее за ним. А некоторые уже работают над своими проектами в Helix.
А вы что думаете? Уже пробовали?

Ссылки:

— Сайт проекта
— Github
— Документация по хоткеям
— Обсуждение хоткеев
— Обсуждение системы плагинов
— Миграция с Vim
— Hack с файловым менеджером yazi
— Про упомянутый редактор Kakoune

© Habrahabr.ru