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

Опубліковано реліз Neovim 0.6.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.

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

  • У vim-скрипти додано підтримку локальних змінних, область видимості для яких обмежена тільки поточним скриптом.
  • Значно покращено підтримку мови Lua для розробки плагінів та управління конфігурацією. У vim-скриптах додано можливість виклику Lua-функцій як методів через вказівку префікса v:lua (наприклад, «arg1->v:lua.somemod.func(arg2)»).
  • Розширено можливості вбудованого LSP-клієнта (Language Server Protocol), який можна використовувати для винесення логіки аналізу та автодоповнення коду на зовнішні сервери. Застосування LSP дозволяє використовувати більше 150 готових обробників для різних мов програмування, підготовлених для редактора Visual Studio Code.
  • Поліпшено засоби діагностики проблем у коді. Додано можливість виводу тексту діагностичних повідомлень та плаваючих вікон із кодом, пов'язаним із подібними повідомленнями. Забезпечено обробку діагностичних повідомлень, що передаються LSP-сервером.
  • Додано підтримку віртуальних рядків, які можуть використовуватися, наприклад, для виведення блоків зі службовою інформацією.
  • Внесені різні оптимізації продуктивності, наприклад, задіяна таблиця хеш для підсвічуваних імен груп.
  • Припинено підтримку Windows 7 та 32-розрядних збірок для Windows.

Джерело: opennet.ru

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