È stata pubblicata la versione Neovim 0.7.0, un fork dell'editor Vim, focalizzato sul miglioramento dell'estensibilità e della flessibilità. Il progetto è in fase di ristrutturazione della base del codice di Vim da oltre sette anni, introducendo modifiche che semplificano la manutenzione del codice, forniscono strumenti per la divisione del lavoro tra più manutentori, separano l'interfaccia dalla parte fondamentale (l'interfaccia può essere modificata senza toccare l'interno) e implementano una nuova architettura estensibile basata su plugin. I materiali originali del progetto sono distribuiti con licenza Apache 2.0, mentre la parte fondamentale è sotto licenza Vim. Le versioni pronte sono disponibili per Linux (appimage), Windows e macOS.
Tra i problemi di Vim che hanno portato alla creazione di Neovim, si segnala una base di codice monolitica e gonfiata, composta da oltre 300.000 righe di codice in C (C89). Solo poche persone conoscono tutti i dettagli della base di codice di Vim, e tutte le modifiche sono controllate da un unico maintainer, il che rende difficile il supporto e il miglioramento dell'editor. Invece del codice integrato nel core di Vim per il supporto GUI, Neovim propone di utilizzare un'interfaccia universale che consente di creare interfacce con vari toolkit.
I plugin per Neovim vengono eseguiti come processi separati, interagendo tramite il formato MessagePack. L'interazione con i plugin avviene in modo asincrono, senza bloccare i componenti fondamentali dell'editor. Per accedere a un plugin può essere utilizzato un socket TCP, ovvero il plugin può essere eseguito su un sistema esterno. Neovim rimane comunque compatibile con Vim, continua a sostenere Vimscript (con Lua come alternativa) e supporta le connessioni per la maggior parte dei plugin standard di Vim. Le funzionalità avanzate di Neovim possono essere utilizzate nei plugin costruiti con API specifiche per Neovim.
Attualmente sono disponibili circa 130 plugin specifici, con binding per la creazione di plugin e implementazioni di interfacce utilizzando vari linguaggi di programmazione (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) e framework (Qt, ncurses, Node.js, Electron, GTK). Stanno evolvendo diverse opzioni di interfaccia utente. Le estensioni GUI sono simili ai plugin, ma a differenza dei plugin, esse iniziano la chiamata delle funzioni di Neovim, mentre i plugin sono chiamati da Neovim.
Nella nuova versione è stata proposta un'iniziale supporto per il lavoro remoto, consentendo di avviare Neovim su server e connettersi a esso dal sistema client utilizzando un ui_client separato. Tra le altre modifiche: interrotta la supporto per Python 2, consentito l'uso di funzioni Lua in keymap, aggiunte nuove comandi nell'API, ampliate notevolmente le possibilità di utilizzo del linguaggio Lua per lo sviluppo di plugin e gestione della configurazione, migliorati gli strumenti di diagnosi dei problemi nel codice, aggiunto il supporto per la stringa di stato globale, eseguite ottimizzazioni delle prestazioni. Ampliate le capacità del client LSP integrato (Language Server Protocol), che può essere utilizzato per esternalizzare la logica di analisi e completamento automatico del codice. server.
Fonte: opennet.ru
