# cheatsheet.nvim

> A searchable Neovim keybinding cheatsheet built on Telescope. Pick a task first, browse only its keys, search by intent, add your own maps and see which ones you forgot to list.

Status: Open source, 2026
Stack: Lua, Neovim, Telescope
Page: https://alexcloudstar.com/projects/cheatsheet-nvim/
Source: https://github.com/alexcloudstar/cheatsheet.nvim


A searchable Neovim keybinding cheatsheet built on Telescope. You pick what you want to do, such as move around, edit text or search and replace, and it shows only the keys for that task.

I wrote it because I use Neovim mostly at the surface and kept forgetting my own mappings. A flat list of keys doesn't help when you don't know what a key is called, only what you want to do.

## How it works

1. **Pick a task.** Open it and you get 11 rows, each with a key count and a short description.
2. **Browse the keys.** Enter on a row opens just that category as `mode`, `key` and description. `<C-b>` goes back and `<C-a>` searches all keys at once.
3. **Search by intent.** Every key carries hidden search words, so typing `delete` or `rename` finds the right keys even when the description says something else.

Enter on a key copies it to the clipboard. There is also a category that explains notation like `<C-x>` and `<leader>`, plus built-in reference for motions, operators, text objects, registers and macros.

## Your own keys

Pass categories to `setup()`. Your entries are marked with a star and collect under "My maps". A key with the same key and mode as a built-in one replaces it, and a new category id creates a new category.

The sync check reads your live mappings and lists any map from your config that is missing from the cheatsheet under "Unlisted maps". Plugin maps and Neovim defaults are ignored.

## Install

With lazy.nvim:

```lua
{
    "alexcloudstar/cheatsheet.nvim",
    dependencies = { "nvim-telescope/telescope.nvim" },
    opts = {},
}
```

Then run `:Cheatsheet` or press `<leader>cc`. It needs Neovim 0.10 or newer and telescope.nvim. The repo is MIT licensed and has plenary tests for the merge and sync logic.

I keep my own entries in my [dotfiles](/projects/dotfiles/) and pass them in through `setup()`.
