Доступен Neovim 0.4, модернизированный вариант редактора Vim
Опубликован релиз Neovim 0.4, ответвления от редактора Vim, сфокусированного на повышении расширяемости и гибкости. Оригинальные наработки проекта распространяются под лицензией Apache 2.0, а базовая часть под лицензией Vim.
В рамках проекта Neovim уже более пяти лет проводится переработка кодовой базы Vim, в результате которой вносятся изменения, упрощающие сопровождение кода, предоставляющие средства разделения труда между несколькими мэйнтейнерами, отделяющие интерфейс от базовой части (интерфейс можно менять не трогая внутренности) и реализующие новую расширяемую архитектуру на основе плагинов.
Из проблем Vim, побудивших к созданию Neovim, отмечается раздутая монолитная кодовая база, состоящая более чем из 300 тысяч строк кода на языке Си (C89). Во всех нюансах кодовой базы Vim разбирается всего несколько человек, а все изменения контролирует один мэйнтейнер, что затрудняет сопровождение и работу над усовершенствованием редактора. Вместо встроенного в ядро Vim кода для поддержки GUI в Neovim предлагается использовать универсальную прослойку, позволяющую создавать интерфейсы с использованием различных тулкитов.
Плагины к Neovim запускаются как отдельные процессы, для взаимодействия с которыми используется формат MessagePack. Взаимодействие с плагинами производится в асинхронном режиме, без блокирования базовых компонентов редактора. Для обращения к плагину может использоваться TCP-сокет, т.е. плагин может запускаться на внешней системе. При этом Neovim остаётся обратно совместимым с Vim, продолжает поддерживать Vimscript (в качестве альтернативы предлагается Lua) и поддерживает подключения большинства штатных плагинов Vim. Расширенные возможности Neovim могут быть использованы в плагинах, построенных с использованием API, специфичного для Neovim.
В настоящее время уже подготовлено около 80 специфичных плагинов, доступны биндинги для создания плагинов и реализаций интерфейсов с использованием различных языков программирования (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) и фреймворков (Qt5, ncurses, Node.js, Electron, GTK+). Развивается несколько вариантов пользовательского интерфейса. GUI-надстройки во многом напоминают плагины, но, в отличие от плагинов, они инициируют вызов функций Neovim, в то время как плагины вызываются из Neovim.
Некоторые из изменений в новой версии:
- Добавлена большая порция новых функций API и событий интерфейса пользователя.
- Добавлена новая стандартная библиотека Nvim-Lua для разработки плагинов на языке Lua.
- Продолжено развитие протокола пользовательского интерфейса, выполняющего обновление информации на экране на уровне строк, а не отдельных символов.
- Добавлена поддержка полноценных плавающих окон, которые могут размещаться в произвольном месте, прикрепляться, связываться с отдельными буферами редактирования, группироваться в режиме Multigrid.
- Добавлена опция 'pumblend' для полупрозрачных выпадающих меню.
© OpenNet