RIP Vim Boss, preview LSP code actions, grep using the power of an AST, mini.nvim additions and 19 new plugins!
Email Newsletter
Sign up with your email address to receive an email when a new issue of This Week in Neovim is available
Introduction
This issue of This Week in Neovim is dedicated to Bram Moolenar, creator of Vim, who passed away on August 3 2023.
Consider donating to ICCF to help children in Uganda!
Neovim core
Updates of Neovim itself, which are available on Neovim nightly.
- @neovim on Twitter
- Neovim news
:h news.txt
updates in Neovim directly- PR's on GitHub
- Allow users to filter diagnostics by specifying severities
- Allow users to pass virtual text options to nvim_buf_set_extmark through the "virtual_text" table in vim.diagnostic.config()
- Support for legacy treesitter injection queries is removed
- Terminal buffers started with no arguments (and use 'shell') close automatically if the job exited without error, eliminating the (often unwanted) "[Process exited 0]" message.
- Speed up TreeSitter parsing on large files by only parsing injections due to render during a redraw cycle.
- Include lookup logic (try as parser name, then filetype, then lowercase) in LanguageTree itself
- Nvim docs use "•" as a list item prefix but
gw{motion}
doesn't format such lists by default. Solution is to change the 'comments' option to include "fb:•" by default. - Improved messages for type errors in
vim.api.*
calls (includingopts
params) - LSP method names are available in protocol.Methods
- Added
vim.lsp.status()
to consume the last progress messages as a string. - LSP client now always saves and restores named buffer marks when applying text edits.
- LSP client now supports the
positionEncoding
server capability. If a server responds with thepositionEncoding
capability in its initialization response, Nvim automatically sets the client'soffset_encoding
field. - Dynamic registration of LSP capabilities. An implication of this change is that checking a client's
server_capabilities
is no longer a sufficient indicator to see if a server supports a feature. Instead useclient.supports_method(<method>)
. It considers both the dynamic capabilities and staticserver_capabilities
.
Neovim Plugin Community
Neovim is full of active plugins. This section is about the community and what is going on.
New plugins
aznhe21/actions-preview.nvim
Fully customizable previewer for LSP code actions.
A neovim plugin that preview code with LSP code actions applied.
You can use either telescope.nvim or nui.nvim as a backend.
Marskey/telescope-sg
Ast-grep picker for telescop.nvim
ast-grep is a AST-based tool to search code by pattern code. It will match all code that has the same syntactical structure. You can use $ sign + upper case letters as wildcard, e.g. $MATCH, to match any single AST node. Think it as REGEX dot ., except it is not textual.
MaximilianLloyd/tw-values.nvim
View all applied tailwindcss values on an element
When you apply a lot of classes in tailwind, it can be taxing to read through all of them and think about what each one does, this plugin makes it easier.
echasnovski/mini.clue
Show next key clues. Part of 'mini.nvim' library.
A plugin to show you hints for key bindings of commands matching what you started typing.
hrsh7th/nvim-pasta
The yank/paste enhancement plugin for neovim.
This plugin provides the following functionality.
- Save your all yank history automatically.
- Cycle yank history after paste via config.next_key and config.prev_key.
- Adjust indentation for line-wise content's
Links:
roobert/f-string-toggle.nvim
:yarn: A Neovim plugin to toggle python f-strings
Inspired by this Reddit post
echasnovski/mini.operators
Text edit operators. Part of 'mini.nvim' library.
- Operators:
- Evaluate text and replace with output.
- Exchange text regions.
- Multiply (duplicate) text.
- Replace text with register.
- Sort text.
- Automated configurable mappings to operate on textobject, line, selection. Can be disabled in favor of more control with MiniOperators.make_mappings().
- All operators support [count] and dot-repeat.
Links:
calops/hmts.nvim
Custom treesitter queries for Home Manager nix files, in Neovim
This neovim plugin allows (thanks to treesitter) highlighting languages contained in strings in various places of a Home Manager configuration nix
file.
mg979/tabline.nvim
A comprehensive tabline for rendering and managing tabs, buffers or arglist, and featuring buffer filtering, fzf integration and session management.
This is a lua version of vim-xtabline. Most features are the same, and most themes are also supported. It should look generally better, and be faster and more accurate (there is no tabline caching, so tabline is updated in real-time).
Zeioth/dooku.nvim
Generate and open your HTML code documentation inside Neovim
roobert/hoversplit.nvim
🚁 Automatically updated documentation and information about code symbols in a split window
A Neovim plugin designed to enhance the Language Server Protocol (LSP) experience by providing hover information in a split window. With this plugin, it is possible to quickly access additional context, documentation, or information related to code symbols directly within Neovim without disrupting your workflow.
roobert/tabtree.nvim
🌲 A Neovim plugin for jumping between significant code elements, such as brackets, quotes, etc.
TabTree is a Neovim plugin for navigation within code using Tree-sitter. It allows users to quickly jump between significant code elements.
roobert/surround-ui.nvim
🤗 A Neovim plugin which acts as a helper or training aid for kylechui/nvim-surround
roobert/bufferline-cycle-windowless.nvim
:window: A Neovim/Bufferline extension to cycle through windowless buffers to give a more traditional tab based experience
Neovims default tab-window-buffer model allows viewing open buffers in multiple windows. This plugin helps give a more traditional behaviour for tabs by configuring the ability to skip past buffers that are already open in an existing window. The behaviour is toggleable and configurable to be on or off by default.
chuwy/ucm.nvim
A Neovim plugin helping to navigate in Unison codebase
ada0l/obsidian
Base Obsidian functionality in your Neovim
This plugin allows you to use the basic functionality to work with Obsidian vaults. It integrates with nvim-telescope/telescope.nvim plugin, nvim-cmp plugin. And it also needs CLI tools like ripgrep, fd and sd.
9seconds/repolink.nvim
Create HTTP permalinks to your Git web frontend hosts
If you have a git repository with a file src/mymodule/cache.py and you want to show your teammates something that happens in a function foo between lines 100 and 105, this is what this plugin is meant for. You execute the :RepoLink command and in a few moments vim popups a notification with a URL that you can immediately share (something like https://github.com/COMPANY/PROJ/blob/1231231/src/mymodule/cache.py#L100-L105)
linrongbin16/fzfx.nvim
E(x)tended commands missing in fzf.vim.
This is the next generation of fzfx.vim. A brand new fzf plugin for Neovim, build from scratch, focused on user friendly, customization and performance.
niuiic/code-shot.nvim
Neovim plugin to take pictures of code
Updated plugins
bennypowers/nvim-regexplainer adds support for lookbehind assertions
Describe the regexp under the cursor
roobert/action-hints.nvim now supports virtual text
⚡ A Neovim plugin that displays available actions like 'Go to Definition' and 'Go to Reference(s)' for the highlighted word, presented in the statusline or inline as virtual text.
Contributing
Add your the plugin in either of the following to be featured in This Week in Neovim and Dotfyle:
Contribute to the development of Dotfyle: