Die Veröffentlichung von Neovim 0.7.0, einem Fork des Vim-Editors, der sich auf die Verbesserung von Erweiterbarkeit und Flexibilität konzentriert, wurde bekannt gegeben. Im Rahmen des Projekts wird die Codebasis von Vim seit über sieben Jahren überarbeitet, was zu Änderungen führt, die die Wartung des Codes erleichtern, die Arbeitsteilung zwischen mehreren Maintainern ermöglichen und die Benutzeroberfläche von der Kernkomponente trennen (die Oberfläche kann geändert werden, ohne die internen Teile zu berühren) und eine neue erweiterbare Plugin-Architektur realisieren. Die ursprünglichen Entwicklungen des Projekts werden unter der Apache 2.0-Lizenz verteilt, während der Kern unter der Vim-Lizenz steht. Fertige Builds sind für Linux (appimage), Windows und macOS verfügbar.
Zu den Problemen von Vim, die zur Schaffung von Neovim führten, gehört die aufgeblähte monolithische Codebasis, die aus mehr als 300.000 Zeilen C-Code (C89) besteht. Nur wenige Personen sind mit allen Nuancen der Vim-Codebasis vertraut, und alle Änderungen werden von einem einzigen Maintainer überwacht, was die Wartung und die Arbeit an Verbesserungen des Editors erschwert. Statt des im Kern von Vim integrierten Codes zur Unterstützung von GUIs wird in Neovim vorgeschlagen, eine universelle Schicht zu verwenden, die die Erstellung von Benutzeroberflächen mit verschiedenen Toolkits ermöglicht.
Plugins für Neovim werden als separate Prozesse ausgeführt, deren Interaktion über das MessagePack-Format erfolgt. Die Interaktion mit den Plugins erfolgt asynchron, ohne die grundlegenden Komponenten des Editors zu blockieren. Für den Zugriff auf ein Plugin kann ein TCP-Socket verwendet werden, d.h. das Plugin kann auf einem externen System ausgeführt werden. Dabei bleibt Neovim rückwärtskompatibel mit Vim, unterstützt Vimscript (als Alternative wird Lua angeboten) und unterstützt die Verbindung der meisten nativen Vim-Plugins. Die erweiterten Funktionen von Neovim können in Plugins genutzt werden, die unter Verwendung der spezifischen API für Neovim erstellt wurden.
Derzeit sind bereits etwa 130 spezifische Plugins vorbereitet, Bindings zur Erstellung von Plugins und Implementierungen von Schnittstellen unter Verwendung verschiedener Programmiersprachen (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) und Frameworks (Qt, ncurses, Node.js, Electron, GTK) verfügbar. Es werden mehrere Varianten der Benutzeroberfläche entwickelt. GUI-Erweiterungen ähneln in vielerlei Hinsicht Plugins, aber im Gegensatz zu Plugins initiieren sie den Aufruf von Funktionen in Neovim, während Plugins aus Neovim aufgerufen werden.
In der neuen Version wird eine anfängliche Unterstützung für die Remote-Arbeit angeboten, die es ermöglicht, Neovim auf Server zu starten und sich von einem Client-System aus mit ihm zu verbinden, indem ein separater ui_client verwendet wird. Zu den weiteren Änderungen gehört: die Unterstützung von Python 2 wurde eingestellt, die Verwendung von Lua-Funktionen im keymap erlaubt, neue Befehle im API hinzugefügt, die Möglichkeiten zur Verwendung von Lua für die Entwicklung von Plugins und zur Verwaltung der Konfiguration erheblich erweitert, die Diagnosewerkzeuge für Probleme im Code verbessert, Unterstützung für eine globale Statuszeile hinzugefügt und Leistungsoptimierungen vorgenommen. Die Möglichkeiten des integrierten LSP-Clients (Language Server Protocol) wurden erweitert, der zur Auslagerung der Analyse- und Codevervollständigungslogik auf externe Server.
Quelle: opennet.ru
