Публикуван е 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
