Opublikowano wydanie Neovim 0.7.0, będące odgałęzieniem edytora Vim, skupiającym się na zwiększeniu rozszerzalności i elastyczności. W ramach projektu od ponad siedmiu lat prowadzona jest przebudowa bazy kodu Vim, w wyniku czego wprowadza się zmiany upraszczające utrzymanie kodu, oferujące narzędzia do podziału pracy między kilku maintainerów, oddzielające interfejs od części podstawowej (interfejs można zmieniać bez dotykania wnętrza) oraz realizujące nową, rozszerzalną architekturę opartą na wtyczkach. Oryginalne osiągnięcia projektu są rozpowszechniane na licencji Apache 2.0, a część podstawowa na licencji Vim. Gotowe kompilacje przygotowane są dla systemów Linux (appimage), Windows i macOS.
Wśród problemów Vim, które skłoniły do stworzenia Neovim, wyróżnia się rozbudowana monolityczna baza kodu, składająca się z ponad 300 tysięcy linii kodu w języku C (C89). Wszystkie niuanse bazy kodu Vim znane są tylko nielicznym osobom, a wszystkie zmiany nadzoruje jeden maintainer, co utrudnia utrzymanie i prace nad doskonaleniem edytora. Zamiast wbudowanego w rdzeń Vim kodu wspierającego GUI, w Neovim proponuje się zastosowanie uniwersalnej warstwy, pozwalającej na tworzenie interfejsów z wykorzystaniem różnych zestawów narzędzi.
Wtyczki do Neovim uruchamiane są jako oddzielne procesy, z którymi interakcja odbywa się przy użyciu formatu MessagePack. Interakcja z wtyczkami odbywa się w trybie asynchronicznym, bez blokowania podstawowych komponentów edytora. Do komunikacji z wtyczką może być używany gniazdo TCP, co oznacza, że wtyczka może działać na zewnętrznym systemie. Przy tym Neovim pozostaje kompatybilny wstecz z Vim, nadal wspiera Vimscript (jako alternatywę oferując Lua) i wspiera połączenia większości standardowych wtyczek Vim. Rozszerzone możliwości Neovim mogą być wykorzystywane w wtyczkach zbudowanych z użyciem API specyficznego dla Neovim.
Obecnie przygotowano około 130 specyficznych wtyczek, dostępne są powiązania do tworzenia wtyczek oraz realizacji interfejsów z wykorzystaniem różnych języków programowania (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) i frameworków (Qt, ncurses, Node.js, Electron, GTK). Rozwijane są różne warianty interfejsu użytkownika. Rozszerzenia GUI w dużej mierze przypominają wtyczki, ale w odróżnieniu od wtyczek inicjują wywołanie funkcji Neovim, podczas gdy wtyczki są wywoływane z Neovim.
W nowej wersji wprowadzono początkowe wsparcie dla pracy zdalnej, które umożliwia uruchomienie Neovim na serwerze i łączenie się z nim z systemu klienckiego, używając osobnego ui_client. Wśród innych zmian: zakończono wsparcie dla Pythona 2, zezwolono na użycie funkcji Lua w keymapie, dodano nowe polecenia w API, znacznie rozszerzono możliwości wykorzystania języka Lua do tworzenia wtyczek i zarządzania konfiguracją, poprawiono narzędzia diagnostyki problemów z kodem, dodano wsparcie dla globalnego wiersza stanu, przeprowadzono optymalizacje wydajności. Rozszerzono możliwości wbudowanego klienta LSP (Language Server Protocol), który można wykorzystać do przeniesienia logiki analizy i autouzupełniania kodu do zewnętrznych serwery.
Źródło: opennet.ru
