Pulse: A Single Command Palette for Neovim

/ 5 min read

If you use Neovim, you know how useful quick search and navigation tools like fuzzy finders and symbol pickers are. I built pulse.nvim because I wanted a single command palette to switch between different kinds of searches, without multiple keymaps and complex setups.

With AI, context switching has become a thing, with so many tools to manage. I am spending more and more time reviewing code than writting it, and I wanted a tool that would let me quickly jump to the code I needed without breaking my flow.

What Pulse Is

Pulse is a lightweight command palette and jump panel for Neovim. Instead of splitting every search or picker into its own command, plugin, and or different plugins, Pulse consolidates them under a single, consistent interface with prefix-based mode switching.

You can use it to quickly jump to:

  • File search
  • Command execution
  • Git status
  • Diagnostics
  • Symbols (current buffer and workspace)
  • Live grep
  • Fuzzy search (current buffer)

How it Works

Pulse uses a simple prefix system to switch between modes. For example, you can type a prefix followed by a query:

Commands (:)

It wouldn't be a command palette without the ability to run commands. Just type : followed by your command and Pulse will execute it.

Files (no prefix)

To search for files, you don't need a prefix just open the panel and start typing:

  • Open the command palette with a keymap (e.g., <leader>p)
  • Start typing to search for files in the current workspace
  • Use arrow keys or fuzzy matching to select a file
  • Press Enter to open the selected file
  • When empty the active buffers and recent files will show up
Pulse file search

Git Status and Diagnostics (~, !)

Pulse will show you the current git status of your project:

  • Open the command palette with a keymap (e.g., <leader>p)
  • Type ~ to switch to git status mode or ! for diagnostics
  • See a list of modified, added, and deleted files
  • Use arrow keys to navigate the list
  • A preview will show for the selected file
  • Press Enter to open the selected file
Pulse file search

Symbols (@, #)

Quickly navigate to symbols in your code:

  • Type @ to search symbols in current buffer, or # for workspace
  • See a list of symbols in the current buffer or workspace
  • Use arrow keys to navigate the list
  • A preview will show for the selected symbol
  • Press Enter to jump to the selected symbol
Pulse file search

Live Grep & Fuzzy Search ($, ?)

For more powerful searching, Pulse has live grep and fuzzy search modes:

  • Type $ for live grep across the workspace or ? for fuzzy search in current buffer
  • See matching results update in real-time
  • Use arrow keys to navigate the results
  • A preview will show for the selected result
  • Press Enter to open the selected file or jump to the match
Pulse file search

Why I Built It

Part of the fun of using Neovim is customizing it to fit your workflow. I love the flexibility of Neovim, but I also wanted to reduce the cognitive load of managing multiple tools for searching and navigation.

I wanted one entry point, much like Spotlight in MacOS:

  • Fast to launch
  • Minimal config
  • Predictable UX
  • One interface for all searches

In other words: less context switching in my workflow, and a cleaner mental model.

Example

Say you want to live grep for TODOs across your project: just open :Pulse and hit $ to switch to live grep mode or assign a keymap <leader>l.

Then Start typing TODO, The panel filters immediately, and hitting <Tab> previews results while keeping the panel open, letting you pick before jumping.

Why Not Telescope?

Telescope is powerful. It has a vast collection of pickers with many features and extensions.

But that’s exactly what I didn’t want. I didn’t want multiple entry points. I didn’t want multiple panels.

I wanted one palette. One surface. One mental model. This could have been a Telescope plugin. But the goal wasn’t another picker. The goal was a unified experience and full control over how the interaction feels.

How to Install

Pulse should work with any package manager but I tested it with lazy.nvim:

{
  "willyelm/pulse.nvim",
  dependencies = { "nvim-tree/nvim-web-devicons" },
  opts = {},
  keys = {
    { "<leader>p", "<cmd>Pulse<cr>", desc = "Open Pulse" },
  },
}

It’s fast, predictable, and reduces friction when switching between different kinds of searches. Because one panel with consistent navigation, you spend less time thinking about how to do a search and more time doing it.

What’s Next

This first version of Pulse is just the beginning. I think being able to review git status, better diffs, and merging tools would be a great next step, including:

  • Better preview layouts
  • More customization options (expand preview panels, multiple mode views, etc)
  • Integrations (git diffs, AI code review, etc)

If it fits your needs, Try it out, file issues, share your workflows. I’d love to hear how pulse fits into your stack.