Dostępny jest Neovim 0.5, unowocześniona wersja edytora Vima

Po prawie dwóch latach rozwoju wydano Neovim 0.5, rozwidlenie edytora Vima skupione na zwiększeniu rozszerzalności i elastyczności. W projekcie od ponad siedmiu lat przerabia się bazę kodu Vima, w wyniku czego wprowadzane są zmiany upraszczające utrzymanie kodu, umożliwiające podział pracy pomiędzy kilku opiekunów, oddzielające interfejs od części bazowej (interfejs może być zmienione bez dotykania elementów wewnętrznych) i wdrożyć nową rozszerzalną architekturę opartą na wtyczkach. Oryginalne rozwinięcia projektu są dystrybuowane na licencji Apache 2.0, a podstawowa część jest dystrybuowana na licencji Vima.

Jednym z problemów z Vimem, który skłonił do stworzenia Neovima, była jego rozdęta, monolityczna baza kodu, składająca się z ponad 300 tysięcy linii kodu C (C89). Tylko kilka osób rozumie wszystkie niuanse bazy kodu Vima, a wszystkimi zmianami steruje jeden opiekun, co utrudnia utrzymanie i ulepszanie edytora. Zamiast kodu wbudowanego w rdzeń Vima obsługującego GUI, Neovim proponuje zastosowanie uniwersalnej warstwy, która pozwala na tworzenie interfejsów przy użyciu różnych zestawów narzędzi.

Wtyczki do Neovima są uruchamiane jako osobne procesy, do interakcji z którymi używany jest format MessagePack. Interakcja z wtyczkami odbywa się asynchronicznie, bez blokowania podstawowych komponentów edytora. Aby uzyskać dostęp do wtyczki można wykorzystać gniazdo TCP, tj. wtyczkę można uruchomić na systemie zewnętrznym. Jednocześnie Neovim pozostaje wstecznie kompatybilny z Vimem, nadal obsługuje Vimscript (jako alternatywa oferowana jest Lua) i obsługuje połączenia dla większości standardowych wtyczek Vima. Zaawansowanych funkcji Neovima można używać we wtyczkach zbudowanych przy użyciu interfejsów API specyficznych dla Neovima.

Obecnie przygotowano już około 130 konkretnych wtyczek, dostępne są powiązania umożliwiające tworzenie wtyczek i implementację 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). Opracowywanych jest kilka opcji interfejsu użytkownika. Dodatki GUI są bardzo podobne do wtyczek, ale w przeciwieństwie do wtyczek inicjują wywołania funkcji Neovima, podczas gdy wtyczki są wywoływane z poziomu Neovima.

Niektóre zmiany w nowej wersji:

  • Dodano wbudowanego klienta LSP (Language Server Protocol) w Lua, którego można używać do łączenia się z usługami zewnętrznymi w celu analizy i uzupełniania kodu.
  • Dodano interfejs API do kontrolowania projektu buforów alokacji.
  • Dodano interfejs API umożliwiający wykorzystanie rozszerzonych tagów do śledzenia zmian na poziomie bajtu.
  • Rozszerzona obsługa Lua jako języka do tworzenia wtyczek i zarządzania konfiguracją.
  • Dodano eksperymentalne wsparcie dla silnika analizującego drzewo.

Źródło: opennet.ru

Dodaj komentarz