rafi / vim-config

Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Rafael Bodill's Neovim Config

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

βš™οΈ See "Extending" for customizing configuration and adding plugins.

🚩 git tag vim tracks the last revision using Dein.nvim and plugins.yaml. Since then, the entire configuration has been rewritten to use lazy.nvim and Lua.

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

  • Fast startup time β€” plugins are almost entirely lazy-loaded!
  • Robust, yet light-weight
  • Plugin management with folke/lazy.nvim. Use with :Lazy or Space+l
  • Install LSP, DAP, linters, and formatters. Use with :Mason or Space+mm
  • LSP configuration with nvim-lspconfig
  • telescope.nvim centric work-flow with lists (try ;+f…)
  • Custom context-menu (try it! ;+c)
  • Auto-complete extensive setup with nvim-cmp (try Tab or Ctrl+Space in insert-mode)
  • Structure view with [hedyhli/outline.nvim]
  • Git features using lewis6991/gitsigns.nvim, sindrets/diffview.nvim, and more
  • Session management with folke/persistence.nvim
  • Unobtrusive, yet informative status & tab lines
  • Premium color-schemes
  • Remembers last-used colorscheme

Screenshot

Vim screenshot

Prerequisites

  • git β‰₯ 2.19.0 (brew install git)
  • Neovim β‰₯ v0.9.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.

  3. Inside Neovim, run :LazyExtras and use x to install extras.

Enjoy! πŸ˜„

Install LSP, DAP, Linters, Formatters

Use :Mason (or Space+mm) 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

  • after/ β€” Language specific custom settings and plugins.
  • lua/ β€” Lua configurations
    • config/ β€” Custom user configuration
    • plugins/ β€” Custom user plugins (or lua/plugins.lua)
    • rafi/
  • snippets/ β€” Personal code snippets

Extending

Extend: Config

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)

Extend: Plugins

Install "extras" plugins using :LazyExtras and installing with x. This saves choices in lazyvim.json which you can also edit manually, here's a recommended starting point:

{
  "extras": [
    "lazyvim.plugins.extras.dap.core",
    "lazyvim.plugins.extras.dap.nlua",
    "lazyvim.plugins.extras.editor.mini-files",
    "lazyvim.plugins.extras.lang.json",
    "lazyvim.plugins.extras.lang.markdown",
    "lazyvim.plugins.extras.test.core",
    "rafi.plugins.extras.coding.align",
    "rafi.plugins.extras.coding.cmp-git",
    "rafi.plugins.extras.coding.copilot",
    "rafi.plugins.extras.editor.harpoon",
    "rafi.plugins.extras.editor.miniclue",
    "rafi.plugins.extras.lang.ansible",
    "rafi.plugins.extras.lang.docker",
    "rafi.plugins.extras.lang.go",
    "rafi.plugins.extras.lang.helm",
    "rafi.plugins.extras.lang.python",
    "rafi.plugins.extras.lang.yaml",
    "rafi.plugins.extras.org.zk",
    "rafi.plugins.extras.ui.alpha",
    "rafi.plugins.extras.ui.deadcolumn"
  ],
  "news": [],
  "version": 2
}

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 {

  -- Disable default tabline
  { 'akinsho/bufferline.nvim', enabled = false },

  -- And choose a different one!
  -- { 'itchyny/lightline.vim' },
  -- { 'vim-airline/vim-airline' },
  -- { 'glepnir/galaxyline.nvim' },
  -- { 'glepnir/spaceline.vim' },
  -- { 'liuchengxu/eleline.vim' },

  -- Enable GitHub's Copilot
  { import = 'rafi.plugins.extras.coding.copilot' },

  -- Enable incline, displaying filenames on each window
  { import = 'rafi.plugins.extras.ui.incline' },

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

  -- Change built-in 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',
      },
    },
  },

}

Extend: Defaults

  1. Create lua/config/options.lua and set any Neovim/RafiVim/LazyVim features: (Default values are shown)

    -- Enable auto format on-save
    vim.g.autoformat = false
    
    -- Enable elite-mode (hjkl mode. arrow-keys resize window)
    vim.g.elite_mode = false
    
    -- When enabled, 'q' closes any window
    vim.g.window_q_mapping = true
    
    -- Display structure in statusline by default
    vim.g.structure_status = false
  2. Create lua/config/setup.lua and return any of these functions:

    • opts() β€” Override RafiVim setup options
    • lazy_opts() β€” override LazyVim setup options

    For example: (Default values are shown)

    local M = {}
    
    ---@return table
    function M.opts()
      return {
        -- See lua/rafi/config/init.lua for all options
      }
    end
    
    ---@return table
    function M.lazy_opts()
      return {
        -- See https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/init.lua
      }
    end
    
    return M

Extend: LSP Settings

To override LSP configurations, you can 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' },
              },
            },
          },
        },
      }
    }

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
stevearc/conform.nvim Lightweight yet powerful formatter plugin
mfussenegger/nvim-lint Asynchronous linter plugin

Editor Plugins

Name Description
folke/lazy.nvim Modern plugin manager for Neovim
nmac427/guess-indent.nvim Automatic indentation style detection
tweekmonster/helpful.vim Display vim version numbers in docs
lambdalisue/suda.vim An alternative sudo for Vim and Neovim
christoomey/tmux-navigator Seamless navigation between tmux panes and vim splits
folke/persistence.nvim Simple lua plugin for automated session management
RRethy/vim-illuminate Highlights other uses of the word under the cursor
mbbill/undotree Ultimate undo history visualizer
folke/flash.nvim Search labels, enhanced character motions
haya14busa/vim-edgemotion Jump to the edge of block
folke/zen-mode.nvim Distraction-free coding for Neovim
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
akinsho/toggleterm.nvim Persist and toggle multiple terminals
[hedyhli/outline.nvim] Code outline sidebar powered by LSP
s1n7ax/nvim-window-picker Window picker
rest-nvim/rest.nvim Fast Neovim http client written in Lua
dnlhc/glance.nvim Pretty window for navigating LSP locations
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
hrsh7th/nvim-cmp Completion plugin for neovim written in Lua
hrsh7th/cmp-nvim-lsp nvim-cmp source for neovim builtin LSP client
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
andersevenrud/cmp-tmux Tmux completion source for nvim-cmp
L3MON4D3/LuaSnip Snippet Engine written in Lua
rafamadriz/friendly-snippets Preconfigured snippets for different languages
saadparwaiz1/cmp_luasnip Luasnip completion source for nvim-cmp
windwp/nvim-autopairs Powerful auto-pair plugin with multiple characters support
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.splitjoin Split and join arguments
echasnovski/mini.trailspace Trailing whitespace highlight and remove
AndrewRadev/linediff.vim Perform diffs on blocks of code
AndrewRadev/dsf.vim Delete surrounding function call
echasnovski/mini.ai Extend and create a/i textobjects

Colorscheme Plugins

Name Description
rafi/theme-loader.nvim Use last-used colorscheme
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
nyoom-engineering/oxocarbon.nvim Dark and light theme inspired by IBM Carbon
ribru17/bamboo.nvim Warm green theme
catppuccin/nvim Soothing pastel theme

Git Plugins

Name Description
lewis6991/gitsigns.nvim Git signs written in pure lua
sindrets/diffview.nvim Tabpage interface for cycling through diffs
NeogitOrg/neogit Magit clone for Neovim
FabijanZulj/blame.nvim Git blame visualizer
rhysd/git-messenger.vim Reveal the commit messages under the cursor
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-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
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
reasonml-editor/vim-reason-plus Reason syntax and indent

UI Plugins

Name Description
nvim-tree/nvim-web-devicons Lua fork of vim-devicons
MunifTanjim/nui.nvim UI Component Library
rcarriga/nvim-notify Fancy notification manager for NeoVim
stevearc/dressing.nvim Improve the default vim-ui interfaces
akinsho/bufferline.nvim Snazzy tab/bufferline
folke/noice.nvim Replaces the UI for messages, cmdline and the popupmenu
SmiteshP/nvim-navic Shows your current code context in winbar/statusline
chentau/marks.nvim Interacting with and manipulating marks
lukas-reineke/indent-blankline.nvim Visually display indent levels
echasnovski/mini.indentscope Visualize and operate on indent scope
folke/which-key.nvim Create key bindings that stick
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
itchyny/calendar.vim Calendar application

Extra Plugins

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

You can view all LazyVim's extras at www.lazyvim.org/extras.

These plugins aren't enabled by default. You'll have to install them using :LazyExtras and installing with x. (Or import them using specs) See Extend: Plugins on how to add plugins and examples.

Following are extra-extras available with Rafi's Neovim on-top of LazyVim's:

Extra Plugins: Coding

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

Name Repository Description
align echasnovski/mini.align Align text interactively
cmp-git petertriho/cmp-git Git source for nvim-cmp
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
minipairs echasnovski/mini.pairs Automatically manage character pairs
sandwich machakann/vim-sandwich Search, select, and edit sandwich text objects

Extra Plugins: Editor

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

Name Repository Description
anyjump pechorin/any-jump.vim Jump to any definition and references without overhead
flybuf glepnir/flybuf.nvim List buffers in a float window
harpoon ThePrimeagen/harpoon Marks for navigating your project
minivisits echasnovski/mini.visits Track and reuse file system visits
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: Git

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

Name Repository Description
fugitive tpope/vim-fugitive Git client, including junegunn/gv.vim

Extra Plugins: Lang

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

Name Description
ansible syntax pearofducks/ansible-vim, lsp, lint
docker syntax, lsp, lint
go syntax, lsp, formatter, dap leoluz/nvim-dap-go, test nvim-neotest/neotest-go
helm syntax, lsp
python syntax, lsp, dap mfussenegger/nvim-dap-python, test, rafi/neoconf-venom.nvim
yaml syntax, lsp, schemas, b0o/SchemaStore.nvim

Extra Plugins: Linting

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

Name Description
ruff ruff for python

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
kiwi serenevoid/kiwi.nvim Stripped down VimWiki
telekasten renerocksai/telekasten.nvim Manage text-based, markdown zettelkasten or wiki with telescope
vimwiki vimwiki/vimwiki Personal Wiki for Vim
zk-nvim zk-org/zk-nvim Extension for the zk plain text note-taking assistant

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
alpha goolord/alpha-nvim Fast and fully programmable greeter
barbecue utilyre/barbecue.nvim VS Code like winbar
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
miniclue echasnovski/mini.clue Show next key clues
minimap echasnovski/mini.map Window with buffer text overview, scrollbar and highlights
symbols-outline simrat39/symbols-outline.nvim Tree like view for symbols using LSP

LazyVim Extras

LazyVim is imported in specs (see lua/rafi/config/lazy.lua) Therefore, you can import any of the "Extras" plugins defined at LazyVim/LazyVim and documented in lazyvim.org.

These are only highlights:

Language

  • lazyvim.plugins.extras.lang.json
  • lazyvim.plugins.extras.lang.markdown
  • lazyvim.plugins.extras.lang.terraform
  • lazyvim.plugins.extras.lang.typescript

DAP (Debugging)

Test

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
gj / gk 𝐍 𝐕 𝐒 Jump to edge upward/downward haya14busa/vim-edgemotion
gh / gl 𝐍 𝐕 Easier line-wise movement g^ g$
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 under cursor za
Shift+Return 𝐍 Focus the current fold by closing all others zMzv
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
Ctrl+Tab 𝐍 Go to next tab :tabnext
Ctrl+ShiftTab 𝐍 Go to previous tab :tabprevious
Alt+j or ] 𝐍 Go to next tab :tabnext
Alt+k or [ 𝐍 Go to previous tab :tabprevious
Alt+{ 𝐍 Move tab backward :-tabmove
Alt+} 𝐍 Move tab forward :+tabmove

Selection

Key Mode Action Plugin or Mapping
Space+Space 𝐍 𝐕 Toggle visual-line mode V / Escape
v / V 𝐕 Increment/shrink selection nvim-treesitter
gpp 𝐍 Select last paste
sg 𝐕 Replace within selected area
Ctrl+r 𝐕 Replace selection with step-by-step confirmation
> / < 𝐕 Indent and re-select
Tab / Shift+Tab 𝐕 Indent and re-select
I / gI / A 𝐕 Force blockwise operation

Jump To

Key Mode Action Plugin or Mapping
], or [, 𝐍 Next/previous parameter akinsho/bufferline.nvim
]] or [[ 𝐍 Next/previous reference RRethy/vim-illuminate
]q or [q 𝐍 Next/previous on quick-fix :cnext / :cprev
]a or [a 𝐍 Next/previous on location-list :lnext / :lprev
]d or [d 𝐍 Next/previous diagnostics
]e or [e 𝐍 Next/previous error
]w or [w 𝐍 Next/previous warning
]b or [b 𝐍 Next/previous buffer akinsho/bufferline.nvim
]f or [f 𝐍 Next/previous function start echasnovski/mini.ai
]F or [F 𝐍 Next/previous function end echasnovski/mini.ai
]c or [c 𝐍 Next/previous class start echasnovski/mini.ai
]C or [C 𝐍 Next/previous class end echasnovski/mini.ai
]m or [m 𝐍 Next/previous method start echasnovski/mini.ai
]M or [M 𝐍 Next/previous method end echasnovski/mini.ai
]g or [g 𝐍 Next/previous Git hunk lewis6991/gitsigns.nvim
]i or [i 𝐍 Next/previous indent scope echasnovski/mini.indentscope
]s or [s 𝐍 Next/previous misspelled word
]t or [t 𝐍 Next/previous TODO folke/todo-comments.nvim
]z or [z 𝐍 Next/previous whitespace error config/keymaps.lua

Buffers

Key Mode Action Plugin or Mapping
Space+bd 𝐍 Delete buffer echasnovski/mini.bufremove

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

Auto-Completion

Key Mode Action Plugin or Mapping
Tab / Shift-Tab 𝐈 𝐒 Navigate/open completion-menu nvim-cmp
Tab / Shift-Tab 𝐈 𝐒 Navigate snippet placeholders L3MON4D3/LuaSnip
Ctrl+Space 𝐈 Open completion menu nvim-cmp
Enter 𝐈 Select completion item or expand snippet nvim-cmp
Shift+Enter 𝐈 Select and replace with completion item nvim-cmp
Ctrl+n/p 𝐈 Movement in completion pop-up nvim-cmp
Ctrl+f/b 𝐈 Scroll documentation nvim-cmp
Ctrl+d/u 𝐈 Scroll candidates nvim-cmp
Ctrl+e 𝐈 Abort selection and close pop-up nvim-cmp
Ctrl+l 𝐈 Expand snippet at cursor L3MON4D3/LuaSnip
Ctrl+c 𝐈 Close completion menu nvim-cmp

LSP

Key Mode Action Plugin or Mapping
gr 𝐍 Go to references plugins/lsp/keymaps.lua
gR 𝐍 List references with Trouble folke/trouble.nvim
gd 𝐍 Go to definition plugins/lsp/keymaps.lua
gD 𝐍 Go to declaration plugins/lsp/keymaps.lua
gI 𝐍 Go to implementation plugins/lsp/keymaps.lua
gy 𝐍 Go to type definition plugins/lsp/keymaps.lua
K 𝐍 Show hover help or collapsed fold plugins/lsp/keymaps.lua
gK 𝐍 Show signature help plugins/lsp/keymaps.lua
Space cl 𝐍 Open LSP info window plugins/lsp/keymaps.lua
Space cs 𝐍 Formatter menu selection 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 chi 𝐍 LSP incoming calls plugins/lsp/keymaps.lua
Space cho 𝐍 LSP outgoing calls plugins/lsp/keymaps.lua
Space ud 𝐍 Toggle buffer diagnostics plugins/lsp/keymaps.lua
Space uD 𝐍 Toggle global diagnostics plugins/lsp/keymaps.lua
Space fwa 𝐍 Add workspace folder plugins/lsp/keymaps.lua
Space fwr 𝐍 Remove workspace folder plugins/lsp/keymaps.lua
Space fwl 𝐍 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

Diagnostics

Key Mode Action Plugin or Mapping
Space xt 𝐍 List TODO with Trouble folke/todo-comments.nvim
Space xT 𝐍 List TODO/FIXME with Trouble folke/todo-comments.nvim
Space st 𝐍 Select TODO with Telescope folke/todo-comments.nvim
Space sT 𝐍 Select TODO/FIXME with Telescope folke/todo-comments.nvim
Space xx 𝐍 Toggle Trouble folke/trouble.nvim
Space xd 𝐍 Toggle Trouble document folke/trouble.nvim
Space xw 𝐍 Toggle Trouble workspace folke/trouble.nvim
Space xq 𝐍 Toggle Quickfix via Trouble folke/trouble.nvim
Space xl 𝐍 Toggle Locationlist via Trouble folke/trouble.nvim

Coding

Key Mode Action Plugin or Mapping
Ctrl+q 𝐍 Start recording macro q
Space cf 𝐍 𝐕 Format [plugins/formatting.lua]
Space cF 𝐍 𝐕 Format injected langs [plugins/formatting.lua]
Space cc 𝐍 Generate doc annotations [danymat/neogen]
Shift+Return 𝐈 Start new line from any cursor position <C-o>o
] Space 𝐍 Add new line below o<Esc>
[ Space 𝐍 Add new line above O<Esc>
gc 𝐍 𝐕 Comment prefix echasnovski/mini.comment
gcc 𝐍 𝐕 Toggle comments echasnovski/mini.comment
Space+j or k 𝐍 𝐕 Move lines down/up :m …
Space+v 𝐍 𝐕 Toggle single-line comments echasnovski/mini.comment
Space+dd 𝐍 𝐕 Duplicate line or selection config/keymaps.lua
Space+p 𝐍 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

Search, Substitute, Diff

Key Mode Action Plugin or Mapping
* / # 𝐍 𝐕 Search partial words g* / g#
g* / g# 𝐍 𝐕 Search whole-word forward/backward * / #
Escape 𝐍 Clear search highlight :nohlsearch
Backspace 𝐍 Match bracket %
Space+bf 𝐍 Diff current windows in tab windo diffthis
ss 𝐍 𝐕 𝐎 Flash jump folke/flash.nvim
S 𝐍 𝐕 𝐎 Flash treesitter folke/flash.nvim
r 𝐎 Flash remote folke/flash.nvim
R 𝐕 𝐎 Flash treesitter search folke/flash.nvim
Ctrl+s 𝐂 Toggle flash in search input folke/flash.nvim

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

File Operations

Key Mode Action Plugin or Mapping
Space+cd 𝐍 Switch tab to the directory of current buffer :tcd %:p:h
Space+w 𝐍 Write buffer to file :write
Ctrl+s 𝐍 𝐕 𝐂 Write buffer to file :write

Editor UI

Key Mode Action Plugin or Mapping
Space ub 𝐍 Toggle structure scope in winbar SmiteshP/nvim-navic
Space uf 𝐍 Toggle format on Save config/keymaps.lua
Space us 𝐍 Toggle spell-checker :setlocal spell!
Space ul 𝐍 Toggle line numbers :setlocal nonumber!
Space uL 𝐍 Toggle relative line numbers :setlocal norelativenumber!
Space uo 𝐍 Toggle hidden characters :setlocal nolist!
Space uu 𝐍 Toggle highlighted search :set hlsearch!
Space uw 𝐍 Toggle wrap :setlocal wrap! …
Space ue 𝐍 Toggle indentation lines lukas-reineke/indent-blankline.nvim
Space uh 𝐍 Toggle inlay-hints config/keymaps.lua
Space ui 𝐍 Show highlight groups for word vim.show_pos
Space up 𝐍 Disable auto-pairs windwp/nvim-autopairs
Space ur 𝐍 Redraw, clear hlsearch, and diff update config/keymaps.lua
Space un 𝐍 Dismiss all notifications rcarriga/nvim-notify

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
sp 𝐍 Choose a window to edit s1n7ax/nvim-window-picker
sw 𝐍 Switch editing window with selected s1n7ax/nvim-window-picker
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 …

Plugins

Key Mode Action Plugin or Mapping
;+c 𝐍 Open context-menu lua/rafi/util/contextmenu.lua
gCtrl+o 𝐍 Navigate to previous file on jumplist util/edit.lua
gCtrl+i 𝐍 Navigate to next file on jumplist util/edit.lua
Ctrl+/ 𝐍 Toggle terminal akinsho/toggleterm.nvim
Space l 𝐍 Open Lazy folke/lazy.nvim
Space o 𝐍 Open Outline side [hedyhli/outline.nvim]
Space ? 𝐍 Open the macOS dictionary on current word :!open dict://
Space cp 𝐍 Toggle Markdown preview iamcco/markdown-preview.nvim
Space P 𝐍 Use Marked 2 for real-time Markdown preview Marked 2
Space mc 𝐍 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 gu 𝐍 Open undo-tree mbbill/undotree
Space gb 𝐍 Git blame FabijanZulj/blame.nvim
Space gB 𝐍 Git blame in window FabijanZulj/blame.nvim
Space gm 𝐍 Reveal commit under cursor rhysd/git-messenger.vim
Space go 𝐍 𝐕 Open SCM detailed URL in browser ruifm/gitlinker.nvim
Space mg 𝐍 Open Neogit NeogitOrg/neogit
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 mh 𝐍 Open HTTP Rest UI rest-nvim/rest.nvim
Space mt 𝐍 𝐕 Toggle highlighted word t9md/vim-quickhl
Space mo 𝐍 Update Markdown TOC mzlogin/vim-markdown-toc
Space zz 𝐍 Toggle distraction-free writing folke/zen-mode.nvim

Plugin: Mini.Surround

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

Key Mode Action
sa & movement 𝐍 𝐕 Add surrounding
cs & movement 𝐍 Replace surrounding
ds & movement 𝐍 Delete surrounding
gzf & movement 𝐍 Find surrounding (to the right)
gzF & movement 𝐍 Find surrounding (to the left)
gzh & movement 𝐍 Highlight surrounding
gzn & movement 𝐍 Update neighbor lines

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 hr 𝐍 𝐕 Reset hunk
Space hu 𝐍 Undo stage hunk
Space hS 𝐍 Stage buffer
Space hR 𝐍 Reset buffer
Space hd 𝐍 Diff against the index
Space hD 𝐍 Diff against the last commit
Space hw 𝐍 Toggle word diff
Space hl 𝐍 Publish hunks to location-list
Space htb 𝐍 Toggle git current line blame
Space htd 𝐍 Toggle git deleted
Space htw 𝐍 Toggle git word diff
Space htl 𝐍 Toggle git line highlight
Space htn 𝐍 Toggle git number highlight
Space hts 𝐍 Toggle git signs
ih 𝐎 Select inner hunk operator

Plugin: Diffview

See sindrets/diffview.nvim for more mappings and usage information.

Key Mode Action
Space gd 𝐍 Diff view file history
Space gv 𝐍 Diff view open
Within diffview "view" window
Tab / Shift+Tab 𝐍 Select next/previous entry
; a 𝐍 Focus file
; e 𝐍 Toggle files panel
Within diffview "file" panel
q 𝐍 Close
h 𝐍 Previous entry
o 𝐍 Focus entry
gf 𝐍 Open file
sg 𝐍 Open file in split
st 𝐍 Open file in new tab
Ctrl+r 𝐍 Refresh files
; e 𝐍 Toggle panel
Within diffview "history" panel
q 𝐍 Close diffview
o 𝐍 Focus entry
O 𝐍 Show options

Plugin: Telescope

See telescope.nvim for more mappings and usage information.

Key Mode Action
;r 𝐍 Results of the previous picker
;p 𝐍 List of the previous pickers
;f 𝐍 File search
;g 𝐍 Grep search
;b 𝐍 Buffers
;h 𝐍 Highlights
;j 𝐍 Jump points
;m 𝐍 Marks
;o 𝐍 Vim options
;t 𝐍 LSP workspace symbols
;v 𝐍 𝐕 Yank history
;n 𝐍 Plugins
;k 𝐍 Thesaurus
;u 𝐍 Spelling suggestions
;x 𝐍 Old files
;w 𝐍 Zk notes
;z 𝐍 Zoxide directories
;; 𝐍 Command history
;: 𝐍 Commands
;/ 𝐍 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 sc 𝐍 Colorschemes
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
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 Telescope
Tab or Shift+Tab 𝐍 𝐈 Next/previous candidate
Ctrl+d/u 𝐍 𝐈 Scroll down/upwards
Ctrl+f/b 𝐍 𝐈 Scroll preview down/upwards
Ctrl+j/k 𝐍 𝐈 Scroll preview vertically
Ctrl+h/l 𝐍 𝐈 Scroll preview horizontally
J or K 𝐍 Select candidates up/downwards
st 𝐍 Open in a new tab
sg 𝐍 Open in a vertical split
sv 𝐍 Open in a split
* 𝐍 Toggle selection
u 𝐍 Drop all
w 𝐍 Smart send to quickfix list
e 𝐍 Send to quickfix list
Ctrl+q 𝐈 Send to quickfix list
dd 𝐍 Delete entry (buffer list)
! 𝐍 Edit in command line

Plugin: Neo-Tree

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

Key Mode Action
fe / Spacee 𝐍 Toggle file explorer (root)
fE / SpaceE 𝐍 Toggle file explorer (cwd)
ge 𝐍 Open Git explorer
be 𝐍 Open Buffer explorer
xe 𝐍 Open Document explorer
;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
Tab or Shift+Tab 𝐍 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 toggle
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
F 𝐍 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: 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

Plugin: Zk

See zk-org/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

About

Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim.


Languages

Language:Lua 99.4%Language:Makefile 0.6%