Из проблем Vim, побудивших к созданию Neovim, отмечается раздутая монолитная кодовая база, состоящая более чем из 300 тысяч строк кода на языке Си (C89). Во всех нюансах кодовой базы Vim разбирается всего несколько человек, а все изменения контролирует один мэйнтейнер, что затрудняет сопровождение и работу над усовершенствованием редактора. Вместо встроенного в ядро Vim кода для поддержки GUI в Neovim предлагается использовать универсальную прослойку, позволяющую создавать интерфейсы с использованием различных тулкитов.
Плагины к Neovim запускаются как отдельные процессы, для взаимодействия с которыми используется формат MessagePack. Взаимодействие с плагинами производится в асинхронном режиме, без блокирования базовых компонентов редактора. Для обращения к плагину может использоваться TCP-сокет, т.е. плагин может запускаться на внешней системе. При этом Neovim остаётся обратно совместимым с Vim, продолжает поддерживать Vimscript (в качестве альтернативы предлагается Lua) и поддерживает подключения большинства штатных плагинов Vim. Расширенные возможности Neovim могут быть использованы в плагинах, построенных с использованием API, специфичного для Neovim.
За время существования проекта подготовлено более тысячи специфичных плагинов, доступны биндинги для создания плагинов и реализаций интерфейсов с использованием различных языков программирования (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) и фреймворков (Qt, ncurses, Node.js, Electron, GTK). Развивается несколько вариантов пользовательского интерфейса. GUI-надстройки во многом напоминают плагины, но, в отличие от плагинов, они инициируют вызов функций Neovim, в то время как плагины вызываются из Neovim.
Среди изменений в новой версии:
- По умолчанию предложена новая цветовая схема, в которой уменьшена яркость, задействованы более сбалансированные сочетания цветов и решены проблемы, возникающие у людей с отклонениями цветовосприятия.
- Изменены привязки клавиш: «K» — при включении LSP-клиента показывает информацию о функции и переменной, на которые указывает курсор, «[d» и «]d» — перемещение по диагностическим сообщениям, ‹C-W›d — вывод дополнительной информации о диагностическом сообщении.
- Встроена функциональность плагина vim-commentary для быстрого обрамления символами комментария строк и блоков с кодом, учитывая контекст (например, для содержимого тега ‹script› будут использоваться символы «//», а для HTML — «‹!—» «—›»
- Добавлена опция ‘termsync’, включающая режим синхронизированного вывода, при котором для устранения мерцания и разрывов на экране осуществляется накопление обновлений интерфейса и их отображение в терминале одной порцией.
- Для записи в системный буфер обмена задействована escape-последовательность «OSC 52«, если работа осуществляется в сеансе SSH, не включена настройка ‘clipboard’ и имеется эмулятор терминала, поддерживающий «OSC 52».
- Добавлена экспериментальная поддержка оформления гиперссылок при помощи escape-последовательности OSC 8. По умолчанию данная возможность применяется для выделения ссылок в документах Markdown, оформленных в виде «[example](https://example.com)».
- Обеспечено автоматическое определение поддержки терминалом 24-разрядного представления цветов («truecolor»).
- При использовании LSP (Language Server Protocol) обеспечен вывод подсказок по месту, в виде виртуального текста, показываемого другим цветом прямо в коде, но без фактического добавления в исходные тексты (на скриншоте подсказки отображаются тёмно серым цветом).
- Расширены возможности для инспектирования синтаксического дерева исходного кода. Добавлен интерактивный режим написания запросов к синтаксическому дереву, на лету применяемых к текущему коду.
- Добавлена возможность указания модификаторов в команде «:terminal», например, «:botright terminal» для открытия нового окна терминала в нижней правой части экрана.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61195