Neovim is a fork of the venerable text-editor vim, focused on extensibility and usability. It is not a rewrite but a continuation and extension of Vim. Many clones and derivatives exist, some very clever—but none are Vim. Neovim is built for users who want the good parts of Vim, and more. See a list of differences via :help vim-differences.
If you are interested in contributing to Neovim, visit the github page for details. We have a great test suite and automated CI, so you can just jump in and have a go. Don’t be afraid to open a PR to get comments or just take advantage of the infrastructure!
To get in touch with the team, join the gitter channel (also accessible via IRC), or visit the Neovim subreddit, which many of the developers read. Taking part in conversations is a contribution, too!
The last newsletter covered the release of Neovim v0.3.0, it is now time to do the same thing with the most exciting Neovim release that happened since then: v0.4.4!
Neovim started detecting the background color of the terminal for xterm-compatible terminals (@joshtriplett, #9509)
The 'maxcombine'
option has been removed, it now always default to 6 (@bfredl, #7992)
The 'fillchars'
setting now has an eob
option, letting users configure the character used to represent lines after the end of a buffer (previously hardcoded to ~
) (@FriedSock, #8546)
F
has been added to the default 'shortmess'
option and S
has been removed (@justinmk, #8619, #10136)
The CursorLine
type will now be smarter: if its foreground color is not set, the text of the CursorLine
will use the CursorLine
’s background color and default syntax highlighting colors as foreground (@zhou13, #8578).
The terminal UI can now support undercurl and colored underline, provided that your terminal has support for that (@blueyed, #9052).
Neovim’s 'background'
setting now defaults to dark
to get a consistent setting across platforms (@justinmk, #9205).
'fillchars'
and 'listchars'
now are window-local options (@mhinz, #9539).
The popupmenu can now be made (pseudo) transparent (@bfredl, #9571).
Floating windows! This enables all kinds of useful features, such as big clocks (@bfredl, @dzhou121, #6619)
Autocommands now have a ++once
modifier to let them execute only once (@justinmk, #9706)
A new autocommand event named CompleteChanged
has been implemented (@chemzqm, #9616)
Vim’s TermDebug plugin has been ported to neovim (@kwon-young, #8364).
The wildmenu can now be turned into a popup menu with wildoptions=pum
(@bfredl, #9607). In fact, that’s the default!
There now are two events triggered when a UI connects to and disconnects from Neovim: UIEnter and UILeave (@equalsraf, #6917).
There also are TermEnter
and TermLeave
autocommands triggered when entering/leaving a terminal (usama54321, #8550).
ext_hlstate
extension allows semantic identification of builtin and syntax highlights (@bfredl, #8221).ext_linegrid
extension sends more gradual screen updates for improved performance (@bfredl, #9064).ext_multigrid
extension introduces the concept of a “grid” which is just a rendering surface (@bfredl, @UtkarshMe #8455).ext_messages
extension enables UIs to provide an external command line (@bfredl, @dzhou121 #7466)ext_popupmenu
makes neovim send information about its popup menu (@bfredl #9607).nvim_buf_get_offset
: returns the byte offset of a line (@bfredl, #9180)nvim_buf_is_loaded
: checks if a buffer is loaded (@phodge, #7688).nvim_create_buf
: create a new buffer (@bredl, #9272)nvim_get_context
/nvim_load_context
: explore and restore the editor’s state (@justinmk, #10619.nvim_input_mouse
: perform mouse actions (@bfredl, #9429).nvim_open_win
: creating floating external windowsnvim_set_keymap
: sets a global mapping for a mode (@yilin-yang, #9224).nvim_win_close
: close a window (@bfredl, #9667).nvim_win_set_buf
: sets the current buffer of a window (@justinmk, #9100)nvim_win_set_config
: configure the layout of a window (@mhinz, #9626).Neovim now always waits for a UI when launched with –embed, unless –headless is also supplied (@bfredl, #9024).
vim.loop
(@zhaozg, @andreypopp, #10123).Neovim contributors have been hard at work and added a lot of new features to v0.5.0 like an LSP client written in Lua and TreeSitter integration. The next Neovim release promises to be fascinating!
The wiki page of related projects is an evergrowing list of projects that somehow make use of Neovim’s extended capabilities. Here’s a gist of additions since the last newsletter:
The following plugins have found their way into our wiki:
Plenty of new API clients:
The python client also has been renamed to “pynvim”.
Maybe 2018/2019 weren’t the years of the Linux desktop, but they sure were the years of the Neovim GUI:
Some posts that talk specifically about Neovim things:
Changed lines since the last newsletter:
git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 168844 removed lines: 75466 total lines: 93378
Merged commits:
git log v0.3.0..v0.4.4 --pretty=oneline | wc -l
3477
Different commit authors:
git shortlog -e -s -n v0.3.0..v0.4.4 | wc -l
164
Documentation changes:
git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat runtime/doc | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 9226 removed lines: 7002 total lines: 2224
Thank you contributors, sponsors, bug-reporters, supporters. Note that you can now sponsor neovim via github Sponsors or on OpenCollective. Thank you @justinmk for the awesome project and thank you @brammool for your foundational work.
Find more updates in the news archive. There's also an RSS feed.
Neovim is a Vim-based text editor engineered for extensibility and usability, to encourage new applications and contributions.
Visit #neovim:matrix.org or #neovim on irc.libera.chat to chat with the team.