Доступний Neovim 0.5, модернізований варіант редактора Vim

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

З проблем 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.

Деякі зміни в новій версії:

  • Доданий вбудований LSP-клієнт (Language Server Protocol) мовою Lua, яку можна використовувати для підключення до зовнішніх сервісів для аналізу та автодоповнення коду.
  • Доданий API для керування оформленням буферів виділення.
  • Доданий API для використання розширених міток, що дозволяють відстежувати зміни на рівні окремих байтів.
  • Розширена підтримка Lua, як мови для розробки плагінів та керування конфігурацією.
  • Додана експериментальна підтримка двигуна аналізу синтаксису tree-sitter.

Джерело: opennet.ru

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