Випуск Neovim 0.7.0, модернізованого варіанта редактора Vim

Опубліковано реліз Neovim 0.7.0, відгалуження від редактора Vim, сфокусованого на підвищенні розширюваності та гнучкості. У рамках проекту вже більше семи років проводиться переробка кодової бази Vim, в результаті якої вносяться зміни, що спрощують супровід коду, надають засоби поділу праці між декількома мейнтейнерами, що відокремлюють інтерфейс від базової частини (інтерфейс можна змінювати не чіпаючи нутрощі) і реалізують нову архітектуру, що розширюється. основі плагінів. Оригінальні розробки проекту поширюються під ліцензією Apache 2.0, а базова частина під ліцензією Vim. Готові збирання підготовлені для Linux (appimage), Windows та macOS.

З проблем Vim, що спонукали до створення Neovim, відзначається роздута монолітна кодова база, що складається з понад 300 тисяч рядків коду мовою Сі (C89). У всіх нюансах кодової бази Vim розбирається лише кілька людей, а всі зміни контролює один мейнтейнер, що ускладнює супровід та роботу над удосконаленням редактора. Замість вбудованого в ядро ​​Vim коду для підтримки GUI в Neovim пропонується використовувати універсальний прошарок, що дозволяє створювати інтерфейси з використанням різних тулкітів.

Плагіни до Neovim запускаються як окремі процеси для взаємодії з якими використовується формат MessagePack. Взаємодія з плагінами проводиться в асинхронному режимі без блокування базових компонентів редактора. Для звернення до плагіна можна використовувати TCP-сокет, тобто. плагін може запускатися на зовнішній системі. При цьому Neovim залишається назад сумісним з Vim, продовжує підтримувати Vimscript (як альтернатива пропонується Lua) і підтримує підключення більшості штатних плагінів Vim. Розширені можливості Neovim можуть бути використані в плагінах, побудованих з використанням API, специфічного для Neovim.

В даний час вже підготовлено близько 130 специфічних плагінів, доступні біндинги для створення плагінів та реалізацій інтерфейсів з використанням різних мов програмування (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) та фреймворків (Qt, ncurses, Node .js, Electron, GTK). Розвивається кілька варіантів інтерфейсу користувача. GUI-надбудови багато в чому нагадують плагіни, але, на відміну плагінів, вони ініціюють виклик функцій Neovim, тоді як плагіни викликаються з Neovim.

У новій версії запропоновано початкову підтримку віддаленої роботи, що дозволяє запустити Neovim на сервері та підключатися до нього з клієнтської системи, використовуючи окремий ui_client. Серед інших змін: припинено підтримку Python 2, дозволено використання Lua-функцій у keymap, додано нові команди в API, значно розширено можливості з використання мови Lua для розробки плагінів та управління конфігурацією, покращено засоби діагностики проблем у коді, додано підтримку глобального рядка стану, проведено оптимізацію продуктивності. Розширено можливості вбудованого LSP-клієнта (Language Server Protocol), який можна використовувати для винесення логіки аналізу та автодоповнення коду на зовнішні сервери.

Джерело: opennet.ru

Додати коментар або відгук