A fost publicat release-ul Neovim 0.7.0, o ramură a editorului Vim, care se concentrează pe creșterea extinsibilității și flexibilității. Proiectul este în curs de reproiectare a codului din Vim de mai bine de șapte ani, rezultând modificări care simplifică întreținerea codului, oferă instrumente pentru cooperarea între mai mulți mentenanți, separă interfața de partea de bază (interfața poate fi schimbată fără a afecta interioul) și implementează o nouă arhitectură extensibilă bazată pe plugin-uri. Lucrările originale ale proiectului sunt distribuite sub licența Apache 2.0, iar partea de bază sub licența Vim. Versiunile finalizate sunt pregătite pentru Linux (appimage), Windows și macOS.
Problemele Vim care au condus la crearea Neovim includ o bază de cod monolitică, umflată, care conține mai mult de 300.000 de linii de cod în C (C89). Toată complexitatea bazei de cod Vim este cunoscută de doar câțiva oameni, iar toate modificările sunt controlate de un singur mentă, ceea ce complică întreținerea și munca de îmbunătățire a editorului. În locul codului încorporat în nucleul Vim pentru suportul GUI, Neovim propune utilizarea unei interfețe universale, care permite crearea de interfețe folosind diverse toolkite.
Plugin-urile pentru Neovim rulează ca procese separate, interacțiunea cu acestea folosind formatul MessagePack. Interacțiunea cu plugin-urile se desfășoară în mod asincron, fără a bloca componentele de bază ale editorului. Pentru a apela un plugin poate fi utilizat un socket TCP, adică plugin-ul poate fi rulat pe un sistem extern. În același timp, Neovim rămâne compatibil înapoi cu Vim, continuă să suporte Vimscript (ca alternativă, se propune Lua) și acceptă majoritatea plugin-urilor standard din Vim. Funcționalitățile extinse ale Neovim pot fi folosite în plugin-uri construite cu ajutorul API-ului specific pentru Neovim.
În prezent, au fost pregătite aproximativ 130 de plugin-uri specifice, sunt disponibile legături pentru crearea plugin-urilor și implementarea interfețelor folosind diverse limbaje de programare (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) și framework-uri (Qt, ncurses, Node.js, Electron, GTK). Se dezvoltă mai multe opțiuni de interfață utilizator. Supraecranările GUI seamănă foarte mult cu plugin-urile, dar, spre deosebire de plugin-uri, ele inițiază apeluri de funcții Neovim, în timp ce plugin-urile sunt apelate din Neovim.
Noua versiune oferă suport inițial pentru lucrul la distanță, permițând rularea Neovim pe server și conectarea la acesta dintr-un sistem client, folosind un ui_client separat. Printre alte modificări: suportul pentru Python 2 a fost oprit, utilizarea funcțiilor Lua în keymap este permisă, au fost adăugate comenzi noi în API, s-au extins semnificativ capacitățile de utilizare a limbajului Lua pentru dezvoltarea plugin-urilor și gestionarea configurației, au fost îmbunătățite instrumentele de diagnosticare a problemelor în cod, a fost adăugat suport pentru o linie de stare globală, și s-au realizat optimizări de performanță. Capacitățile clientului LSP încorporat (Protocolul Serverului de Limbaj) au fost extinse, acesta putând fi utilizat pentru externalizarea logicii de analiză și completare automată a codului. servere.
Sursa: opennet.ro
