Апублікаваны рэліз Neovim 0.6.0, адгалінаванні ад рэдактара Vim, сфакусавана на падвышэнні пашыральнасці і гнуткасці. У рамках праекта ўжо больш за сем гадоў праводзіцца перапрацоўка кодавай базы Vim, у выніку якой уносяцца змены, якія спрашчаюць суправаджэнне кода, якія прадстаўляюць сродкі падзелу працы паміж некалькімі мэйнтэйнерамі, якія адлучаюць інтэрфейс ад базавай часткі (інтэрфейс можна змяняць не кранаючы вантробы) і рэалізуюць новую пашыраецца архітэктуру на аснове плагінаў. Арыгінальныя напрацоўкі праекту распаўсюджваюцца пад ліцэнзіяй Apache 2.0, а базавая частка пад ліцэнзіяй Vim. Гатовыя зборкі падрыхтаваны для Linux (appimage), Windows і macOS.
З праблем Vim, якія заахвоцілі да стварэння Neovim, адзначаецца разадзьмутая маналітная кодавая база, якая складаецца больш за з 300 тысяч радкоў кода на мове Сі (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.
Некаторыя з змен у новай версіі:
- У vim-скрыпты дададзена падтрымка лакальных зменных, вобласць бачнасці для якіх абмежавана толькі бягучым скрыптам.
- Значна палепшана падтрымка мовы Lua для распрацоўкі плагінаў і кіравання канфігурацыяй. У vim-скрыптах дададзена магчымасць выкліку Lua-функцый як метадаў праз указанне прэфікса v:lua (напрыклад, "arg1->v:lua.somemod.func(arg2)").
- Пашыраны магчымасці ўбудаванага LSP-кліента (Language Server Protocol), які можна выкарыстоўваць для вынасу логікі аналізу і аўтадапаўненні кода на вонкавыя серверы. Ужыванне LSP дазваляе выкарыстоўваць больш за 150 гатовых апрацоўшчыкаў для розных моў праграмавання, падрыхтаваных для рэдактара кода Visual Studio Code.
- Палепшаны сродкі дыягностыкі праблем у кодзе. Дададзена магчымасць вываду тэксту дыягнастычных паведамленняў і плаваючых вокнаў з кодам, звязаным з падобнымі паведамленнямі. Забяспечана апрацоўка дыягнастычных паведамленняў, якія перадаюцца LSP-серверам.
- Дададзена падтрымка віртуальных радкоў, якія могуць выкарыстоўвацца, напрыклад, для вываду блокаў са службовай інфармацыяй.
- Унесены розныя аптымізацыі прадукцыйнасці, напрыклад, задзейнічана хэш табліца для падсвечваных імён груп.
- Спынена падтрымка Windows 7 і 32-разрадных зборак для Windows.
Крыніца: opennet.ru