Первый выпуск Neovim, модернизированного варианта редактора Vim

Состоялся первый релиз проекта Neovim, в рамках которого развивается ответвление от редактора Vim, разработка которого сфокусирована на повышении расширяемости и гибкости.

В текущем виде код Vim развивается более 20 лет и состоит из более чем 300 тысяч строк на языке Си (C89), а во всех нюансах кодовой базы Vim разбирается всего несколько человек, что затрудняет сопровождение и работу над усовершенствованием редактора. В рамках проекта уже около двух лет проводится агрессивная переработка кодовой базы Vim, в результате которой вносятся изменения, упрощающие сопровождение кода, предоставляющие средства разделения труда между несколькими мэйнтейнерами, отделяющие интерфейс от базовой части (интерфейс можно менять не трогая внутренности) и реализующие новую расширяемую архитектуру на основе плагинов.

В первом выпуске уже готовы механизмы для автоматического объединения истории работы между несколькими экземплярами редактора, система конфигурации переработана для соответствия требованиям стандарта XDG, встроен эмулятор терминала, добавлены средства выполнения работ в асинхронном режиме (можно запустить команду и не дожидаясь её завершения вернуться к редактированию), добавлен API MessagePack для взаимодействия с плагинами и подготовлены средства отслеживания изменения состояния. Из выполняемых в настоящее время работ отмечается портирование кода ввода/вывода на библиотеку libuv, замена тестового набора на тесты Lua и использование вместо языка VimL транслятора Lua.

Плагины к Neovim запускаются как отдельные процессы, для взаимодействия с которыми используется формат MessagePack. Взаимодействие с плагинами производится в асинхронном режиме, без блокирования базовых компонентов редактора. Для обращения к плагину может использоваться TCP-сокет, т.е. плагин может запускаться на внешней системе. При этом Neovim остаётся обратно совместимым с Vim, продолжает поддерживать Vimscript и поддерживает подключения большинства штатных плагинов Vim. Расширенные возможности Neovim могут быть использованы в плагинах, построенных с использованием специфичного для Neovim API.

В настоящее время уже подготовлено около 20 специфичных плагинов, доступны биндинги для создания плагинов и реализаций интерфейсов с использованием различных языков программирования (C++, Clojure, Perl, Python, Go, Java, Lisp,Lua, Ruby) и фреймворков (Qt5, ncurses, Node.js, Electron, GTK+). Развивается несколько вариантов пользовательского интерфейса, развивающихся в форме надстроек, не требующих изменения базовой части. Вместо встроенного в ядро Vim кода для поддержки GUI предлагается использовать универсальную прослойку, позволяющую создавать интерфейсы с использованием различных тулкитов. GUI-надстройки во многом напоминают плагины, но в отличие от плагинов они инициируют вызов функций Neovim, в то время как плагины вызываются из Neovim.

© OpenNet