Открыть сервис

Neovim — форк текстового редактора Vim

Neovim — свободный текстовый редактор, форк (ответвление) программы Vim, созданный с целью модернизации кодовой базы, улучшения расширяемости и упрощения сопровождения проекта. Первый публичный релиз состоялся в 2014 году, а стабильная версия 0.1 вышла в январе 2016-го. Neovim сохраняет полную совместимость с командами и конфигурацией Vim, но предлагает архитектурные изменения, ориентированные на интеграцию с современными инструментами разработки.

История

Проект Neovim был анонсирован в 2014 году разработчиком под псевдонимом Thiago de Arruda. Основной мотивацией стало недовольство состоянием кодовой базы Vim, которая накапливала технический долг с 1990-х годов. Ключевыми целями были заявлены: рефакторинг исходного кода для упрощения поддержки, перенос части функциональности (например, встроенного терминала) в отдельные процессы, а также создание API для внешних плагинов. Проект быстро привлек внимание сообщества, а финансирование началось через краудфандинговую кампанию на Kickstarter, собравшую более 30 тысяч долларов.

В 2015 году к разработке подключился Джастин М. Кейс (известный как justinmk), который стал ведущим мейнтейнером. Под его руководством проект перешел к регулярным релизам. Версия 0.2 (2017) добавила встроенную поддержку внешнего терминала и асинхронный ввод-вывод, версия 0.3 (2018) — встроенный эмулятор терминала и поддержку Lua. Начиная с версии 0.4 (2019) и особенно 0.5 (2021), Lua стала первым классом языков для написания конфигурации и плагинов, что стало ключевым отличием от Vim.

Архитектура и ключевые отличия от Vim

Основное различие между Neovim и Vim лежит в архитектуре. Vim использует однопоточную модель, где все операции (включая выполнение плагинов) блокируют интерфейс. Neovim изначально проектировался с учетом асинхронности и модульности.

Многопроцессная модель и API

Neovim разделяет ядро редактора и интерфейс пользователя. Управление осуществляется через удаленный API (Remote Procedure Call, RPC), что позволяет создавать графические оболочки (frontend) на любых языках программирования, не изменяя ядро. Благодаря этому существуют такие интерфейсы, как Neovim-qt, Goneovim и Firenvim (встраивание редактора в браузер). Это же API позволяет подключать редактор к интегрированным средам разработки (IDE) в качестве внутреннего движка.

Встроенный эмулятор терминала

Начиная с версии 0.2, Neovim включает полноценный эмулятор терминала, который запускается внутри окна редактора (команда :terminal). В отличие от Vim, где для этого требовались внешние плагины или хакерские приемы, здесь терминал является частью ядра, поддерживает асинхронный вывод и взаимодействует с буферами.

Поддержка Lua

С версии 0.5 Lua является встроенным языком сценариев. Пользователи могут писать конфигурационные файлы (init.lua) и плагины на Lua, который работает быстрее и считается более удобным для современной разработки, чем встроенный язык Vimscript. При этом полная обратная совместимость с Vimscript сохранена: старые конфигурации (.vimrc) и плагины продолжают работать. В версии 0.10 (2024) была представлена библиотека vim.lpeg для написания грамматик, а также улучшена интеграция Lua с деревьями разбора.

Основные возможности

Neovim унаследовал все базовые возможности Vim: модальный интерфейс (режимы вставки, нормальный, визуальный), мощный поиск с регулярными выражениями, макросы, работу с несколькими буферами и окнами, а также систему регистров. К дополнительным возможностям, появившимся в самом Neovim, относятся:

  • Встроенный менеджер пакетов — начиная с версии 0.5, плагины можно устанавливать через стандартный механизм packer (не путать с одноименным сторонним менеджером), который загружает их из репозиториев.
  • Поддержка деревьев разбора (Tree-sitter) — интеграция библиотеки Tree-sitter позволяет осуществлять синтаксический анализ кода с высокой скоростью, что улучшает подсветку синтаксиса, навигацию по структуре кода и рефакторинг. Эта возможность стала стабильной в версии 0.10.
  • Встроенный язык запросов (LSP) — реализован клиент Language Server Protocol (LSP), позволяющий подключать внешние серверы для автодополнения, диагностики, переходов к определениям и других функций, аналогичных IDE.
  • Асинхронные плагины — плагины могут выполнять длительные операции (например, проверку синтаксиса или фоновую сборку) без блокировки ввода.
  • Работа с буфером обмена — улучшена интеграция с системным буфером обмена на всех операционных системах.

Конфигурация и экосистема

Традиционно Vim настраивается через файл .vimrc на языке Vimscript. Neovim поддерживает этот формат, но предлагает альтернативу — файл init.lua, который выполняется интерпретатором Lua. Конфигурация на Lua считается более читаемой и модульной. Многие пользователи полностью переписывают свои конфигурации на Lua, используя сторонние менеджеры плагинов, такие как Packer.nvim, lazy.nvim или folke/lazy.

Экосистема плагинов Neovim активно развивается. Популярные проекты включают Telescope.nvim (нечеткий поиск по файлам и содержимому), nvim-treesitter (обертка для Tree-sitter), nvim-lspconfig (упрощенная настройка LSP-серверов), а также множество тем оформления. Благодаря API, многие плагины, написанные для Vim, работают в Neovim без изменений, хотя обратная совместимость (плагины Neovim в Vim) часто отсутствует.

Использование и распространение

Neovim доступен для основных операционных систем: Linux, macOS, Windows и BSD. Он распространяется под лицензией Apache 2.0 (в отличие от Vim, который использует собственную лицензию, совместимую с GPL). Редактор устанавливается через стандартные менеджеры пакетов (например, apt, brew, choco) или поставляется в виде портативных сборок.

Neovim часто используется разработчиками, предпочитающими клавиатурное управление и высокую скорость работы. Он популярен в среде веб-разработки, системного администрирования и при работе с удаленными серверами через SSH. Благодаря поддержке LSP и Tree-sitter, Neovim способен конкурировать с полноценными IDE для многих задач, оставаясь при этом легковесным и быстрым.

Критика и ограничения

Несмотря на популярность, Neovim подвергается критике за сложность первоначальной настройки. Новичкам требуется изучение модального редактирования и написание конфигурации, что создает высокий порог входа. Также отмечается, что часть плагинов, написанных для Vim, может работать некорректно из-за различий в API, хотя с каждым годом таких случаев становится меньше. Некоторые пользователи считают, что развитие Neovim происходит слишком быстро, что приводит к частой ломке обратной совместимости в конфигурациях.

См. также

  • Vim
  • Текстовый редактор
  • Lua

Источники

  • Официальная документация Neovim (neovim.io)
  • Репозиторий проекта на GitHub (neovim/neovim)
  • Статья «Neovim: A fork of Vim» в блоге проекта (2014)
  • Материалы конференции Vimconf (2018–2024)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →