r/neovim

My First Plugin! Docright.nvim - Local First AI code explainer
▲ 4 r/neovim+1 crossposts

My First Plugin! Docright.nvim - Local First AI code explainer

Docright is a Local first AI code explainer that that asks for short code documentations and allows you to follow up with your own questions, YES it lets you go down rabbit holes.

it's NOT an AI documentation tool, we have plenty of those.

Since its my first plugin, I would really appreciate if you tried it and any criticism or feedback is highly appreciated. Thank you to this community for being awesome!

github.com
u/MaximumAttitude7598 — 3 hours ago
▲ 11 r/neovim

wombient.nvim - ambient structural shading to make big files easier to scan

Hey. Ever get lost jumping through repetitive-ish code blocks? This is an attempt to help. It layers on top of existing syntax highlighting to visually organize things into relevant chunks, extracted as best I could (treesitter nodes > LSP folds > manual heuristics). Sharing in case anyone else finds it helpful when browsing a giant yaml :)

Repo: https://github.com/wom/wombient

https://preview.redd.it/4rkrc039hjbh1.png?width=1648&format=png&auto=webp&s=222d7e28bc9e1f7ea2426f8709ba9c3cd523c739

reddit.com
u/w0m — 4 hours ago
▲ 95 r/neovim

select-undo.nvim update: core rewritten, you can now undo any line without losing newer changes

A while back I shared select-undo.nvim, a plugin to undo specific lines instead of the whole-buffer chronological undo. The early version had known bugs (reverting a line could impact its neighbor).

Finally after a year I got some time to make some changes. This update is a full rewrite of the core and it now works somewhat reliably (you guys can be the judge, because I might have tested in some bias scenarios).

What it does: edit line 10, then line 50. Native 'u' forces you to revert line 50 first. With this plugin you select line 10, press gu, and only that change reverts. Line 50 keeps your newer edit.

Mappings (visual mode):

- gu - revert the newest change in the selected lines; press again to step further back

- gU - revert the last change of every selected line in one press

- gC - revert only the selected characters, keeping other edits on the same line

What changed under the hood:

- Old version compared fixed line ranges across undo states, which broke when lines were inserted or deleted. Now it diffs each undo state and reverts only the hunks touching your selection

- A revert never touches lines outside your selection

- Each revert is one regular edit, so native u / Ctrl-r work on it as expected

- No more undo-tree pollution, works with undofile across sessions

- All mappings configurable

Repo: select-undo.nvim

Feedback and issues welcome. If you tried the old version and it bit you, this one is worth another look.

u/Visual_Loquat_8242 — 17 hours ago
▲ 42 r/neovim

lytmode.nvim - the not-dark-not-light colorscheme, recently polished <3

hi all!

a while ago i posted lytmode.nvim - a minimal, balanced colorscheme for neovim inspired by obsidian's LYT-Mode.

just like the original, there is no dark/light split: it's not dark, it's not light - it's the comfy middle.

recently i gave it a slight polish, so here is a small repost <3

github: https://github.com/github-main-user/lytmode.nvim
neovimcraft: https://neovimcraft.com/plugin/github-main-user/lytmode.nvim/

feedback, issues and ideas are totally welcome!

u/_vim_enjoyer — 16 hours ago
▲ 4 r/neovim

How to add default keys in which-key plugin

Hi !

So if I understand correctly, I have a "which-key" plugin that add a popup when I click leader, g etc.. but for example g0 make the cursor go to the start of the current line BUT it's not displayed in the popup

Seems like it's a default keybind of vim but it's not displayed in neovim

Can I do that ? I use lazyvim on Omarchy linux if that help

Thanks !

reddit.com
u/akyden-_ — 13 hours ago
▲ 0 r/neovim+1 crossposts

Careless plugin authors are creating serious issues with regard to CPU usage

I've just been down a rabbit hole using Gemini to analyze why my nvim setup is consuming so many CPU resources when idle. This is a huge issue - I could potentially have many instances of nvim open, and each one using up CPU cycles carelessly adds up to a serious waste of CPU cycles and heating. My laptop has been too hot for months, and now I finally know why.

The main culprit? Plugin authors are setting repeating timers of 33ms, 50ms or worse without realizing the implication - they're constantly waking up the CPU and turning sleep into effective busy waits.

So far I've found:

  • which-key sets a 50ms timer to bypass the lack of ModeChanged events on pre-0.10 Neovim. Completely unnecessary on 0.10+ and done without a version check.
  • noice sets an indefinite 33ms timer on bootup.
  • snacks' statuscolumn plugin runs a 50ms timer to refresh the status rather than responding to events.
  • lualine sets a 50ms/16ms(!) timer by default.

All of these are included in Lazyvim, meaning that if you use Lazyvim, you've turned neovim into a CPU cycle-eating machine.

I don't want to keep hunting for high frequency timers in careless plugins. Something needs to be done, preferably at the nvim layer.

EDIT: Definitely didn't expect some people to be so defensive about this.

To clarify: timers aren't a problem in an application that already uses up your CPU a lot and needs to respond quickly. They are a problem in an application that sits in the background is supposed to let the CPU idle as much as possible. One can also run the timers when the app is active, and then disable them when it's idling. I have neovim running in tens of instances on my machines, and the impact is serious.

I'm attaching LLM answers as objective observers on the matter, since people want to dispute it:

https://chatgpt.com/share/6a4a2354-03e4-83ed-b745-2315e3b3e88f

https://share.gemini.google/vAll2XerOoso

https://claude.ai/share/95cec7cb-7078-4bd9-91c1-6f2f2009a325

EDIT2: I didn't mean this as an attack on anyone in particular (even if it was read as such), and I didn't do my homework enough to know 3 of the mentioned plugins are made by one guy, making it look like an attack. Seriously, this wasn't meant as a shaming or anything like that, no matter what intent you read into it. It's totally ok for any programmer to make this mistake - especially one as prolific as folke, and I appreciate his work greatly -- that's why I use it as my daily driver. My comment was meant at the problem where there is a lack of awareness in general about the problem of using high frequency timers, and there's no easy mechanism to trace them from the neovim side.

u/BluddyCurry — 1 day ago
▲ 7 r/neovim+1 crossposts

matugen.nvim - Material You color palette integration for Neovim

Hi everyone,

I just put together **matugen.nvim**, a plugin designed to bring dynamic Material You color palettes straight into Neovim via Matugen

If you're ricing your Linux setup with wallpaper-based color generation (like Hyprland, Waybar, etc.) and want your editor to match without clunky hacks or hardcoded scripts, this bridges that gap

Key Details:

  • Integrates Matugen palettes directly into your Neovim environment.

  • Lightweight and written entirely in Lua.

  • Designed to fit seamlessly with broader system-wide dynamic ricing.

Check out the repo here: https://github.com/Senal-D-A-Gunaratna/matugen.nvim

Let me know if you have any feedback or features you want to see added!

u/nerdy_cat_guy — 21 hours ago
▲ 109 r/neovim

Neaterm: Just updated after horrible times in iran

After so much horrible times we all have living inside of iran, during internet blockage the only thing i can do was reading manuals on my system and updating my plugins so i gave a stable update to Neaterm. Give feedbacks if any problems or idea comes to you. Thanks

u/Dan7h3x_Real — 1 day ago
▲ 955 r/neovim

I clinched a new job in Europe and had some Neovim activity in my CV

For the past 3 years, I’ve been a graduate student in computer science. Through connections I made at a conference I published at as a masters student almost three years ago (at the beginning of my degree), I learned about an open position in Amsterdam in which I would both conduct research and architect software. Im now a PhD student and this is the direction I want to go in.

My friends (researchers, no engineering experience) helped guide the content on the CV, suggesting to me the content that would be most useful. The bulk of it was, of course, publications, software I’ve worked on, and other useful background like designing and teaching university courses and reviewing papers for conferences (typically what researchers call “professional service”). But, I also wanted to include activities in open source to strengthen my software experience. My friends didn’t know for sure if it would help or just appear like fluff. I went with it and listed some activity with Neovim, like a plugin I wrote that has received bug reports and feature requests. That part felt important: having a plugin is okay, but participation from users feels strong.

I was selected for an interview and called out this experience, which they seemed to like. I nailed a second interview and landed the job. I emigrate from the U.S. on the Fourth of July. For all those here living in Amsterdam, let’s grab a drink sometime.

u/roku_remote — 2 days ago
▲ 29 r/neovim

dblite.nvim — query Oracle &amp; SQL Server straight from Neovim (native binary, no JVM at runtime)

Most of the great DB plugins (vim-dadbod and nvim-dbee) are fantastic — until $DAYJOB hands you an Oracle or SQL Server box and the experience falls off a cliff. I was tired of alt-tabbing to SQL Developer / SSMS just to run a SELECT, so I built dblite.nvim.

You write SQL in any buffer, run it, and get paginated results in a split — named connections, typed bind params, history, exports, and schema-aware completion.

What it does

  • Run the whole buffer, or just the statement under your cursor (treesitter-aware)
  • Paginated result split with column types, query timing, and a per-session history you can page back through ([ / ])
  • Named connections with $ENV_VAR password refs, stored chmod 600
  • Typed bind params from a dblite.binds.json — numbers, auto-quoted strings, and raw SQL expressions
  • Export the entire result set (not just the visible page) to CSV/JSON
  • SQL autocomplete via blink.cmp — tables, columns, and bind names pulled from the live schema

The nerdy bit

Oracle/SQL Server drivers are JDBC — i.e. Java. I didn't want to make anyone install a JVM, so the DB layer is compiled to a native binary with GraalVM native-image and shipped pre-built. It's downloaded on install; there's no JVM at runtime. Falls back to a source build only if there's no binary for your platform.

Requirements: Neovim 0.11+ (optional: jq, telescope.nvim, blink.cmp).

Roadmap is MySQL next. It's early, so I'd genuinely love feedback — especially from anyone else stuck in Oracle/SQL Server land. Bug reports and "this workflow feels weird" takes equally welcome.

Repo: https://github.com/aaronshahriari/dblite.nvim

u/aaron_shahriari — 2 days ago
▲ 124 r/neovim+4 crossposts

Most of my workflow already lives in Neovim — code, prose, notes, scratchpads. The piece that always lagged was querying the notes. Plenty of tools let me grep them; almost none let me ask things like "all the drafts under tasks/q2 that link to people/alice" without leaving the buffer.

Turns out you can. IWE is a Rust binary (LSP server + CLI) that treats a directory of .md files as a queryable graph. Install once, use it from the editor over LSP and from the shell over :!.

The query language is small and reads like Mongo's:

iwe find --filter 'status: draft, priority: {$gte: 8}'

iwe find --filter 'author.email: {$exists: true}'

Frontmatter is the schema. Markdown links are the relationships — and there are two kinds, which the engine actually distinguishes:

  • An inline link in body text is a reference: "see also."
  • A markdown link alone on its own line is an inclusion link: containment. The linked document becomes a structural child of this one.

Each gets its own pair of operators:

iwe find --references people/alice # docs that link to Alice inline
iwe find --included-by tasks/alpha:0 # everything under alpha's tree (unbounded)
iwe find --included-by tasks/alpha:0 --references people/dmytro --filter 'status: draft'

That last line: drafts under the tasks/alpha subtree that also mention people/dmytro inline. Three relationships, three flags.

The same predicates drive iwe count, iwe update, iwe delete. Bulk-set frontmatter from the shell:

iwe update --filter 'status: draft, reviewed: true' \
--set status=published \
--set published_at=2026-05-02

update and delete require an explicit --filter (no accidental whole-corpus rewrites). --dry-run previews.

From inside Neovim, this composes two ways.

The same iwe binary is also a markdown LSP server, so the editing side feels like working in code:

  • gd — jump to linked notes
  • gr — find references / backlinks
  • K — hover preview of a linked note without opening it
  • Code actions for extract section to a new file, inline a referenced note, rename
  • Auto-complete for link targets as you type
  • Inlay hints showing parent context and link counts

There's a dedicated plugin — iwe.nvim — that wires the LSP up and adds Telescope integration with hierarchical path search (notes show as Journal ⇒ 2026 ⇒ Week 18 ⇒ Mon notes). Lazy / packer / vim-plug all work.

For querying, you don't need a special integration — the CLI is enough:

  • Output is plain text — pipe to jq, fzf, telescope, whatever.

Same install handles both: cargo install iwe and you have the LSP server + the CLI. The LSP runs against any folder of .md files; the CLI queries the same folder.

Side note: this also turns out to be a decent shape for AI agents. They use the same CLI you do, see the same files, and git log is your audit trail for whatever they touch.

Repo: https://github.com/iwe-org/iwe · Plugin: https://github.com/iwe-org/iwe.nvim

Curious what the heavy notes-in-Neovim crowd thinks, especially on the inclusion-vs-reference link split.

u/gimalay — 3 days ago
▲ 9 r/neovim

waypoint.nvim — A plugin for bookmarking lines of code

Repo: https://github.com/patrick-sharp/waypoint.nvim

I just released a neovim plugin I've been working for a while. It's a bookmarking plugin. I made it because I felt a lot of the existing bookmarking plugins were lacking some important features, including:

  • The ability to reorder your bookmarks
  • The ability to delete and move your bookmarks in bulk
  • The ability to view lines of code around your bookmarks
  • Syntax highlighting in the preview window
  • Resilience to the content of files changing (e.g. checking out a git commit that changes the file contents won't delete your bookmarks)

If you have any feedback, please create a github issue or email patricksharp.dev@gmail.com

u/NoPerformance8263 — 1 day ago
▲ 6 r/neovim

I made pyimp.nvim — a tiny ty sidecar that updates Python imports when renaming files/packages in Neovim

Hey folks,

I’ve been trying out ty as my Python LSP in Neovim: https://github.com/astral-sh/ty

It already supports normal symbol rename, but it doesn’t currently implement file/package rename refactoring — i.e. when you rename:
main_app/modules/auth -&gt; main_app/modules/auth_renamed
your imports don’t get updated automatically.

So I made a small plugin: https://github.com/AlexanderFarkas/pyimp.nvim

pyimp.nvim starts a Rust LSP sidecar next to an already-running ty client. It listens for workspace/willRenameFiles and returns a WorkspaceEdit that updates Python imports before the file/directory is physically renamed.

It supports:
- file renames
- package/directory renames
- absolute imports
- relative imports

Fun part: I use LazyVim and during the testing I discovered one Snacks-specific caveat: Snacks applies willRenameFiles edits before renaming, but Neovim leaves edits in hidden buffers instead of writing them to disk. And there is no way to hook into this process. For that I also extracted a tiny companion plugin: https://github.com/AlexanderFarkas/snacks-rename-fix.nvim

It patches snacks.rename to persist willRenameFiles edits before the actual filesystem rename. It has two modes:
- smart: loaded buffers are edited/saved via Neovim, unloaded files are patched directly on disk
- write_all: use normal apply_workspace_edit(), then run :wall

I tested this on a real project rename with a few hundred import edits and it completed quickly.

Would love feedback, especially from people using ty, or working on large Python monorepos in Neovim.

reddit.com
u/AlexandrFarkas — 1 day ago
▲ 0 r/neovim

Please help with tree-sitter bug

https://preview.redd.it/oqpumcl3r7bh1.png?width=1842&format=png&auto=webp&s=e93a47a033c7299cbeae6c391dabb42c0a774b9e

I don't know what is happening, but neovim refuses to accept the fact that the directory to install the parsers in is inside the runtime path.
If I run :set runtimepath? I get the list of many paths and the first one is exactly the one I am supposed to see, so it is actually inside of the runtimepath...

https://preview.redd.it/crvdn6gtr7bh1.png?width=1887&format=png&auto=webp&s=330c91b7c7ecad48ce9836ccb4581f6ff5f5884f

Does someone have an idea of the problem?

reddit.com
u/Striking_Abrocoma_28 — 2 days ago
▲ 5 r/neovim

Smart word wrap?

I’ve been recently working in a new codebase where there’s no max line width enforcement. Lines can get huge (>120 chars) really decreasing the readability of code in smaller screens (like a laptop).

Nvim has native word wrapping which can break lines like:

```
void longGiant…Function(type1 arg1, type2 arg2);
->
void longGiant…
Function(type1 arg1, type2 arg2);
```

Which helps a bit but not a ton (e.g when there are more arguments). I was hoping for a ‘smarter’ wrapper that took advantage of the code structure to achieve something more readable, almost as if there were different enforced formatting rules:

```
void longGiant…
Function(
type1 arg1,
type2 arg2);
```

Is there something that I could use to achieve this? Or how do you handle these? Should I just use a bigger screen / less zoom?

reddit.com
u/enzodtz — 2 days ago
▲ 29 r/neovim

Neorg Templates &amp; Presenter Mode in Neovim

I've been trying to build around Neorg in Neovim to create a nice and intuitive notes app alternative.

But it seems like I have to build a lot of core elements for myself. Did I just miss a few existing plugins or is the Neorg landscape still a little bare?

I'd love to get a real not selfmade template engine inside neorg.

youtu.be
u/Yametsu — 3 days ago
▲ 22 r/neovim

peeper-picker.nvim v1.1.0, peep history, revisit any symbol you looked up, upgraded navigation and more!

https://github.com/parwest/peeper-picker.nvim

v1.1.0 adds peek history to peeper-picker.

peek history

:PeeperPickerHistory opens a plain list of the symbols you recently peeked, newest first.

  • <CR> peeks a name again, without moving your cursor or touching your current buffer. three files deep in a refactor, you can re-check anything you looked at earlier and not lose your place
  • c clears the list (asks first), q/<Esc> close
  • one entry per name, repeat peeks move it to the top
  • session only, in memory, nothing written to disk. bounded by history_size (default 100, 0 disables)

renames

history pins each name to the spot you peeked it. peek oldName, rename it to newName, and:

  • the list still shows oldName — you never peeked newName, so it doesn't pretend you did
  • selecting oldName runs a text search for it, which returns exactly the occurrences the rename didn't touch: strings, comments, docs, files the server doesn't index
  • a name that still resolves to a live symbol runs a normal full peek

also shipped in 1.0.0

  • results grouped by file with folding: J/K jump between files, zo/zc/za/zM/zR work, <CR> on a file header collapses it
  • ? opens a key cheatsheet inside the picker
  • decl is its own tag now instead of sharing def

setup

{

  "parwest/peeper-picker.nvim",

  main = "peeper_picker",

  cmd = { "PeeperPicker", "PeeperPickerHistory" },

  opts = {},

  keys = {

    { "&lt;leader&gt;pp", "&lt;cmd&gt;PeeperPicker&lt;cr&gt;", desc = "Peeper Picker" },

    { "&lt;leader&gt;ph", "&lt;cmd&gt;PeeperPickerHistory&lt;cr&gt;", desc = "Peeper Picker History" },

  },

}

still zero external dependencies, but needs an attached LSP client.

would love any and all feedback,

thanks to everyone who has reached out with feature requests!

https://github.com/parwest/peeper-picker.nvim

u/No-Razzmatazz7197 — 2 days ago
▲ 77 r/neovim

duskhaven.nvim - A Neon/Cyberpunk Colorscheme

I've been recently working a custom colorscheme called Duskhaven

This is meant to be a dark neon/cyberpunk-inspired theme with strong yellow keywords, vibrant orange accents, cool blues, and magenta punctuation. I was aiming for something that is vibrant with good contrast while also feeling cozy and pleasing to look at during the night.

Install Here: https://github.com/kbraggins/duskhaven.nvim

Please feel free to leave any feedback or suggestions! This is still pretty early in development and I do plan to expand support to other plugins. If you've got any suggestions for plugins not currently supported that you would like to see let me know. This started as a personal colorscheme for my own use cases, so I do expect there to be some popular plugins not supported just due to the fact I may not use them much myself. So any feedback is appreciated!

Thanks for checking out my theme!

u/kbraggins — 3 days ago
▲ 0 r/neovim

what you guys thing about nvim as a wm?

first of all, forget the unix philosophy a little bit, one of the most cool parts of programming is experimenting.

i see only two guys that tried to make this possible, the first is here: https://github.com/altermo/nwm/ and the another is https://github.com/GrantCuster/nix-simple . one wrote a x11 window manager that is controlled by nvim, and the another use some scripts to make nvim control the niriwm.

recently the wayland riverwm adopted a client-server model, making wayland wm's a lot easier to be made, open the way to surge a river+nvim wm, like the emacs one: https://codeberg.org/tazjin/reka

what you guys think about this?

reddit.com
u/ZealousidealGlass263 — 3 days ago