Issue #4

Neovim Core updates

Updates of Neovim itself, which are available on Neovim nightly.

Important: if you are a plugin author, you are strongly advised to follow the #14090 breaking changes on master GitHub thread, as it contains important breaking changes information.

  • #19598 changed vim.keymap.set() to always replace keycodes in the result of <expr> mappings by default (previously, this was only the default for Lua functions as RHS). Pass replace_keycodes = false in opts explicitly to disable this behavior.

Neovim Plugin Community updates

Neovim is full of active plugins. This section is about the community and what is going on.

Need help {#need-help}

rust-tools.nvim is looking for testers

rust-tools.nvim is a plugin which goal is to provide a better experience at developing Rust in Neovim by using the internal LSP client and additional extra tools, such as inlay hints, crate graph, workspace support, etc. etc.

@simrat39 is looking for testers before merging a new refactoring of the plugin. If you are a Rust programmer and interested into enhancing their plugin, you should probably have a look.

Guides, tours, articles, etc. {#guides}

(blog) From UltiSnips to LuaSnip

Let’s start this week with a nice blog article by @cljoly about migrating from UltiSnips to Luasnip.

New plugins {#new-plugins}



A brand and fresh new plugin by @Vonr to fold multiline comments.



A new plugin allowing to map multiple char sequences to one key.


@mizlan made a plugin to interactively swap things in Neovim! It can handle symbols like function arguments, list elements, function parameters, and more. Powered by tree-sitter.



A new theme by @Tsuzat, based on the super famous solarized plugin.



@B4mbus made a theme based on oxocarbon.nvim, which is a theme made in Rust with nvim-oxi. Because the author didn’t want to have to install the Rust toolchain for a theme, they came up with a Lua version.


A new plugin by @Ttibsi to run various pre-commit logics (from LSP, formatters, linters, etc.). It's designed to only work within a git repository that already has a .pre-commit-config.yaml file.


Hey, a new plugin! This one is by @RoryNesbitt and is a all-in-one Neovim configuration wrapper inside the same directory.. It’s also known as seanvim – a reference to @seandewar who helped with the plugin development. The plugin is still under heavy development, so if you want to test it out and provide feedback to @RoryNesbitt, feel free to install and experiment!



Plugin by @andythigpen for displaying test coverage. It can display coverage information in the sign column and coverage summary report in a pop-up window. Note: This plugin does not run tests. It justs loads/displays a coverage report generated by a test suite.

Updates {#updates}

Neovim Keys

Neovim Keys is an application to help new Neovim users to get used to using HJKLa and switching between modes.

Neovim Keys v2.1 is out! The application is built with Java AWT (a graphics library). It might be interesting if you are new to Neovim. An application by @BooleanCube.


This week, @miversen33 and the contributors of import.nvim added support for lualine.nvim, along with on_click support. A great addition!


A great update for lspsaga.nvim this week by @glepnir. This is about asynchrous requests. The plugin now has a loading / progress bar kind of thing that will provide some useful visual feedback that a request is currently going on.


nvim-surround released version 1.0.0 which supports Lua pattern-based modifications. Users can now delete/change quite complex manually defined surrounding pairs. This caused some breaking changes which users might need to address. now supports text-objects based on tree-sitter. Here is a short comparison between’s text-objects and nvim-treesitter-textobjects’ ones.


The plugin by @rmagatti now supports cwd tracking. This feature is nothing more than knowing when the cwd is about to change and then making sure the current session is saved correctly – and that buffers and jumplists are cleared before attempting to load the next session.

Did you know? {#tips}

This section is about various Neovim tips. People are free to contribute any tips they have on their mind. Tips are intended for any Neovim user, should they be beginners or advanced users.

Neovim has the support of text-objects, which are used in visual or operator-pending mode. w for instance stands for the text-object word. When you are in operator pending mode, for instance right after pressing d for delete, pressing w (so dw) will delete from the cursor position to the end of the word. Two modifiers exist to create more powerful text-objects: a (for around) and i (for inner). The former will act on the text-object on its right plus its surroundings delimiters (for a word, it’s basically the whitespaces). The latter, i, will apply the operation only inside the text-object. For a word, it means just the word, ignoring the whitespace around it.

With this, you can do really powerful editing. For instance, if you have this HTML code:

<div class="stuff">I like cookies</div>

And you want to change I like cookies to I love pasta, you can simply put your cursor anywhere in that text, and press cit, which translates to:

c = change
i = inner
t = tag

t is a text-object native to Neovim that can recognize “tags” of the filetype you are editing (here, HTML tags). So that command will change the text inside the tag. If you wanted to completely replace the whole tag with another one, you could have pressed cat, which would have removed the surroundings (i.e. the <div> and </div>).

If you have any tips that have not been shared yet (or it was a while ago), please feel free to share to the contents repository. Thanks!

And that’s all for this week! See you all next time for a full batch of Neovim updates on the 15th Aug 2022!

Want to contribute? {#contribute}

You have noticed something missing that you saw lately? Do not keep the candies for yourself and please feel free to share with us! You can open a PR at This Week In Neovim Contents.

Feel free to read how to contribute to get started.