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 at :help vim-differences.
If you are interested in contributing to Neovim, read CONTRIBUTING.md to get started. 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!
New contributor shoutout: @ckelsel has been responsible for porting a large number of vim patches, as has @lonerover. Thank you!
Old contributor shoutout: @oni-link isn’t a name you read a lot in the commit logs, but he’s been very helpful in reviewing changes and improving complicated PR’s for quite some time. Thank you!
The last newsletter has gathered some dust, so we want to bring you up-to-date in the Neovim world.
Neovim has had 3(!) releases since back then, so let us recap those first and foremost:
This release brings a host of fixes and improvements. We’ll look at some of them closer below, but be sure to also check out the release page for all the gory details.
:terminal
mode is available in 0.2.1, see below!curl.exe
.:terminal
has seen various improvements (@justinmk, #6185)
findfile()
, :find
and gf
now work in :terminal
buffers (@tweekmonster, #6009):term
(@friedsock, #4504)Reading from stdin
was removed (@msva, #6298)guicursor
now works in the TUI (@teto, #6423)Whitespace
for whitespace-related listchars
(@zhou13, #6367)DirChanged
is now available for autocommands (@mhinz, #5928)cpoptions
: Use the _
flag to toggle cw
behaviour (@raichoo, @chrisbra, #6235)CTRL-R
now omits trailing ^M
when pasting to the commandline (@justinmk, #6137):edit
filenames without escaping whitespaces (@Kurt-Bonatz, #6119)writefile
now obeys the fsync
option (@ZyX-I, #6427)eval.c
has been refactored and error messages were improved (@ZyX-I, #5119)id
function is now available, and printf(%p)
is finally useful (@ZyX-I, #6095)g:loaded_*
exists (@justinmk, commit)setpos
can now set lowercase marks in other buffers (@hardenedapple, #5753)v:exiting
to see if Neovim is exiting (@mhinz, #5651)Next let’s see what happened in 0.2.1. As before, check out the release notes for details.
:Tutor
have been made (@fmoralesc, #7028)inccommand
now works with leading modifiers like keeppattern
(@jamessan, #6967):cquit
now takes an optional error code as argument (@joshleeb, #7336):checkhealth
is a builtin now, and validates your $VIMRUNTIME
(@justinmk, #7399)cursorcolumn
and colorcolumn
respect syntax highlighting (@zhou13, @justinmk, #7364)get_keymap
(@tjdevries, #6236)using nvim_get_hl_by_name/by_id
(@teto, #7082)bufhl
can now be used to create new highlighting groups (@bfredl, #7414)menu_get
(@teto, #6322)
menu_get
pretty-prints special chars, making it possible to feed its results back into e.g. nvim_input
(@teto, @KillTheMule, #7340)sockconnect
(@bfredl, #6594)serverstart
now uses uv_getaddrinfo()
, bringing IPv6 support (@mhinz, #6680):execute
call (@ZyX-I, #6914)This is a fast-and-furious containing mostly bug-fixes. See the release-notes for details. Some new features are in, too:
curdir
has been added as a viewoption (@EricR86, #7447):checkhealth
now also validates the runtimepath (@justinmk, #7526)scrollback
now defaults to 10000 (@justinmk, #7556)Want to know what to expect from the next release? Here’s a list to whet your appetite:
CmdlineEnter
and CmdlineLeave
autocommands (@bfredl, #7422)For an overview of planned features, goals and ideas for Neovim head to the road map. Some noteworthy upcoming PRs are:
PSA: If you build Neovim from the latest master, always check Following HEAD for any changes.
The wiki page of related projects has seen quite some additions, check out the full changes here.
API clients are at the heart of Neovim’s architecture, and significantly improve developer experience. Write a plugin in any language you want! Since the last newsletter, we’ve seen the addition of another C++ client, one for Elixir, and a Racket client. The node client got an overhaul and a new maintainer. Thanks @billyvg for taking over! While not totally new, a special shoutout goes to the ruby client for being very well-maintained. Thanks, @alexgenco!
If you happen to prefer a language not yet listed, a good starting point are the docs, and be sure to come talk about it on the gitter channel.
Too much activity has happened on the GUI front to list all new clients, so let’s just have a look at some that stand out. VSCode is using Neovim to properly integrate ex-mode commands, and Sublime Text 3 gained full Neovim integration. The latter also makes use of another cool Neovim-specific feature, the externalized popupmenu, and it only took them 50 LOC. Last but not least, eovim is an enlightenment client for Neovim.
Some students have studied the Architecture of Neovim and published an “analytical essay” about their findings. Be sure to have a look if you are interested in the bigger picture.
Drew Neil of vimcasts fame has started recording casts about Neovim, and began work on a successor to his praised book Practical Vim called Modern Vim. Most of the book will be suitable for Vim 8 and Neovim users, but about 1/3rd of the book will cover Neovim-specific functionality.
One of the founding stones of Neovim has been porting I/O to libuv. So you will be happy to hear that libuv has set out to support more platforms. Neovim, soon coming to a platform near you!
Neovim offers easy testing via the wonderfully simple Lua language. Why aren’t others doing it, you ask? Turns out, they do, or at least, the neomutt project is preparing for it. Very nice to see ideas from Neovim taken up.
Changes lines since the last newsletter:
git log --since="2016-11-01" --numstat --pretty=tformat: --numstat|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 255393 removed lines: 221106 total lines: 34287
Merged commits:
git log --since="2016-11-01"|wc -l
3110
Different commit authors:
git shortlog -e -s -n --since="2016-11-01"|wc -l
146
Documentation changes:
git log --since="2016-11-01" --numstat --pretty=tformat: --numstat runtime/doc|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 8579 removed lines: 6577 total lines: 2002
Thank you contributors, sponsors, bug-reporters, supporters. Thank you @justinmk for the awesome project and thank you @brammool for your foundational work.
@brammool and @chrisbra from the vim team have left a few comments on our issue tracker, it’s nice to be working together!
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.