Что будет, если скрестить vi с регулярками из Plan 9

03 окт 2026
4,977
292
96
5 дней

Есть README, которые читаешь и понимаешь, что автору не всё равно. У проекта vis один из таких. Пролистайте до раздела Non Goals, и увидите честный список всего, чем этот редактор никогда не станет: никаких вкладок, файловых менеджеров, шифрования, GUI, VimL, проверки орфографии. Такой прямоты в описаниях встречается мало.

vis живёт на GitHub с 2014 года, написан на C. Сейчас у него около пяти тысяч звёзд и почти триста форков. Интересен он, впрочем, не цифрами.

В чём идея

vi и его потомки работают с текстом через модальность: отдельные режимы для навигации, вставки, выделения. Привычно и быстро. А в Bell Labs был ещё редактор sam, который строил редактирование вокруг структурных регулярок.

Разница принципиальная. Когда вы пишете в vim :%s/foo/bar/g, замена идёт построчно, совпадение за совпадением. Структурные регулярки устроены иначе: сначала описываете регуляркой набор областей в тексте, а потом выполняете команды над каждой такой областью как над отдельной единицей. Получается что-то вроде конвейера для текста. Меняете не строку, а произвольный фрагмент, который сами определили.

vis берёт модальное редактирование от vi и добавляет командный язык sam со структурными регулярками. Автор описывает это как попытку соединить сильные стороны обоих. Причём совместимость с vi(m) не цель: проект не гонится за побайтовой идентичностью, а хочет дать более выразительные приёмы редактирования.

Реклама

демонстрация работы vis

Что умеет

Мультикурсорность и множественные выделения встроены изначально. Не плагин, который надо ставить и настраивать, а часть модальной модели. Кто привык к мультикурсорам в современных редакторах, узнает привычный инструмент в vi-подобной логике.

Работа с файлами любого размера. В описании прямо сказано про большие, бинарные и однострочные файлы. Последнее отдельная боль. Огромный minified JS в одну строку валит многие редакторы. vis обещает справляться.

Подсветка синтаксиса через Parsing Expression Grammars, которые описываются на Lua через LPeg. Звучит академично, но идея простая: синтаксис задаётся грамматикой, а не набором регулярных выражений, и подсветка выходит точнее для сложных языков.

Unicode. Редактор заявляет приличную поддержку, а для инструмента с корнями в мире C и POSIX-утилит это не такая тривиальная вещь.

Как оно устроено

Ядро написано на современном C (стандарт C99) без legacy-наслоений. Автор отдельно подчёркивает, что код должен быть понятным и пригодным для экспериментов. То есть на него закладывают изменения, а не просто поддерживают. Есть Lua API для расширений прямо внутри процесса.

Философия простая: редактор занимается управлением текстом, а всё остальное выносят в отдельные утилиты. Буфер обмена, работа с диграфами, нечёткий поиск файла. Немного неожиданно, зато меньше кода в ядре и больше гибкости. Есть планы на клиент-серверную архитектуру, где управление окнами отдаётся оконной системе или терминальному мультиплексору.

Сборка стандартная и без магии:

$ ./configure && make && sudo make install

Из зависимостей нужен компилятор C99 и POSIX-совместимое окружение, рекомендуется curses. Опционально Lua 5.2 и выше, LPeg (без него не будет подсветки) и TRE для более экономного поиска по регуляркам. configure сам попробует найти Lua через pkg-config. Готовые пакеты есть для многих дистрибутивов.

Чего в vis не будет

Раздел Non Goals экономит время, поэтому его лучше прочитать целиком. Не ждите вкладок и продвинутого управления окнами, файлового браузера, поддержки архивов, сетевых протоколов вроде ftp и ssh, шифрования, сжатия, GUI, VimL, ex-режима, diff-режима, vimgrep и встроенной проверки орфографии. Автор прямо говорит, что ex-режим не нужен, потому что есть более элегантные структурные регулярки.

Признаюсь, для кого-то этот список станет стоп-фактором. Если вы живёте в vim с десятком плагинов на VimL, переезд потребует пересмотра привычек. Это не замена vim один в один, и проект к этому не стремится.

Кому это нужно

vis подойдёт тем, кому интересно посмотреть на редактирование текста под другим углом. Нравится идея структурных регулярок или надоело разрастание конфигурации, попробуйте. В задачах, где надо пройтись регуляркой по множеству фрагментов и обработать каждый, подход из sam бывает удобнее привычного :s.

Ещё один сценарий, слабые машины и минималистичные окружения. Установка не тянет половину мира, ядро компактное, терминальный редактор работает там, где GUI не вариант.

Начать просто. Поставьте из пакетов дистрибутива или соберите из исходников, откройте мануал vis(1), загляните в wiki. Есть FAQ и отдельные страницы про отличия от sam и vim, как раз чтобы не путаться в первое время. Обсуждение живёт в IRC-канале #vis-editor и в списке рассылки.

Документация не самая подробная, и это скорее правда, чем придирка. Мануал и wiki закрывают базу, но за глубокими примерами иногда приходится идти в исходники или в чат. Зато код для этого приспособлен.

Если ищете инструмент, где всё «как в vim, только лучше», vis скорее разочарует. А если готовы попробовать другую модель работы с текстом, это редкий шанс увидеть, каким мог бы быть vi без груза legacy.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.