Outstanding communication and handling of bugs from Neovim. Exemplary FOSS project in my experience so far. @telemachus
Welcome to the fifth newsletter for Neovim, the project that looks to become Vim out of the box.
Now in addition to the mailing list and IRC channel, you can hop into the Neovim chat room provided through Gitter.im. It has a convenient web interface but also allows you to connect using your favorite IRC client.
Black Duck, a company that helps other corporations in the adoption of open source software, chose Neovim as one of the projects to feature this past year. The company annually recognizes some of the top new open source projects that started during the year.
As mentioned in the last newsletter, Unixstickers has added Neovim stickers to their inventory. Every sticker that is bought increases the amount donated to ICCF Holland, Bram Moolenaar’s charity.
Since they’ve been added, USD 106 has been raised which Unixstickers just donated on March 24th.
The Neovim Wiki contains a page titled Related projects that contains a list of current GUI projects, API clients, plugins that take advantage of Neovim features, and projects with direct support for Neovim.
Some of the projects might be experimental which means there might be bugs and the projects might still be in progress.
Do you know of another project that can be listed? Don’t be afraid to add a link yourself!
@tarruda has merged his pull request to reimplement the terminal user interface using libtermkey and unibilium.
Libtermkey is a library by @leonerd that “allows easy processing of keyboard entry from terminal-based programs.” It has the ability to handle special keys, UTF-8 combining and more.
Unibilium is a library by @mauke that interfaces with terminfo.
Terminfo is a library and database that makes it easy to interface with display
terminals without worrying about device specific details. More details can be
found on the man page for terminfo by running: man 5 terminfo
.
Although the TUI implementation is included as part of Neovim, it is architecturally decoupled from the editor core: it uses the same API as external clients and GUIs.
As a result of using libtermkey, Neovim can now bind meta keys and
Ctrl-Shift
combinations both of which weren’t previously possible in the
terminal. Be sure to read more about the updated binding
capabilities for additional examples and possibilities.
@tarruda has finished his pull request adding a new :terminal
command which when ran launches a full terminal emulator. The terminal is using
Neovim’s native buffers and windows which means the user can enter normal
mode by pressing <C-\><C-n>
.
This is meant to replace and provide more capabilities than the already existing
Vim command, :shell
, which has been removed from Neovim. More
explanation on the decision of this feature can be found in this
comment made by @tarruda.
The complete documentation for this feature can be found under :help
nvim-terminal-emulator
.
This feature is implemented using another of @leonerd’s projects called libvterm.
With the changes to the TUI described above, this allowed @tarruda to make a pull request to add true colors to supporting terminals.
A more detailed explanation of what true colors means as well as terminals that support it can be found in this Gist that was written by @XVilka.
To enable true color support, set the environment variable
NVIM_TUI_ENABLE_TRUE_COLOR
.
The progress of building Neovim on Windows was first detailed in the July 2014 newsletter.
In a huge milestone, @equalsraf has been able to build Neovim on Windows and also has a build on AppVeyor, a continuous delivery service specifically for Windows.
@equalsraf has provided detailed notes on the requirements, building the dependencies/Neovim, and known errors.
Going forward, @equalsraf is still working on his main pull request while @justinmk has started a new issue for collecting requirements and discussion.
Vim has a number of ways to start it through its many aliases. The complete list can be found under the starting section in Vim’s documentation.
@Pyrohh opened an issue to discuss the removal of such aliases. All of the aliases had corresponding flags that could be used instead.
After some discussion it was decided to remove the lesser used ones. @Pyrohh then made a pull request to remove the following:
ex
: Ex mode.exim
: “Improved” Ex mode.view
: Read-only mode.gvim
: Using the GUI.gex
: GUI and in Ex mode.gview
: GUI and in read-only mode.rvim
: Restricted mode.rview
: Read-only and in restricted mode.rgvim
: GUI and in restricted mode.rgview
: GUI, read-only, and in restricted mode.In addition, @Pyrohh made another pull request to merge
vimdiff
and vim -d
.
@fmoralesc also opened a pull request to remove evim
. Which given
by the docs says it starts in insert mode which allows it to act
like a normal editor.
Even with removing of the feature, emulating it is still possible by using the
underlying 'insertmode'
option that easy mode leveraged.
The graphical side of Neovim has been seeing some changes in addition to the terminal interface in one of the above section.
Since the last newsletter, the following projects in no particular order have been created:
Three new autocommand events have been added by @fmoralesc in this pull request. An autocommand event is a way to execute something in response to a particular event. Events are particularly useful in plugins.
The new events are: TabNew
,
TabNewEntered
, and TabClosed
.
@tarruda is continuing to refine the new job API. His work has continued in this latest pull request. This might be a breaking change for existing plugins that use the existing job API.
This improvement is to make use of function callbacks (for input, output events) instead of the previous way of using autocommands for responding to events.
In addition to that, there are more job control functions in VimL including
jobwait()
and jobclose()
.
long_u
In an epic crusade against Vim specific integer types that has spanned two
previous newsletters (June and November), @elmart has finished removing the
integer type long_u
. @elmart’s changes were broken up into three last pull
requests (1, 2, 3).
This is a step towards
@tarruda’s goal to remove all project specific types. All that
remains is char_u
in which there are ~12,300 occurrences currently in use.
@mhinz wanted a way to remove ~ after the file ends. He
proposed a new :highlight
group, called
EndOfBuffer
, to go with the current list of
groups.
His proposal was first sent as a patch to vim-dev where his changes were accepted by Bram and should make it into Vim in the future. @mhinz let @fmoralesc prepare the pull request to bring in the changes to Neovim. The pull request has since been merged into the master branch.
When using Vim with plugins that allocate a large number of objects there are times when the garbage collection will kick in and cause Vim to hang due to the time spent looking for objects to free.
This issue was posted to vim_dev by Yasuhiro Matsumoto. A patch as written by Ariya Mizutani and proposed to the mailing list which improves the algorithm for looking through the objects. In Yasuhiro’s test case, it took unpatched Vim 100 seconds to execute but took just 0.134 seconds when the patch was applied.
An issue by @Shougo was created to discuss this patch being applied to Neovim. @oni-link then created a pull request to apply the patch which was merged shortly after.
@tarruda created a small Vimscript library in a pull request that mimics Tcl’s Expect for Neovim.
The purpose of Expect (in Tcl) is to make it easy to script and automate text based applications that don’t provide that functionality.
@tarruda provided an example plugin for GDB as a proof of concept. The plugin was created to make it easier to develop Neovim and show the vimexpect possibilities.
compatible
Vim has a compatible
option which lets Vim be more
compatible with Vi. It can also be started by running vim -C
.
In December, @klusark made a pull request to change
nocompatible
, which turns on no compatibility mode with Vi, to always be set.
This means that set nocompatible
and the flag -N
are
non-operations. This also means that since there isn’t a compatible mode, if
you run set compatible
it will give an error.
edcompatible
An issue was created to discuss the removal of the
edcompatible
option. Turning on this feature gives special
behavior for the g
and c
flags for the :substitute
command. Vim’s documentation actually discourage the use of this option.
@Pyrohh created a pull request to remove the feature and it was merged into the master branch.
ttyfast
Vim has an option called ttyfast
which is set if there
exists a “fast terminal connection”. When set, it will send more characters to
be drawn instead of using insert/delete line commands.
Discussion started and it was agreed that the option should be set as the default back in August. Shortly after, @fornwall created a pull request to make it the default.
After a few months of it being the default and no issues arising, @Pyrohh created a pull request to remove it completely.
Since the following three options were removed and more might follow, @fwalch created a pull request to simplify how these always-on/always-off options are handled.
Neovim continues to merge in the upstream Vim patches that are submitted to the Vim mailing list.
Since the last newsletter, more than 60 pull requests worth of patches have been submitted to Neovim. The current status of all the patches can be found on the Vim patch report.
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 are 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 newsletter? Feel free to reach out through the Neovim Twitter.
This newsletter cannot cover all of the contributions and support of the community. Thanks to all of the other contributors that have helped in some way during the months since the last newsletter.
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 a few months time.
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.