Обявен е релиз на Neovim 0.7.0, разклонение на редактора Vim, фокусирано върху повишаване на разширяемостта и гъвкавостта. В рамките на проекта вече повече от седем години се извършва преработка на кода на Vim, в резултат на което се правят промени, опростяващи поддръжката на кода, предоставящи средства за разделение на труда между няколко поддържащи лица, отделящи интерфейса от основната част (интерфейсът може да се променя, без да засяга вътрешността) и реализиращи нова разширяема архитектура на базата на плъгини. Оригиналните разработки на проекта се разпространяват под лицензия Apache 2.0, а основната част под лицензия Vim. Готови сборки са подготвени за Linux (appimage), Windows и macOS.
От проблемите на Vim, които подтикват създаването на Neovim, се отбелязва надутата монолитна кодова база, състояща се от повече от 300 хиляди реда код на C (C89). Само няколко човека разбират всички нюанси на кода на Vim, а всички промени се контролират от един поддържащ, което затруднява поддръжката и работата по усъвършенстването на редактора. Вместо вградения в ядрото код на Vim за поддръжка на GUI, в Neovim се предлага да се използва универсален интерфейс, който позволява създаването на интерфейси с помощта на различни инструменти.
Плъгините за Neovim се стартират като отделни процеси, за взаимодействие с които се използва форматът MessagePack. Взаимодействието с плъгините се извършва в асинхронен режим, без блокиране на основните компоненти на редактора. За достъп до плъгина може да се използва TCP сокет, т.е. плъгинът може да се стартира на външна система. При това Neovim остава обратно съвместим с Vim, продължава да поддържа Vimscript (като алтернатива се предлага Lua) и поддържа свързванията на повечето стандартни плъгини Vim. Разширените възможности на Neovim могат да се използват в плъгини, изградени с помощта на API, специфичен за Neovim.
В момента са подготвени около 130 специфични плъгини, налични са биндинги за създаване на плъгини и реализации на интерфейси с използване на различни програмни езици (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) и фреймворци (Qt, ncurses, Node.js, Electron, GTK). Развиват се няколко варианта на потребителски интерфейс. GUI-разширенията в много отношения наподобяват плъгини, но, за разлика от плъгините, те иницират извикването на функции на Neovim, докато плъгините се извикват от Neovim.
В новата версия е предложена начална поддръжка за дистанционна работа, позволяваща стартиране на Neovim на сървър и свързване към него от клиентската система, използвайки отделен ui_client. Между другото, прекратена е поддръжката на Python 2, разрешено е използването на Lua-функции в keymap, добавени са нови команди в API, значително са разширени възможностите за използване на Lua за разработка на плъгини и управление на конфигурации, подобрени са средствата за диагностика на проблеми в кода, добавена е поддръжка на глобален статусен ред, извършени са оптимизации на производителността. Разширени са възможностите на вградения LSP-клиент (Language Server Protocol), който може да се използва за прехвърляне на логиката за анализ и автоматично допълване на кода на външни сървъри.
Източник: opennet.ru
