Welcome to the third (and delayed) newsletter for Neovim, the project that aims to overhaul the Vim codebase.
The next newsletter will be coming out near the beginning of November. It has changed to be every other month as to not overload any sensitive Neovim lovers with too much staggering awe.
The Issue tracker on GitHub now has over 1,000 issues/pull requests. The lucky 1000th pull request was opened shortly before August.
As mentioned in last July’s newsletter, the documentation has successfully been moved to neovim.io/doc/.
It features some general documenation links as well as some more specific reports directed towards developers and contributors. These reports have already helped developers contribute and improve the codebase.
In no particular order, here are the top stories in the last two months.
system()
with PipesThis issue was mentioned in the June newsletter on things that were yet to come.
@aktau has finished implementing the VimL system()
function to use
pipes and the job system instead of redirecting to temporary files. The change
provides a nice speed boost and avoids some permission issues (mainly affecting
Windows, which is not supported yet).
The slowness of the old implementation of system()
was especially noticeable
when the called process had large output. An example of this is: system('cat
largefile')
.
There has been one bug report concerning the new
system()
code: it doesn’t work well with the Selecta plugin as described here.
@aktau leveraged libuv’s ability to provide a high resolution clock on many systems to improve Neovim’s profiling capability with this pull request.
The previous implementation was using gettimeofday()
. This was a blocker in
getting Neovim to run on Windows (as detailed in the previous section) as this
function wasn’t supported in Windows.
For more info on profiling in Vim, just run :help profiling
.
During the start of of the project, the MoonScript vs Lua debate was a widely discussed one.
MoonScript (a language that compiles to Lua) was chosen to be the language for unit tests. After updating the unit test library, Busted, some unit tests were failing.
Thus it was decided to drop the dependency to simplify the tests and remove a layer of abstraction. @tarruda made the accompanying changes and pull request.
Discussion arose regarding how Neovim wasn’t fully compliant with the specification of msgpack-rpc.
In the last few weeks, @tarruda has completed the implementation to fully support the specification.
He also has been working on upgrading the use of msgpack to the latest version, 2.0, which should be merged soon.
In the first newsletter, a Python client was first discussed. Since then, @tarruda has refactored it for various improvements.
@myitcv has made a proposal for adding Go integration in a similar way that the Python integration works. The proposal also touches on being language agnostic.
Although too copious to detail here, the link above also includes more details on implementation and discussion regarding that.
More code that was either dead or for unsupported legacy systems was removed in two different pull requests (1, 2).
The systems that still had code lingering included SGI IRIS, BeOS, and EBCDIC.
The function to create temporary files in Neovim needed features that weren’t in libuv.
@Hinidu, one of Neovim’s contributors, sent a pull request to
libuv to add a new function, uv_fs_mkdtemp
. The changes (now part of libuv
version 0.11.27) are being used by Neovim to provide
temporary file/directory creation and the changes work across platforms.
Because the cross-plaform code has been contributed to libuv, all libuv-based projects can benefit from the changes.
Back on April 9th, the first bounty on Neovim’s
Bountysource was created. The request was to port an existing
patch that was written by Christian Brabandt from Vim to Neovim. The patch gives
a breakindent
option that will match the indentation when a line is wrapped.
@fmoralesc created a pull request to claim the bounty. A bit of discussion took place and some revisions were made. Since then they have been merged into the master branch and @fmoralesc has been awarded the bounty!
@war1025 has added unit tests for two existing files: buffer.c and fileio.c. Adding more unit test coverage to the code as it is refactored is part of the goal of Neovim.
@tarruda made a pull request that is exposing some of Neovim’s core functionality through the msgpack API.
While still volatile as it evolves, this core functionality includes:
@tarruda has added a --embedded-mode
flag which will allow another
program to start Neovim in the background and use it as a headless instance.
Technically, it uses msgpack-rpc to talk with the client using stdin and stdout.
Neovim has successfully been compiled in Microsoft Visual C++ as well as using MinGW, in this issue and this one respectively.
If you’d like to help support development, you may donate using Bitcoins here:
1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ
or back the team on the Neovim
Bountysource page.
If you an experienced developer or inexperienced but wanting to learn, visit the GitHub repo and check out the README, CONTRIBUTING guide, and finally the Wiki to learn more.
There are plenty of opportunities to help out and plenty of things to do.
Do you have any feedback or suggestions regarding this third newsletter? Feel free to reach out through the Neovim Twitter.
Also be sure to subscribe to the RSS feed to stay up-to-date on what is happening in the Neovim world. The next newsletter will be released in two months near the beginning of November.
Until next time. :wq
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.