Issue #41
Email Newsletter
Sign up with your email address to receive an email when a new issue of This Week in Neovim is available
Important disclaimer {#disclaimer}
This release marks the release of three different TWiN releases all merged as one:
- Monday April 24th 2023
- Monday May 1st 2023
- Monday May 8th 2023
I — @phaazon — was not available for a whole week (work summit in New-York) and missed two release dates. Hence, you get a mega update this week, yaaaay.
However, I think it’s important for me to explain something about this-week-in-neovim. I started the project almost one year ago now, completely on my own, just after asking the community whether they would like a curated list of news (reddit).
People might have noticed — should they know me directly or not — that I have moved away from Neovim. I will not explain why (I plan on writing a blog article about it), but the thing is, my only binding to Neovim now is TWiN. I keep smiling when reading new plugins, updates, guides and the thriving ecosystem, but it’s been a long time I’ve given up on the direction of state of things of Neovim.
For this reason, I think it’s important to start talking about the future of TWiN. Hence, I’ll start with a Reddit thread to gather what people want, who would like to get involved more (i.e. having write accesses, etc.) to slowly move ownership. Let’s talk about that on Reddit; you have enough to read down below!
Have fun reading!
neovim-core-updates-{#core}">Neovim Core updates {#core}
Updates of Neovim itself, which are available on Neovim nightly.
neovim-plugin-community-updates-{#plugins}">Important: some updates might be missing from this week content. If you want to be sure to always keep up to date with what’s going on in Neovim Core, you are strongly advised to have a look to these places:
- @neovim on Twitter, which tweets the most recent news about the editor.
:h news.txt
will deliver you with the last news inside Neovim directly.- Various PRs on GitHub.
Neovim Plugin Community updates {#plugins}
guides,-tours,-articles,-etc-{#guides}">Neovim is full of active plugins. This section is about the community and what is going on.
Guides, tours, articles, etc. {#guides}
5 smart mini-snippets to amp up your text editing experience in Neovim
JoosepAlviste wrote an article where he shows how to create small text-editing utilities to make text editing more fun. This also includes some examples of using tree-sitter to make the cmini-snippets "smart" based on the context of the file.
5 Neovim Plugins To Improve Your Productivity
LazyVim: Linters & Formatters
5 Features Neovim is still missing
new-plugins-{#new-plugins}">New plugins {#new-plugins}
mini.hues
There was a release of a new color scheme module in mini.nvim
called mini.hues
. It is an another take on color scheme
generation: supply background with foreground colors and the rest of the palette is computed to be as much perceptually
different from one another as reasonably possible. It can limit number of used hues for non-base colors, adjust
saturation level and accent color while also having 30+ modern Neovim plugin integrations.
Along with it comes 'randomhue' - a good old configuration-free color scheme which on every :colorscheme randomhue
will randomly but smartly generate background/foreground colors and apply 'mini.hues'.
template-literal-comments.nvim
Highlight ECMAScript template literals by placing a comment before them
definition-or-references.nvim
This plugin simply replaces vim.lsp.buf.definition
and vim.lsp.buf.references
with a single command. Convenient.
Written by @KostkaBrukowa.
laravel.nvim
Plugin for Neovim to enhance the development experience of Laravel projects. Quick executing of artisan commands, list and navigate to routes. Information about the routes. Robust API to allow you to run any command in the way that you need, etc.
A plugin by @adalessa.
nvim-dap-repl-highlights
This plugin adds tree-sitter language injections into the DAP REPL, allowing you to use your tree-sitter parsers inside the REPL making your debugging sessions much more readable. An interesting and useful plugin by @LiadOz.
keylab.nvim
This plugin is the first contribution of its author, @BooleanCube aims at helping new Neovim users with getting used to the Vim key configuration on their setup. It can alternatively be used as a way to measure your typing speed.
nvim-highlite
A colorscheme generator that is "lite" on logic for the developer. It ships with a couple built-in colorschemes and is compatible with semantic highlighting. A plugin by @Iron-E
wf.nvim
which-key but for Neovim. It has some differences with which-key.nvim, like being inspired by Helix for the position on screen, etc.
Made by @Cassin01.
monorepo.nvim
A new plugin for managing monorepos in Neovim! Its purpose is to change the project scope inside of a monorepo quickly and easily and pair well with telescope.nvim.
ranger.nvim
A ranger introduction. In Neovim. Yes. It differs from ranger.vim or even rnvimr in that it has no dependencies besides ranger itself and is written in 100% lua.
tsc.nvim
A Neovim plugin for seamless, asynchronous project-wide TypeScript type-checking using the TypeScript compiler (tsc).
Written by @dmmulroy.
tabby
A plugin that associates buffers with tabs, so that switching to a tab only shows its buffers.
First plugin of @medwatt.
nvimgelion
@nyngwang’s first colorscheme. A tribute to Evangelion!
webc.nvim
WebC support for Neovim.
better-folds.nvim
@snelling-a’s first plugin! Right now it doesn’t do much but makes folds look slightly different.
A plugin similar to pretty-fold.nvim or nvim-ufo.
NeoComposer.nvim
NeoComposer is a Neovim plugin that streamlines macro management and execution with a customizable Status Line Component and Telescope Extension.
Feature set:
- View the status of your macros interactively with the status component.
- Browse, search, and manage macros using the Telescope extension.
- Delay playback to ensure proper macro execution.
- Edit macros in an interactive buffer.
- Queue, yank, and delete macros.
- Stop macros during playback.
Links:
fleet-theme-nvim
A port of the color scheme from Jetbrains' Fleet to Neovim.
muren.nvim
Multiple search and replace sessions all at once, with ease. By @AckslD.
updates-{#updates}">Updates {#updates}
nvim-treesitter
Nvim Treesitter configurations and abstraction layer
Markdown fenced code blocks now highlight their contents using filetype aliases.
So whereas before, a fenced codeblock with the info-string javascript
would
highlight as javascript, but one with the info-string js
would not highlight, now
infostrings like js
, hs
, py
, and others will correctly highlight.
hbac.nvim
Automatically close the buffers you don't care about.
New toggle_pin
command was added to manually pin and unpin buffers.
smart-splits.nvim
🧠 Smart, seamless, directional navigation and resizing of Neovim + terminal multiplexer splits. Supports tmux, Wezterm, and Kitty. Think about splits in terms of "up/down/left/right".
The Wezterm integration for smart-splits.nvim
has been updated to support a new way to handle the keymaps from the Wezterm side.
The plugin now sets a Wezterm user variable IS_NVIM=true
when initialized, and uses an autocmd
to set it back to false
when Neovim exits.
Previously, the Wezterm keymaps would need to check the foreground process name to check if nvim
is running in order to decide whether to consume
the keymap or pass it on to Neovim. However, this came with some issues. The pane:get_foreground_process_name()
function can have high and highly
variable latency, and does not work over an SSH connection, and sometimes doesn't work at all on Windows.
Note: This new way of configuring the Wezterm keymaps will not play very nicely with lazy-loading smart-splits.nvim
, since
the Wezterm keymaps react to a user variable that is set only once the plugin is loaded, so the first keypress may not work, but it should
work for subsequent keys after that. However, smart-splits.nvim
is very small, and not lazy-loading it on my system only adds 0.07ms
to my startup time, so I just stopped lazy-loading it.
In Wezterm, you can now switch this code:
-- Equivalent to POSIX basename(3)
-- Given "/foo/bar" returns "bar"
-- Given "c:\\foo\\bar" returns "bar"
local function basename(s)
return string.gsub(s, '(.*[/\\])(.*)', '%2')
end
local function is_vim(pane)
local process_name = basename(pane:get_foreground_process_name())
return not not process_name:find('vim')
end
To just this code:
local function is_vim(pane)
return pane:get_user_vars().IS_NVIM == 'true'
end
Here's the PR adding this functionality if you're interested.
wiki.vim
A wiki plugin for Vim.
The plugin got a new update, which is a minor release. More larger changes in the near future are to come, most of them will be breaking changes.
did-you-know?-{#tips}">Did you know? {#tips}
Nothing for these past weeks…
special-thanks-{#special-thanks}">Special thanks {#special-thanks}
These people help contributing various updates about Neovim and its ecosystem! Thanks for your contributions! ❤️
want-to-contribute?-{#contribute}">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.