Na bijna twee jaar ontwikkeling is Neovim 0.5 uitgebracht, een fork van de Vim-editor die zich richt op het verbeteren van de uitbreidbaarheid en flexibiliteit. Het project is al meer dan zeven jaar bezig met het herzien van de Vim-codebase. Er zijn wijzigingen doorgevoerd waardoor de code eenvoudiger te onderhouden is, er is een manier om werk te verdelen tussen meerdere beheerders, de interface is losgekoppeld van de kern (de interface kan worden gewijzigd zonder de interne werking aan te passen) en er is een nieuwe, uitbreidbare, op plug-ins gebaseerde architectuur geïmplementeerd. De originele ontwikkelingen van het project worden gedistribueerd onder de Apache 2.0-licentie en het basisgedeelte onder de Vim-licentie.
Een van de problemen met Vim die aanleiding gaven tot de oprichting van Neovim was de opgeblazen, monolithische codebasis, bestaande uit meer dan 300 regels C (C89)-code. Slechts een paar mensen begrijpen alle nuances van de Vim-codebase en alle wijzigingen worden beheerd door één onderhouder, wat het moeilijk maakt om de editor te onderhouden en te verbeteren. In plaats van de code die in de Vim-kern is ingebouwd om de GUI te ondersteunen, stelt Neovim voor om een universele laag te gebruiken waarmee je interfaces kunt maken met behulp van verschillende toolkits.
Plug-ins voor Neovim worden gelanceerd als afzonderlijke processen, voor interactie waarbij het MessagePack-formaat wordt gebruikt. Interactie met plug-ins wordt asynchroon uitgevoerd, zonder de basiscomponenten van de editor te blokkeren. Om toegang te krijgen tot de plug-in kan een TCP-socket worden gebruikt, d.w.z. de plug-in kan op een extern systeem worden uitgevoerd. Tegelijkertijd blijft Neovim achterwaarts compatibel met Vim, blijft het Vimscript ondersteunen (Lua wordt aangeboden als alternatief) en ondersteunt het verbindingen voor de meeste standaard Vim-plug-ins. De geavanceerde functies van Neovim kunnen worden gebruikt in plug-ins die zijn gebouwd met behulp van Neovim-specifieke API's.
Momenteel zijn er ongeveer 130 specifieke plugins voorbereid, zijn bindingen beschikbaar voor het maken van plugins en het implementeren van interfaces met behulp van verschillende programmeertalen (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) en frameworks (Qt, ncurses, Node.js, Electron, GTK). Er worden verschillende opties voor de gebruikersinterface ontwikkeld. GUI-add-ons lijken veel op plug-ins. Het verschil is dat ze, in tegenstelling tot plug-ins, aanroepen van Neovim-functies initiëren, terwijl plug-ins vanuit Neovim worden aangeroepen.
Enkele wijzigingen in de nieuwe versie:
- Een ingebouwde LSP-client (Language Server Protocol) toegevoegd in Lua, die kan worden gebruikt om verbinding te maken met externe services voor analyse en code-aanvulling.
- Een API toegevoegd om het ontwerp van toewijzingsbuffers te beheren.
- Er is een API toegevoegd om uitgebreide tags te gebruiken om wijzigingen op byteniveau bij te houden.
- Uitgebreide ondersteuning voor Lua als taal voor plug-inontwikkeling en configuratiebeheer.
- Experimentele ondersteuning toegevoegd voor de tree-sitter-parseerengine.
Bron: opennet.ru
