Skip to content

Lean mean Neovim machine, carefully crafted with ❀️ Use with latest Neovim.

Notifications You must be signed in to change notification settings

rafi/vim-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rafael Bodill's Neovim Config

Lean mean Neovim machine, 30-45ms startup time. Works best with Neovim β‰₯0.8

⚠️ BREAKING CHANGES: The last major update uses lazy.nvim for plugin management, and an entire Lua rewrite. Please read "Extending" to learn how to customize and modify.

I encourage you to fork this repo and create your own experience. Learn how to tweak and change Neovim to the way YOU like it. This is my cultivation of years of tweaking, use it as a git remote and stay in-touch with upstream for reference or cherry-picking.

Table of Contents (πŸ”Ž Click to expand/collapse)

Features

Screenshot

Vim screenshot

Prerequisites

  • git β‰₯ 2.19.0 (brew install git)
  • Neovim β‰₯ v0.8.0 (brew install neovim)

Optional, but highly recommended:

  • bat (brew install bat)
  • fd (brew install fd)
  • fzf (brew install fzf)
  • ripgrep (brew install ripgrep)
  • zoxide (brew install zoxide)

Install

1. Let's clone this repo! Clone to ~/.config/nvim

mkdir -p ~/.config
git clone git@github.com:rafi/vim-config.git ~/.config/nvim
cd ~/.config/nvim

2. Run nvim (will install all plugins the first time).

It's highly recommended running :checkhealth to ensure your system is healthy and meet the requirements.

Enjoy! πŸ˜„

Install LSP, DAP, Linters, Formatters

Use :Mason to install and manage LSP servers, DAP servers, linters and formatters. See :h mason.nvim and williamboman/mason.nvim for more information.

Language-Server Protocol (LSP)

You can install LSP servers using :Mason UI, or :MasonInstall <name>, or :LspInstall <name> (use Tab to list available servers). See Mason's PACKAGES.md for the official list, and the Language server mapping list. You can also view at :h mason-lspconfig-server-map

You'll need utilities like npm and curl to install some extensions, see requirements (or :h mason-requirements) for more information.

See lua/rafi/plugins/lsp/init.lua for custom key-mappings and configuration for some language-servers.

Recommended LSP

:MasonInstall ansible-language-server bash-language-server css-lsp
:MasonInstall dockerfile-language-server gopls html-lsp json-lsp
:MasonInstall lua-language-server marksman pyright sqlls
:MasonInstall svelte-language-server typescript-language-server
:MasonInstall tailwindcss-language-server
:MasonInstall vim-language-server yaml-language-server

and more…

Recommended Linters

:MasonInstall vint shellcheck editorconfig-checker flake8 gitlint hadolint
:MasonInstall markdownlint mypy selene shellharden write-good yamllint

Recommended Formatters

:MasonInstall black fixjson gofumpt golines isort
:MasonInstall shfmt sql-formatter stylua

Recommended Fonts

On macOS with Homebrew, choose one of the Nerd Fonts, for example, here are some popular fonts:

brew tap homebrew/cask-fonts
brew search nerd-font
brew install --cask font-victor-mono-nerd-font
brew install --cask font-iosevka-nerd-font-mono
brew install --cask font-hack-nerd-font
brew install --cask font-fira-code

Upgrade

To upgrade packages and plugins:

  • Neovim plugins: :Lazy update
  • Mason packages: :Mason and press U

To update Neovim configuration from my repo:

git pull --ff --ff-only

Structure

  • init.lua β€” Entry-point, plugin initialization.
  • neoconf.json β€” LSP servers options.
  • after/ β€” Language specific custom settings and plugins.
  • lua/ β€” Lua configurations
    • config/ β€” Custom user configuration
    • plugins/ β€” Custom user plugins (or lua/plugins.lua)
    • lsp/ β€” Custom user LSP configurations
    • rafi/
  • snippets/ β€” Personal code snippets
  • themes/ β€” Colorscheme overrides

Extending

Extend: Config

There are 2 distinct ways to extend configuration:

  1. The second option is to fork this repository and create a directory lua/config with one or more of these files: (Optional)

    • lua/config/autocmds.lua β€” Custom auto-commands
    • lua/config/options.lua β€” Custom options
    • lua/config/keymaps.lua β€” Custom key-mappings
    • lua/config/setup.lua β€” Override config, see extend defaults.

    Adding plugins or override existing options:

    • lua/plugins/*.lua or lua/plugins.lua β€” Plugins (See lazy.nvim for syntax)

    This option is recommended if you're not planning on customizing a lot, or you'd like to keep a close look of source-code.

  2. Create your own clean ~/.config/nvim, and leverage lazy.nvim to import my configuration specs. You can use LazyVim/starter and just change lua/plugins/example.lua to:

    return {
      {
        "rafi/vim-config",      -- Will load ALL my plugins and config/*
        import = "rafi.plugins",
        opts = true,
      },
      { import = "plugins" },   -- Your local lua/plugins*
    }

    This will import and set up my lua/rafi/config/*, lua/rafi/plugins/* and then yours.

    If you'd rather import only specific plugins or specs, and not the entire plugin catalog, use import and remove opts. For example:

    return {
     {
       "rafi/vim-config",
       import = "rafi.plugins.colorscheme"
     },
     { import = "rafi.plugins.editor" },
     { import = "rafi.plugins.ui" },
    
     { import = "plugins" },  -- Your local lua/plugins*
    }

    This example will NOT load my lua/rafi/config/*, and only install plugins categorically from colorscheme.lua, editor.lua, and ui.lua. At last, it will load all your plugins defined in lua/plugins.lua or lua/plugins/*.

    This option has the advantage of partially importing different "plugin specs" from various sources.

Extend: Plugins

For installing/overriding/disabling plugins, create a lua/plugins/foo.lua file (or lua/plugins/foo/bar.lua or simply lua/plugins.lua) and manage your own plugin collection. You can add or override existing plugins' options, or just disable them all-together. Here's an example:

return {
  -- Import "extras" plugins. See "Extra Plugins" in README
  { import = 'rafi.plugins.extras.ui.incline' },

  -- Disable builtin plugins
  { 'shadmansaleh/lualine.nvim', enabled = false },
  { 'limorris/persisted.nvim', enabled = false },

  -- Change builtin plugins' options
  {
    'nvim-treesitter/nvim-treesitter',
    opts = {
      ensure_installed = {
        'bash', 'comment', 'css', 'diff', 'dockerfile', 'fennel', 'fish',
        'gitcommit', 'gitignore', 'gitattributes', 'git_rebase', 'go', 'gomod',
        'gosum', 'gowork', 'graphql', 'hcl', 'html', 'javascript', 'jsdoc',
        'json', 'json5', 'jsonc', 'jsonnet', 'lua', 'make', 'markdown',
        'markdown_inline', 'nix', 'perl', 'php', 'pug', 'python', 'regex',
        'rst', 'ruby', 'rust', 'scss', 'sql', 'svelte', 'terraform', 'toml',
        'tsx', 'typescript', 'vim', 'vimdoc', 'vue', 'yaml', 'zig',
      },
    },
  },

  -- GitHub plugins

  -- Choose only ONE of these statuslines ;)
  { 'itchyny/lightline.vim' },
  { 'vim-airline/vim-airline' },
  { 'glepnir/galaxyline.nvim' },
  { 'glepnir/spaceline.vim' },
  { 'liuchengxu/eleline.vim' },
}

Extend: Defaults

If you are using this distro as-is, and aren't importing it externally, create lua/config/setup.lua and return any of these functions:

  • override()
  • lazy_opts()

For example: (Default values are shown)

local M = {}

---@return table
function M.override()
  return {
    defaults = {
      autocmds = true, -- Load lua/rafi/config/autocmds.lua
      keymaps = true,  -- Load lua/rafi/config/keymaps.lua
    },
    features = {
      elite_mode = false,      -- Set arrow-keys to window resize
      window_q_mapping = true, -- Disable regular window closing with 'q'
    },
    icons = {
      -- See lua/rafi/config/init.lua for icon configuration…
    },
  }
end

---@return table
function M.lazy_opts()
  return {}
end

return M

If you are importing this distro via lazy.nvim specs, you can use opts. For example:

return {
  {
    "rafi/vim-config",
    import = "rafi.plugins",
    opts = {
      features = {
        elite_mode = false,
        window_q_mapping = true,
      },
    },
  },
}

Note: rafi.config.options can't be disabled here since it's loaded prematurely. You can disable loading options.lua with the following line at the top of your lua/config/setup.lua or init.lua:

package.loaded['rafi.config.options'] = true

Extend: LSP Settings

To override LSP configurations, you can do either:

  1. Customize per project's .neoconf.json

  2. Or, override server options with nvim-lspconfig plugin, for example:

    {
      'neovim/nvim-lspconfig',
      opts = {
        servers = {
          yamlls = {
            filetypes = { 'yaml', 'yaml.ansible', 'yaml.docker-compose' },
          },
          lua_ls = {
            settings = {
              Lua = {
                workspace = { checkThirdParty = false },
                completion = { callSnippet = 'Replace' },
              },
            },
          },
        },
      }
    }
  3. Or, create a lua/lsp/<server_name>.lua file. Must return a table with config function. For example, create lua/lsp/go.lua:

    local opts = {
      settings = {
        gopls = {
          staticcheck = true
        }
      }
    }
    
    return {
      config = function()
        return opts
      end
    }

Plugin Highlights

  • Plugin management with cache and lazy loading for speed
  • Auto-completion with Language-Server Protocol (LSP)
  • Project-aware tabline
  • Extensive syntax highlighting with nvim-treesitter.

Note that 95% of the plugins are lazy-loaded.

Plugins Included

List of plugins (πŸ”Ž Click to expand/collapse)

Completion & Code-Analysis

Name Description
neovim/nvim-lspconfig Quickstart configurations for the Nvim LSP client
folke/neoconf.nvim Manage global and project-local settings
folke/neodev.nvim Neovim setup for init.lua and plugin development
williamboman/mason.nvim Portable package manager for Neovim
williamboman/mason-lspconfig.nvim Mason extension for easier lspconfig integration
hrsh7th/cmp-nvim-lsp nvim-cmp source for neovim builtin LSP client
b0o/SchemaStore.nvim JSON schemas for Neovim
rafi/neoconf-venom.nvim Automatically set virtual-environment python runtime
jose-elias-alvarez/null-ls.nvim Inject LSP diagnostics, code actions, and more

Editor Plugins

Name Description
folke/lazy.nvim Modern plugin manager for Neovim
nmac427/guess-indent.nvim Automatic indentation style detection
christoomey/tmux-navigator Seamless navigation between tmux panes and vim splits
tweekmonster/helpful.vim Display vim version numbers in docs
lambdalisue/suda.vim An alternative sudo for Vim and Neovim
olimorris/persisted.nvim Simple session management for Neovim with git branching
RRethy/vim-illuminate Highlights other uses of the word under the cursor
mbbill/undotree Ultimate undo history visualizer
ggandor/flit.nvim Enhanced f/t motions for Leap
ggandor/leap.nvim General-purpose motion plugin
kana/vim-niceblock Make blockwise Visual mode more useful
haya14busa/vim-edgemotion Jump to the edge of block
folke/zen-mode.nvim Distraction-free coding for Neovim
folke/which-key.nvim Create key bindings that stick
tversteeg/registers.nvim Preview the contents of the registers
folke/todo-comments.nvim Highlight, list and search todo comments in your projects
folke/trouble.nvim Pretty lists to help you solve all code diagnostics
sindrets/diffview.nvim Tabpage interface for cycling through diffs
akinsho/toggleterm.nvim Persist and toggle multiple terminals
simrat39/symbols-outline.nvim Tree like view for symbols using LSP
s1n7ax/nvim-window-picker Window picker
rest-nvim/rest.nvim Fast Neovim http client written in Lua
mickael-menu/zk-nvim Extension for the zk plain text note-taking assistant
nvim-pack/nvim-spectre Find the enemy and replace them with dark power
echasnovski/mini.bufremove Helper for removing buffers
mzlogin/vim-markdown-toc Generate table of contents for Markdown files

Coding Plugins

Name Description
sbdchd/neoformat Format code with numerous tools
hrsh7th/nvim-cmp Completion plugin for neovim written in Lua
hrsh7th/cmp-buffer nvim-cmp source for buffer words
hrsh7th/cmp-path nvim-cmp source for path
hrsh7th/cmp-emoji nvim-cmp source for emoji
saadparwaiz1/cmp_luasnip Luasnip completion source for nvim-cmp
andersevenrud/compe-tmux Tmux completion source for nvim-compe/cmp
L3MON4D3/LuaSnip Snippet Engine written in Lua
rafamadriz/friendly-snippets Preconfigured snippets for different languages
ziontee113/SnippetGenie Snippet creation tool
danymat/neogen Annotation generator
echasnovski/mini.pairs Automatically manage character pairs
echasnovski/mini.surround Fast and feature-rich surround actions
JoosepAlviste/nvim-ts-context-commentstring Set the commentstring based on the cursor location
echasnovski/mini.comment Fast and familiar per-line commenting
echasnovski/mini.trailspace Trailing whitespace highlight and remove
echasnovski/mini.bracketed Go forward/backward with square brackets
echasnovski/mini.ai Extend and create a/i textobjects
echasnovski/mini.splitjoin Split and join arguments
AndrewRadev/linediff.vim Perform diffs on blocks of code
AndrewRadev/dsf.vim Delete surrounding function call

Colorscheme Plugins

Name Description
rafi/neo-hybrid.vim Modern dark colorscheme, hybrid improved
rafi/awesome-colorschemes Awesome color-schemes
AlexvZyl/nordic.nvim Nord for Neovim, but warmer and darker
folke/tokyonight.nvim Clean, dark Neovim theme
rebelot/kanagawa.nvim Inspired by the colors of the famous painting by Katsushika Hokusai
olimorris/onedarkpro.nvim OneDarkPro theme
EdenEast/nightfox.nvim Highly customizable theme
catppuccin/nvim Soothing pastel theme
nyoom-engineering/oxocarbon.nvim Dark and light theme inspired by IBM Carbon

Git Plugins

Name Description
lewis6991/gitsigns.nvim Git signs written in pure lua
TimUntersberger/neogit Magit clone for Neovim
tpope/vim-fugitive Git client
junegunn/gv.vim Git log browser
ruifm/gitlinker.nvim Browse git repositories
rhysd/committia.vim Pleasant editing on Git commit messages

Misc Plugins

Name Description
hoob3rt/lualine.nvim statusline plugin written in pure lua
nvim-neo-tree/neo-tree.nvim File explorer written in Lua
nvim-telescope/telescope.nvim Find, Filter, Preview, Pick. All lua.
jvgrootveld/telescope-zoxide Telescope extension for Zoxide
rafi/telescope-thesaurus.nvim Browse synonyms from thesaurus.com
nvim-telescope/telescope-frecency.nvim Intelligent prioritization when selecting files from your editing history
kkharji/sqlite.lua SQLite LuaJIT binding with a simple API
nvim-lua/plenary.nvim Lua functions library

Treesitter & Syntax

Name Description
nvim-treesitter/nvim-treesitter Nvim Treesitter configurations and abstraction layer
nvim-treesitter/nvim-treesitter-textobjects Textobjects using treesitter queries
nvim-treesitter/nvim-treesitter-context Show code context
RRethy/nvim-treesitter-endwise Wisely add "end" in various filetypes
windwp/nvim-ts-autotag Use treesitter to auto close and auto rename html tag
andymass/vim-matchup Modern matchit and matchparen
iloginow/vim-stylus Better vim plugin for stylus
chrisbra/csv.vim Handling column separated data
towolf/vim-helm Syntax for Helm templates (yaml + gotmpl + sprig)
mustache/vim-mustache-handlebars Mustache and handlebars syntax
lifepillar/pgsql.vim PostgreSQL syntax and indent
MTDL9/vim-log-highlighting Syntax highlighting for generic log files
tmux-plugins/vim-tmux Plugin for tmux.conf
reasonml-editor/vim-reason-plus Reason syntax and indent
vmchale/just-vim Syntax highlighting for Justfiles
pearofducks/ansible-vim Improved YAML support for Ansible

UI Plugins

Name Description
nvim-tree/nvim-web-devicons Lua fork of vim-devicons
MunifTanjim/nui.nvim UI Component Library
rafi/tabstrip.nvim Minimal and opinionated tabline
rafi/theme-loader.nvim Use last-used colorscheme
folke/noice.nvim Replaces the UI for messages, cmdline and the popupmenu
stevearc/dressing.nvim Improve the default vim-ui interfaces
SmiteshP/nvim-navic Shows your current code context in winbar/statusline
rcarriga/nvim-notify Fancy notification manager for NeoVim
chentau/marks.nvim Interacting with and manipulating marks
lukas-reineke/indent-blankline.nvim Visually display indent levels
tenxsoydev/tabs-vs-spaces.nvim Hint and fix deviating indentation
t9md/vim-quickhl Highlight words quickly
kevinhwang91/nvim-bqf Better quickfix window in Neovim
uga-rosa/ccc.nvim Super powerful color picker/colorizer plugin
dnlhc/glance.nvim Pretty window for navigating LSP locations
itchyny/calendar.vim Calendar application

Extra Plugins

List of extras (πŸ”Ž Click to expand/collapse)

These plugins aren't enabled by default. You'll have to import them using specs. See Extend: Plugins on how to add plugins.

For example:

return {
  { import = 'rafi.plugins.extras.ui.incline' },
  { import = 'rafi.plugins.extras.org.vimwiki' },
}

Extra Plugins: Coding

Spec: rafi.plugins.extras.coding.<name>

Name Repository Description
autopairs windwp/nvim-autopairs Autopairs for neovim written by lua
copilot zbirenbaum/copilot.lua Fully featured & enhanced copilot
editorconfig sgur/vim-editorconfig EditorConfig plugin written entirely in Vimscript
emmet mattn/emmet-vim Provides support for expanding abbreviations alΓ‘ emmet
sandwich machakann/vim-sandwich Search, select, and edit sandwich text objects

Extra Plugins: Diagnostics

Spec: rafi.plugins.extras.diagnostics.<name>

Name Description
proselint proselint: null-ls source and mason package
write-good write-good: null-ls source and mason package

Extra Plugins: Editor

Spec: rafi.plugins.extras.editor.<name>

Key Name Description
anyjump pechorin/any-jump.vim Jump to any definition and references without overhead
flybuf glepnir/flybuf.nvim List buffers in a float window
sidebar sidebar-nvim/sidebar.nvim Generic and modular lua sidebar
ufo kevinhwang91/nvim-ufo Make folds look modern and keep a high performance

Extra Plugins: Formatting

Spec: rafi.plugins.extras.formatting.<name>

Name Description
prettier prettier: null-ls source and mason package

Extra Plugins: LSP

Spec: rafi.plugins.extras.lsp.<name>

Key Name Description
gtd hrsh7th/nvim-gtd LSP's go-to definition plugin
inlayhints lvimuser/lsp-inlayhints.nvim Partial implementation of LSP inlay hint
lightbulb kosayoda/nvim-lightbulb VSCode πŸ’‘ for neovim's built-in LSP
yaml-companion yaml-companion.nvim Get, set and autodetect YAML schemas in your buffers

Extra Plugins: Org

Spec: rafi.plugins.extras.org.<name>

Key Name Description
vimwiki vimwiki/vimwiki Personal Wiki for Vim

Extra Plugins: Treesitter

Spec: rafi.plugins.extras.treesitter.<name>

Key Name Description
treesj Wansmer/treesj Splitting and joining blocks of code

Extra Plugins: UI

Spec: rafi.plugins.extras.ui.<name>

Key Name Description
barbecue utilyre/barbecue.nvim VS Code like winbar
bufferline akinsho/bufferline.nvim Snazzy tab/bufferline
cursorword itchyny/cursorword Underlines word under cursor
cybu ghillb/cybu.nvim Cycle buffers with a customizable notification window
deadcolumn Bekaboo/deadcolumn.nvim Show colorcolumn dynamically
goto-preview rmagatti/goto-preview Preview definitions using floating windows
incline b0o/incline.nvim Floating statuslines
minimap echasnovski/mini.map Window with buffer text overview, scrollbar and highlights
statuscol luukvbaal/statuscol.nvim Configurable 'statuscolumn' and click handlers

Custom Key-mappings

Note that,

  • Leader key set as Space
  • Local-Leader key set as ; and used for navigation and search (Telescope and Neo-tree)
  • Disable ← ↑ β†’ ↓ in normal mode by enabling elite_mode.
Key-mappings (πŸ”Ž Click to expand/collapse) Modes: 𝐍=normal 𝐕=visual 𝐒=select 𝐈=insert 𝐎=operator 𝐂=command

Navigation

Key Mode Action Plugin or Mapping
j / k 𝐍 𝐕 Cursor moves through display-lines g j/k
g+j / k 𝐍 𝐕 𝐒 Jump to edge upward/downward haya14busa/vim-edgemotion
gh / gl 𝐍 𝐕 Easier line-wise movement g ^/$
Space+Space 𝐍 𝐕 Toggle visual-line mode V / Escape
zl / zh 𝐍 Scroll horizontally and vertically wider z4 l/h
Ctrl+j 𝐍 Move to split below christoomey/tmux-navigator
Ctrl+k 𝐍 Move to upper split christoomey/tmux-navigator
Ctrl+h 𝐍 Move to left split christoomey/tmux-navigator
Ctrl+l 𝐍 Move to right split christoomey/tmux-navigator
Return 𝐍 Toggle fold za
Shift+Return 𝐍 Focus the current fold by closing all others zMzvzt
]a or [a 𝐍 Next/previous on location-list :lnext / :lprev
]m or [m 𝐍 Next/previous function nvim-treesitter-textobjects
]s or [s 𝐍 Next/previous whitespace error config/keymaps.lua
]g or [g 𝐍 Next/previous Git hunk lewis6991/gitsigns.nvim
]] or [[ 𝐍 Next/previous reference RRethy/vim-illuminate
Ctrl+f 𝐂 Move cursor forwards in command Right
Ctrl+b 𝐂 Move cursor backwards in command Left
Ctrl+h 𝐂 Move cursor to the beginning in command Home
Ctrl+l 𝐂 Move cursor to the end in command End

File Operations

Key Mode Action Plugin or Mapping
Space+cd 𝐍 Switch to the directory of opened buffer :lcd %:p:h
gf 𝐍 Open file under the cursor in a vsplit :rightbelow wincmd f
Space+w 𝐍 Write buffer to file :write
Ctrl+s 𝐍 𝐕 𝐂 Write buffer to file :write

Auto-Completion

Key Mode Action Plugin or Mapping
Tab / Shift-Tab 𝐈 Navigate/open completion-menu nvim-cmp
Tab / Shift-Tab 𝐈 𝐒 Navigate snippet placeholders nvim-cmp
Ctrl+Space 𝐈 Open completion menu nvim-cmp
Enter 𝐈 Select completion item or expand snippet nvim-cmp
Ctrl+p/n 𝐈 Movement in completion pop-up nvim-cmp
Ctrl+b/f 𝐈 Scroll documentation nvim-cmp
Ctrl+e 𝐈 Abort selection and close pop-up nvim-cmp
Ctrl+l 𝐈 Expand snippet at cursor L3MON4D3/LuaSnip
Space cc 𝐍 Generate annotations danymat/neogen

LSP

Key Mode Action Plugin or Mapping
gD 𝐍 Go to declaration plugins/lsp/keymaps.lua
gd 𝐍 Go to definition plugins/lsp/keymaps.lua
gr 𝐍 Go to references plugins/lsp/keymaps.lua
gy 𝐍 Go to type definition plugins/lsp/keymaps.lua
gi 𝐍 Go to implementation plugins/lsp/keymaps.lua
K 𝐍 Show hover help or collapsed fold plugins/lsp/keymaps.lua
gK 𝐍 Show signature help plugins/lsp/keymaps.lua
Ctrl+g h 𝐈 Show signature help plugins/lsp/keymaps.lua
]d or [d 𝐍 Jump to next/prev diagnostics plugins/lsp/keymaps.lua
]e or [e 𝐍 Jump to next/prev diagnostics plugins/lsp/keymaps.lua
Space cl 𝐍 Open LSP info window plugins/lsp/keymaps.lua
Space cf 𝐍 𝐕 Format plugins/lsp/keymaps.lua
Space cr 𝐍 Rename plugins/lsp/keymaps.lua
Space ce 𝐍 Open diagnostics window plugins/lsp/keymaps.lua
Space ca 𝐍 𝐕 Code action plugins/lsp/keymaps.lua
Space cA 𝐍 Source action plugins/lsp/keymaps.lua
Space tp 𝐍 Toggle buffer diagnostics plugins/lsp/keymaps.lua
Space tP 𝐍 Toggle global diagnostics plugins/lsp/keymaps.lua
,wa 𝐍 Add workspace folder plugins/lsp/keymaps.lua
,wr 𝐍 Remove workspace folder plugins/lsp/keymaps.lua
,wl 𝐍 List workspace folders plugins/lsp/keymaps.lua
gpd 𝐍 Glance definitions dnlhc/glance.nvim
gpr 𝐍 Glance references dnlhc/glance.nvim
gpy 𝐍 Glance type definitions dnlhc/glance.nvim
gpi 𝐍 Glance implementations dnlhc/glance.nvim

Edit

Key Mode Action Plugin or Mapping
Shift+Return 𝐈 Start new line from any cursor position <C-o>o
< 𝐕 Indent to left and re-select <gv
> 𝐕 Indent to right and re-select `>gv
Tab 𝐕 Indent to right and re-select `>gv
Shift+Tab 𝐕 Indent to left and re-select <gv
gc 𝐍 𝐕 Comment prefix echasnovski/mini.comment
gcc 𝐍 𝐕 Toggle comments echasnovski/mini.comment
Space+v 𝐍 𝐕 Toggle single-line comments echasnovski/mini.comment
Space+j or k 𝐍 𝐕 Move lines down/up :m …
Space+d 𝐍 𝐕 Duplicate line or selection config/keymaps.lua
Space+cp 𝐍 Duplicate paragraph yap<S-}>p
Space+cw 𝐍 Remove all spaces at EOL echasnovski/mini.trailspace
sj / sk 𝐍 Join/split arguments echasnovski/mini.splitjoin
dsf / csf 𝐍 Delete/change surrounding function call AndrewRadev/dsf.vim
I / gI 𝐕 Blockwise insert kana/vim-niceblock
A 𝐕 Blockwise append kana/vim-niceblock

Search & Replace

Key Mode Action Plugin or Mapping
* / # 𝐍 𝐕 Search partial words g* / g#
g* / g# 𝐍 𝐕 Search whole-word forward/backward * / #
Backspace 𝐍 Match bracket %
gpp 𝐍 Select last paste config/keymaps.lua
sg 𝐕 Replace within selected area :s/⌴/gc
Ctrl+r 𝐕 Replace selection with step-by-step confirmation :%s/\V/⌴/gc
ss / SS 𝐍 𝐕 Leap forward/backward ggandor/leap.nvim
f / F / t / T 𝐍 𝐕 Enhanced motions ggandor/flit.nvim

Clipboard

Key Mode Action Plugin or Mapping
p or P 𝐕 Paste without yank :let @+=@0
Space+y 𝐍 Copy relative file-path to clipboard config/keymaps.lua
Space+Y 𝐍 Copy absolute file-path to clipboard config/keymaps.lua

Command & History

Key Mode Action Plugin or Mapping
! 𝐍 Shortcut for shell command :!
g! 𝐍 Read vim command into buffer :put=execute('⌴')
Ctrl+n / p 𝐂 Switch history search pairs ↓ / ↑
↓ / ↑ 𝐂 Switch history search pairs Ctrl n/p

Diagnostics

Key Mode Action Plugin or Mapping
;+dt 𝐍 Open TODO Telescope list folke/todo-comments.nvim
Space+xt 𝐍 Open TODO list folke/todo-comments.nvim
Space+xT 𝐍 Open TODO/FIXME list folke/todo-comments.nvim
Space+xq 𝐍 Open Quickfix via Trouble folke/trouble.nvim
Space+xl 𝐍 Open Locationlist via Trouble folke/trouble.nvim
Space+e 𝐍 Open Trouble document folke/trouble.nvim
Space+r 𝐍 Open Trouble workspace folke/trouble.nvim

Editor UI

Key Mode Action Plugin or Mapping
Space ts 𝐍 Toggle spell-checker :setlocal spell!
Space tn 𝐍 Toggle line numbers :setlocal nonumber!
Space tl 𝐍 Toggle hidden characters :setlocal nolist!
Space th 𝐍 Toggle highlighted search :set hlsearch!
Space tw 𝐍 Toggle wrap :setlocal wrap! …
Space ti 𝐍 Toggle indentation lines lukas-reineke/indent-blankline.nvim
Space ui 𝐍 Show highlight groups for word vim.show_pos
Space uC 𝐍 Select colorscheme config/keymaps.lua
Space un 𝐍 Dismiss all notifications rcarriga/nvim-notify
Space ur 𝐍 Redraw, clear hlsearch, and diff update config/keymaps.lua
g1 𝐍 Go to first tab :tabfirst
g9 𝐍 Go to last tab :tablast
g5 𝐍 Go to previous tab :tabprevious
Ctrl+Tab 𝐍 Go to next tab :tabnext
Ctrl+ShiftTab 𝐍 Go to previous tab :tabprevious
Alt+j 𝐍 Go to next tab :tabnext
Alt+k 𝐍 Go to previous tab :tabprevious
Alt+{ 𝐍 Move tab backward :-tabmove
Alt+} 𝐍 Move tab forward :+tabmove

Custom Tools & Plugins

Key Mode Action Plugin or Mapping
;+c 𝐍 Open context-menu lua/rafi/lib/contextmenu.lua
gCtrl+o 𝐍 Navigate to previous file on jumplist lib/edit.lua
gCtrl+i 𝐍 Navigate to next file on jumplist lib/edit.lua
s+p 𝐍 Choose a window to edit s1n7ax/nvim-window-picker
s+w 𝐍 Switch editing window with selected s1n7ax/nvim-window-picker
Space l 𝐍 Open Lazy folke/lazy.nvim
Space o 𝐍 Open structure window simrat39/symbols-outline.nvim
Space f 𝐍 Show current structure scope in winbar SmiteshP/nvim-navic
Space ? 𝐍 Open the macOS dictionary on current word :!open dict://
Space P 𝐍 Use Marked 2 for real-time Markdown preview Marked 2
Space cp 𝐍 Open color-picker uga-rosa/ccc.nvim
Space tt 𝐍 Open terminal (root dir) config/keymaps.lua
Space tT 𝐍 Open terminal (cwd) config/keymaps.lua
Space tg 𝐍 Open Lazygit (root dir) config/keymaps.lua
Space tG 𝐍 Open Lazygit (cwd) config/keymaps.lua
Space cc 𝐍 Generate doc danymat/neogen
Space gu 𝐍 Open undo-tree mbbill/undotree
Space gd 𝐍 Git diff tpope/vim-fugitive
Space gb 𝐍 Git blame tpope/vim-fugitive
Space go 𝐍 𝐕 Open SCM detailed URL in browser ruifm/gitlinker.nvim
Space ml 𝐍 Append modeline to end of buffer config/keymaps.lua
Space mda 𝐕 Sequentially mark region for diff AndrewRadev/linediff.vim
Space mdf 𝐕 Mark region for diff and compare if more than one AndrewRadev/linediff.vim
Space mds 𝐍 Shows the comparison for all marked regions AndrewRadev/linediff.vim
Space mdr 𝐍 Removes the signs denoting the diff regions AndrewRadev/linediff.vim
Space mt 𝐍 𝐕 Toggle highlighted word t9md/vim-quickhl
Space zz 𝐍 Toggle distraction-free writing folke/zen-mode.nvim

Window Management

Key Mode Action Plugin or Mapping
q 𝐍 Quit window (if last window, quit nvim) :quit
Ctrl+x 𝐍 Rotate window placement C-w x
sv 𝐍 Horizontal split :split
sg 𝐍 Vertical split :vsplit
st 𝐍 Open new tab :tabnew
so 𝐍 Close other windows :only
sb 𝐍 Previous buffer :b#
sc 𝐍 Close current buffer :close
sd 𝐍 Delete buffer :bdelete
sq 𝐍 Quit window :quit
sx 𝐍 Delete buffer, leave blank window :enew β”‚ bdelete
sz 𝐍 Toggle window zoom :vertical resize β”‚ resize
sh 𝐍 Toggle colorscheme background=dark/light :set background …

Plugin: Mini.Bracketed

Go forward/backward with square brackets. See echasnovski/mini.bracketed for more mappings and usage information.

Key Target Mapping
[B [b ]b ]B Buffer MiniBracketed.buffer()
[C [c ]c ]C Comment block MiniBracketed.comment()
[X [x ]x ]X Conflict marker MiniBracketed.conflict()
[D [d ]d ]D Diagnostic MiniBracketed.diagnostic()
[F [f ]f ]F File on disk MiniBracketed.file()
[I [i ]i ]I Indent change MiniBracketed.indent()
[J [j ]j ]J Jump from jumplist inside current buffer MiniBracketed.jump()
[L [l ]l ]L Location from location list MiniBracketed.location()
[O [o ]o ]O Old files MiniBracketed.oldfile()
[Q [q ]q ]Q Quickfix entry from quickfix list MiniBracketed.quickfix()
[T [t ]t ]T Tree-sitter node and parents MiniBracketed.treesitter()
[U [u ]u ]U Undo states from specially tracked linear history MiniBracketed.undo()
[W [w ]w ]W Window in current tab MiniBracketed.window()
[Y [y ]y ]Y Yank selection replacing the latest put region MiniBracketed.yank()

Plugin: Mini.Surround

See echasnovski/mini.surround for more mappings and usage information.

Key Mode Action
ds 𝐍 Delete around with query
dss 𝐍 Delete around automatically
cs 𝐍 Change around with query
css 𝐍 Change around automatically
sa 𝐍 𝐕 𝐎 Trigger add operator
sd 𝐍 𝐕 Trigger delete operator
sdb 𝐍 Delete around automatically
sr 𝐍 𝐕 Trigger replace operator
srb 𝐍 Replace around automatically
ir 𝐕 𝐎 Inner automatically
ab 𝐕 𝐎 Around automatically

Plugin: Gitsigns

See lewis6991/gitsigns.nvim for more mappings and usage information.

Key Mode Action
]g or ]g 𝐍 Next/previous Git hunk
gs 𝐍 Preview hunk
Space hp 𝐍 Preview hunk inline
Space hb 𝐍 Blame line
Space hs 𝐍 𝐕 Stage hunk
Space hu 𝐍 Undo stage hunk
Space hr 𝐍 𝐕 Reset hunk
Space hR 𝐍 Reset buffer
Space hd 𝐍 Toggle deleted
Space hw 𝐍 Toggle word diff
Space hl 𝐍 Publish hunks to location-list

Plugin: Telescope

See telescope.nvim for more mappings and usage information.

Key Mode Action
;r 𝐍 Results of the previous picker
;R 𝐍 List of the previous pickers
;f 𝐍 File search
;g 𝐍 Grep search
;b 𝐍 Buffers
;x 𝐍 Old files
;v 𝐍 𝐕 Yank history
;m 𝐍 Marks
;n 𝐍 Plugins
;j 𝐍 Jump points
;k 𝐍 Thesaurus
;u 𝐍 Spelling suggestions
;o 𝐍 Vim options
;s 𝐍 Sessions
;t 𝐍 LSP workspace symbols
;h 𝐍 Highlights
;w 𝐍 Zk notes
;z 𝐍 Zoxide directories
;; 𝐍 Command history
;/ 𝐍 Search history
;dd 𝐍 LSP definitions
;di 𝐍 LSP implementations
;dr 𝐍 LSP references
;da 𝐍 𝐕 LSP code actions
Space / 𝐍 Buffer fuzzy find
Space gs 𝐍 Git status
Space gr 𝐍 Git branches
Space gl 𝐍 Git commits
Space gL 𝐍 Git buffer commits
Space gh 𝐍 Git stashes
Space gt 𝐍 Find symbols matching word under cursor
Space gf 𝐍 Find files matching word under cursor
Space gg 𝐍 𝐕 Grep word under cursor
Space sd 𝐍 Document diagnostics
Space sD 𝐍 Workspace diagnostics
Space sh 𝐍 Help tags
Space sk 𝐍 Key-maps
Space sm 𝐍 Man pages
Space ss 𝐍 LSP document symbols
Space sS 𝐍 LSP workspace symbols
Space st 𝐍 Todo list
Space sT 𝐍 Todo/Fix/Fixme list
Space sw 𝐍 Grep string
Space sc 𝐍 Colorschemes
Within Telescope window
? 𝐍 Keymaps help screen
Ctrl+Space 𝐍 Move from none fuzzy search to fuzzy
jj or Escape 𝐈 Leave Insert mode
i 𝐍 Enter Insert mode (filter input)
q or Escape 𝐍 Exit denite window
Tab or Shift+Tab 𝐍 𝐈 Next/previous candidate
Ctrl+d/u 𝐍 𝐈 Scroll down/upwards
Ctrl+f/b 𝐍 𝐈 Scroll preview down/upwards
J or K 𝐍 Select candidates up/downwards
st 𝐍 Open in a new tab
sg 𝐍 Open in a vertical split
sv 𝐍 Open in a split
w 𝐍 Smart send to quickfix list
e 𝐍 Send to quickfix list
dd 𝐍 Delete entry (buffer list)

Plugin: Neo-Tree

See nvim-neo-tree/neo-tree.nvim for more mappings and usage information.

Key Mode Action
;e 𝐍 Open file-explorer (toggle)
;a 𝐍 Focus current file in file-explorer
Within Neo-Tree window
g? 𝐍 Show help
q 𝐍 Close window
j or k 𝐍 Move up and down the tree
> or < 𝐍 Next or previous source
]g or [g 𝐍 Jump to next/previous git modified node
l 𝐍 Toggle collapse/expand directory or open file
h 𝐍 Collapse directory tree
Return 𝐍 Select window to open file
gr 𝐍 Grep in current position
gf 𝐍 Find files in current position
. 𝐍 Set as root directory
Backspace 𝐍 Change into parent directory
sv or S 𝐍 Open file in a horizontal split
sg or s 𝐍 Open file in a vertical split
st or t 𝐍 Open file in new tab
p 𝐍 Preview node
a 𝐍 Create new directories and/or files
N 𝐍 Create new directory
r 𝐍 Rename file or directory
dd 𝐍 Delete
c / m 𝐍 Copy/move
y / x / P 𝐍 Clipboard copy/cut/paste
! 𝐍 Filter
D 𝐍 Filter directories
# 𝐍 Fuzzy sorter
/ 𝐍 Filter on submit
Ctrl+c 𝐍 Clear filter
Ctrl+r or R 𝐍 Refresh
fi / fe 𝐍 Include/exclude
H 𝐍 Toggle hidden files
e 𝐍 Toggle auto-expand window width
w 𝐍 Toggle window width
z 𝐍 Collapse all nodes

Plugin: Zk

See mickael-menu/zk-nvim and zk for more mappings and usage information.

Key Mode Action
Space+zn 𝐍 Ask for title and create new note
Space+zo 𝐍 Browse notes sorted by modification time
Space+zt 𝐍 Browse tags
Space+zf 𝐍 Search notes
Space+zf 𝐕 Search notes with selection
Space+zb 𝐍 Show backlinks
Space+zl 𝐍 Show links

Plugin: Spectre

See nvim-pack/nvim-spectre for more mappings and usage information.

Key Mode Action
Space+sp 𝐍 Open spectre window (search & replace)
Space+sp 𝐕 Open spectre with selection

Plugin: Marks

See chentau/marks.nvim for more mappings and usage information.

Key Mode Action
m, 𝐍 Set the next available alphabetical (lowercase) mark
m; 𝐍 Toggle the next available mark at the current line
m a-z 𝐍 Set mark
dm a-z 𝐍 Remove mark
dm- 𝐍 Delete all marks on the current line
dm<Space> 𝐍 Delete all marks in the current buffer
m] 𝐍 Move to next mark
m[ 𝐍 Move to previous mark
m: a-z 𝐍 Preview mark
m/ 𝐍 List marks from all opened buffers