
Published at Aug 23, 2025
My favorite Neovim plugins - Part 1
Intro
In this first part of my neovim plugin series I want to present you the plugins I use on a daily basis and some I consider useful as a full stack developer. I have been using (neo)vim as my daily driver for roughly 10 years now and I generally like to keep my setup minimal but love to try out new plugins and features. This part of the series will cover my absolute essentials, while the second part contains additional plugins that I wouldn’t want to live without.
This is not an in-depth guide on how to set up these plugins, but rather a brief overview of what they do and why I like them. If you want to learn more about how to set up the plugins in detail, check out the linked repositories for each plugin.
Essentials
Color scheme - catppuccin
This is my favorite color scheme. Not just for Neovim, Catppuccin is one of the most comprehensive themes I have ever encountered and I try to use it for almost everything. I just love the mocha flavor, it is easy on the eyes and has a great contrast. It also integrates with lsp, treesitter and many other plugins, so you can have a consistent look across your entire setup. I changed the background to be a bit darker than the default along with a bit of transparency and blur, which you can see in the screenshot below.
blink.cmp
I am currently test-driving native auto-completion provided by Neovim, which is currently only available in neovim nightly. For the stable version I still recommend using this plugin. I strive to use as little plugins as possible.
Anyways, this is still considered one of, if not the best completion plugins. It is fast and supports various sources for autocompletion, including LSP, snippets and more. It integrates seamlessly with Neovim’s built-in capabilities. It is fast, reliable and offers a great user experience. It also displays additional information about the completion items, such as documentation and source, which is very useful.
oil.nvim
If you are used to working with an IDE, you might be used to having a file explorer on the side. A lot of Neovim users prefer having only the buffer with the file open as the only thing visible and only open the file explorer when they need it. This is where oil.nvim
comes in handy.
I used to use vim-vinegar and raw netrw in the past, but eventually switched to this plugin. What this plugin essentially does is it lets you create, edit and delete files the vim way in a buffer-like file system. A typical workflow would be the following:
Note: I have zz
mapped to :w
in my neovim config, so I can save the oil buffer with zz
.
- You are inside neovim and have a file open.
- You want to create a new file or edit an existing one.
- You press
-
to open the file explorer in the directory of the currently open file. - You can navigate inside the directory using
j
andk
and between directories using-
to go up one level andEnter
to go into a directory or open a file. - You can create a new file by, for example, pressing
o
to enter insert mode on a new line, type the file name, and save the buffer with:w
. - You can delete a file by navigating your cursor to it and pressing
dd
to delete the line [the file is on], then saving the changes to oil just like you would with a normal buffer again (:w
). - You can rename (use your day-to-day vim commands), copy (e.g.
yy
), and cut (e.g.dd
) files using the same intuitive vim commands you use while editing normal contents of files. - Save the oil buffer to apply changes. You can do multiple operations in one go, such as creating a new file and deleting an old one, all while staying in the oil file navigation buffer.
This plugin just makes file operations so much easier and more intuitive, especially if you are used to the vim way of doing things.
conform.nvim
This plugin helps maintain consistent code formatting across your projects, ensuring your codebase remains clean and readable. It also integrates with various popular formatters, making it easy to set up and use. I mostly use prettier with it, but it supports many other formatters as well. Whenever I save a file the configured formatters will run automatically, ensuring that my code is always formatted correctly.
fff.nvim
This is a relatively new fuzzy finder for Neovim which solves most pain points of existing fuzzy finders. Until recently, I had been using fzf-lua and had never been a fan of telescope due to its performance issues and clunkiness.
I use this plugin for fuzzy finding files in the current project. It has a lot of improvements in speed, matching quality and also has image preview support. As of this writing, it still feels like beta software, so you might want to consider fzf-lua instead.
The really useful thing here is, that when I open the file picker, I see all the touched files in the current project immediately as the first entries, so I can quickly navigate to them without having to add them to something like harpoon first.
fzf-lua
As noted in the previous section, this used to be my go-to fuzzy finder for Neovim. Now I mostly only use the live_grep
functionality of this plugin, which is a very fast and efficient way to search for text in files in an interactive way across your project.
Notable mentions I use from time to time from this plugin are: lsp_document_symbols
and keymaps
which shows you the document symbols and keymaps respectively in a fuzzy finder. This plugin does have a ton of functionality built-in, such as viewing various git info, LSP diagnostics, open buffers and so much more,
so make sure to check out the repository for more information.
Side note: I also use fzf in my terminal to fuzzy find files and it basically never lets me down. It is fast, reliable and offers a great user experience.
The video demonstrates me live grepping for blogcard
and then navigating to that match by pressing Enter
. Then grepping for that again and sending the results to the quickfix list (ctrl+q
).
dart.nvim
This is also one of the more recent plugins and it has already become one of my favorite ones. I have been struggling to find something that helps me jump between my open buffers. Harpoon and similar plugins just created too much of a mental overhead for me. This plugin displays the most recently opened buffers and so-called “marked” files in a tabline visible to you at all times and you can quickly switch files by navigating the assigned tags. Game changing.
Despite being the core idea, I do not explicitly tag any buffers with dart, but instead rely on its open buffers functionality. I also added mappings to immediately jump to the specific buffers, without opening the picker first.
Since most of the time I only have a few files open, this works perfectly for me. I use ctrl+t
as a prefix, feel free to use your leader key or whatever you prefer.
Here is my config (I use Colemak, so my mappings are a bit different):
return {
'iofq/dart.nvim',
opts = {
marklist = { 'l', 'u', 'y', 'e', 'i', 'o', 'k', 'h' },
buflist = { 'a', 'r', 's', 'q', 'w', 'f', 'z', 'x', 'c', 'd' },
mappings = {
pick = '<c-t>t',
next = '<c-t>n',
prev = '<c-t>p',
},
},
-- set key bindings
config = function(_, opts)
require('dart').setup(opts)
local map = vim.keymap.set
local kmOpts = { noremap = true, silent = true }
-- this is a convenience method to close the current buffer
map('n', '<c-t>x', ':bd<CR>')
-- mappings to jump to specific buffers
map('n', '<c-t>l', ':lua Dart.jump("l")<CR>', kmOpts)
-- ...
-- mappings for all the other chars specified above, omitted here for brevity ...
-- ...
map('n', '<c-t>d', ':lua Dart.jump("d")<CR>', kmOpts)
end,
}
flash.nvim
This plugin provides a fast and efficient way to jump to specific locations within the file you are currently editing, making in-file navigation much faster. Here is a quick example of how to use it:
- You are editing a file and want to jump to a specific word or location in the file
- Press
s
to start a search - Type the first few letters of the word you want to jump to
- Flash will highlight the matching words in the buffer and display labels (green character in the video) next to them
- Press the corresponding label to jump to the word
This is much easier than using relative line numbers or using other motions to navigate to a specific location in the file.
nvim-lspconfig
This is the standard plugin for configuring Language Server Protocol (LSP) in Neovim. It provides support for various programming languages and enhances code intelligence features like autocompletion, diagnostics, and more.
This plugin purely provides the configuration for LSP servers, so you will need to install the actual language servers separately. For example, for JavaScript/TypeScript you would install typescript-language-server
globally via npm.
This is where Mason comes in handy, which is a plugin that simplifies the installation, activation and management of language servers, formatters, and linters. You can find the two involved plugins here: mason.nvim and mason-lspconfig.nvim
vim-tmux-navigator
This plugin allows seamless navigation between Neovim and Tmux panes, making it easier to switch between your code editor and the popular terminal multiplexer without losing focus.
Demo: Here you can see one tmux pane on the left with two horizontal neovim buffers and a tmux pane on the right. As you can see, I can seamlessly navigate between all using ctrl+(h|j|k|l)
.
gitsigns.nvim
This plugin provides git integration for Neovim, allowing you to see changes in your code, stage and commit changes, and more, all within the editor. Unlike the name suggests, it does not only show signs in the gutter, but also provides a lot of other features like:
- Viewing diffs
- Staging and unstaging changes
- git blame annotations
- Hunk management (e.g. staging/unstaging hunks)
- and more!
I personally primarily use it to see changes in my code. I prefer to use git directly in the terminal as opposed to an abstracted way/UI, so I don’t use the git operations provided by this plugin at all, but they are there if you need them.
nvim-treesitter
This plugin provides advanced syntax highlighting and code parsing capabilities for Neovim. It enhances the editor’s understanding of your code, enabling features like better autocompletion and code navigation.
Testing and Debugging
nvim-dap
This is a Debug Adapter Protocol client implementation for Neovim. nvim-dap allows you to:
- Launch an application to debug
- Attach to running applications and debug them
- Set breakpoints and step through code
- Inspect the state of the application
You have to install the actual debug adapters separately, but nvim-dap provides a great interface to work with them. It supports various languages and can be extended with additional adapters as needed.
debugmaster.nvim
I used to use nvim-dap-ui for debugging, but I have recently switched to this plugin. It provides a more vim-centric interface for debugging sessions in Neovim and integrates well with nvim-dap. I love how minimal this appears and how easy it is to switch between modes.
neotest
This plugin integrates with various testing frameworks and provides a unified interface for running and managing tests in Neovim. It supports multiple languages and frameworks, making it a versatile tool for developers.
Conclusion
That concludes the first part of my recommended Neovim plugins. Also make sure to check out part 2 linked below, the plugins in part 2 might even be more useful, this part just covers plugins that I absolutely cannot live without, while the second part covers plugins that enhance productivity or are quality of life improvements.