Pas almost dy vjetësh zhvillimi, është publikuar versioni Neovim 0.5, një degë e redaktorit Vim, e fokusuar në rritjen e zgjerueshmërisë dhe fleksibilitetit. Në kuadër të projektit, për më shumë se shtatë vjet, është realizuar një ristrukturim i kodit të Vim-it, që sjell ndryshime që thjeshtojnë mirëmbajtjen e kodit, ofrojnë mjete për ndarjen e punës midis disa mbajtësve, ndajnë ndërfaqen nga pjesa bazë (ndërfaqja mund të ndryshohet pa prekur brendësinë) dhe realizojnë një arkitekturë të re të zgjerueshme mbi bazën e plug-in-eve. Punimet origjinale të projektit shpërndahen nën licencën Apache 2.0, ndërsa pjesa bazë nën licencën Vim.
Një nga problemet e Vim-it që çoi në krijimin e Neovim janë bazat e kodit monolit, të fryra, që përmbajnë më shumë se 300 mijë rreshta kodi në gjuhën C (C89). Në të gjitha nuancat e bazës së kodit të Vim-it, vetëm disa persona e kuptojnë, dhe të gjitha ndryshimet kontrollohen nga një mbajtës, çka e vështirëson mbështetje dhe punën për përmirësimin e editorit. Në vend të kodit të integruar në kernelin e Vim për mbështetje GUI, Neovim ofron një ndërfaqe universale që lejon krijimin e ndërfaqeve duke përdorur toolkit të ndryshme.
Pluginet për Neovim ekzekutohen si procese të veçanta, për interaksionin me të cilat përdoret formati MessagePack. Bashkëpunimi me pluginet bëhet në mënyrë asinkrone, pa bllokimin e komponentëve bazë të editorit. Një socket TCP mund të përdoret për të komunikuar me pluginin, pra, plugin mund të ekzekutohet në një sistem të jashtëm. Në të njëjtën kohë, Neovim mbetet e përputhshme me Vim, vazhdon të mbështesë Vimscript (si alternativë ofrohet Lua) dhe mbështet lidhjet e shumicës së pluginave standarde të Vim. Mundësitë e avancuara të Neovim mund të përdoren në pluginet e krijuara duke përdorur API-në specifike për Neovim.
Aktualisht janë përgatitur rreth 130 plugins specifikë, janë në dispozicion lidhjet për krijimin e plugins dhe implementimeve të ndërfaqeve duke përdorur gjuhë të ndryshme programimi (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) dhe framework-u (Qt, ncurses, Node.js, Electron, GTK). Po zhvillohen disa variante të ndërfaqes së përdoruesit. Shtesat GUI janë shumë të ngjashme me plugins, por, ndryshe nga plugins, ato inicojnë thirrjen e funksioneve Neovim, ndërsa plugins thirren nga Neovim.
Disa nga ndryshimet në versionin e ri:
- Është shtuar një klient i integruar LSP (Protokolli i Serverit të Gjuhës) në gjuhën Lua, i cili mund të përdoret për t'u lidhur me shërbime të jashtme për analizën dhe autokompletimin e kodit.
- Është shtuar një API për menaxhimin e formatit të bufereve të zgjedhjes.
- Është shtuar një API për përdorimin e etiketave të avancuara, që lejojnë ndjekjen e ndryshimeve në nivelin e bajtave të veçantë.
- Është zgjeruar mbështetja për Lua, si një gjuhë për zhvillimin e plug-in-eve dhe menaxhimin e konfigurimit.
- Është shtuar mbështetje eksperimentale për motorin e analizës së sintaksës tree-sitter.
Burimi: opennet.ru
