Neovim 0.5 is available, a modernized version of the Vim editor

After almost two years of development, Neovim 0.5 has been released, a fork of the Vim editor focused on increasing extensibility and flexibility. The project has been reworking the Vim code base for more than seven years, as a result of which changes are made that simplify code maintenance, provide a means of dividing labor between several maintainers, separate the interface from the base part (the interface can be changed without touching the internals) and implement a new extensible architecture on based on plugins. The original developments of the project are distributed under the Apache 2.0 license, and the basic part is distributed under the Vim license.

One of the Vim problems that prompted the creation of Neovim is a bloated, monolithic codebase of over 300 lines of C code (C89). Only a few people understand all the nuances of the Vim codebase, and all changes are controlled by one maintainer, which makes it difficult to maintain and work on improving the editor. Instead of the code built into the Vim core to support the GUI, Neovim proposes to use a universal layer that allows you to create interfaces using various toolkits.

Plugins for Neovim are launched as separate processes, for interaction with which the MessagePack format is used. Interaction with plug-ins is performed in asynchronous mode, without blocking the basic components of the editor. A TCP socket can be used to access the plugin, i.e. the plugin can run on an external system. At the same time, Neovim remains backwards compatible with Vim, continues to support Vimscript (Lua is offered as an alternative) and supports the connection of most regular Vim plugins. The advanced features of Neovim can be used in plugins built using the Neovim-specific API.

Currently, about 130 specific plugins have already been prepared, bindings are available for creating plugins and implementing interfaces using various programming languages ​​(C ++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) and frameworks (Qt, ncurses, Node .js, Electron, GTK). Several user interface options are being developed. GUI add-ons are similar to plugins in many ways, but unlike plugins, they initiate calls to Neovim functions, while plugins are called from within Neovim.

Some of the changes in the new version:

  • Added a built-in LSP client (Language Server Protocol) in Lua, which can be used to connect to external services for analysis and code completion.
  • Added an API to control the design of allocation buffers.
  • Added an API to use extended tags to track changes at the byte level.
  • Expanded support for Lua as a language for plugin development and configuration management.
  • Added experimental support for the tree-sitter parsing engine.

Source: opennet.ru

Add a comment