Awesome
Rafael Bodill's Neovim Config
Lean mean Neovim machine, 30-45ms startup time. Works best with Neovim β₯0.10
:gear: See "Extending" for customizing configuration and adding plugins.
:triangular_flag_on_post: 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.
<details> <summary> <strong>Table of Contents</strong> <small><i>(π Click to expand/collapse)</i></small> </summary> <!-- vim-markdown-toc GFM -->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.
- Features
- Screenshot
- Prerequisites
- Install
- Install LSP, DAP, Linters, Formatters
- Recommended Fonts
- Upgrade
- Structure
- Extending
- Plugin Highlights
- Plugins Included
- Extra Plugins
- Custom Key-mappings
Features
- Fast startup time β plugins are almost entirely lazy-loaded!
- Robust, yet light-weight
- Plugin management with folke/lazy.nvim. Use with
:Lazy
or <kbd>Space</kbd>+<kbd>l</kbd> - Install LSP, DAP, linters, and formatters. Use with
:Mason
or <kbd>Space</kbd>+<kbd>mm</kbd> - LSP configuration with nvim-lspconfig
- telescope.nvim centric work-flow with lists (try <kbd>;</kbd>+<kbd>f</kbd>β¦)
- Custom context-menu (try it! <kbd>;</kbd>+<kbd>c</kbd>)
- Auto-complete extensive setup with nvim-cmp (try <kbd>Tab</kbd> or <kbd>Ctrl</kbd>+<kbd>Space</kbd> 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
Prerequisites
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
-
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
-
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. -
Inside Neovim, run
:LazyExtras
and use <kbd>x</kbd> to install extras.
Enjoy! :smile:
Install LSP, DAP, Linters, Formatters
Use :Mason
(or <kbd>Space</kbd>+<kbd>mm</kbd>) 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 <kbd>Tab</kbd> 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
- Pragmata Pro (β¬19 β β¬1,990): My preferred font
- Any of the Nerd 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 <kbd>U</kbd>
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 configurationplugins/
β Custom user plugins (orlua/plugins.lua
)- rafi/
- config/ β Neovim configurations
- autocmd.lua β Auto-commands
- init.lua β Initialization
- keymaps.lua β Key-mappings
- lazy.lua β Entry-point initialization
- options.lua β Editor settings
- plugins/ β Plugins and configurations
- util/ β Utility library
- config/ β Neovim configurations
- 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-commandslua/config/options.lua
β Custom optionslua/config/keymaps.lua
β Custom key-mappingslua/config/setup.lua
β Override config, see extend defaults.
Adding plugins or override existing options:
lua/plugins/*.lua
orlua/plugins.lua
β Plugins (See lazy.nvim specs for syntax)
Extend: Plugins
Install "extras" plugins using :LazyExtras
and installing with <kbd>x</kbd>.
This saves choices in lazyvim.json
which you can also edit manually, here's a
recommended starting point:
{
"extras": [
"lazyvim.plugins.extras.coding.copilot",
"lazyvim.plugins.extras.dap.core",
"lazyvim.plugins.extras.dap.nlua",
"lazyvim.plugins.extras.lang.docker",
"lazyvim.plugins.extras.lang.json",
"lazyvim.plugins.extras.lang.typescript",
"lazyvim.plugins.extras.lang.yaml",
"lazyvim.plugins.extras.test.core",
"rafi.plugins.extras.coding.align",
"rafi.plugins.extras.editor.harpoon2",
"rafi.plugins.extras.git.cmp-git",
"rafi.plugins.extras.lang.ansible",
"rafi.plugins.extras.lang.go",
"rafi.plugins.extras.lang.helm",
"rafi.plugins.extras.lang.markdown",
"rafi.plugins.extras.lang.python",
"rafi.plugins.extras.lang.tmux",
"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 = 'lazyvim.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
-
Create
lua/config/options.lua
and set any Neovim/RafiVim/LazyVim features: (Default values are shown)-- Auto format on-save vim.g.autoformat = false -- 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
-
You can override LazyVim options. For example in
lua/plugins/core.lua
:return { { 'LazyVim/LazyVim', opts = { icons = { diagnostics = { Error = 'ο', Warn = 'ο±', Info = 'ο', }, status = { diagnostics = { error = 'E', warn = 'W', info = 'I', hint = 'H', }, }, }, }, }, }
-
You can override lazy.nvim (package-manager) global options. Create
lua/config/setup.lua
and return this function:lazy_opts()
β override LazyVim setup options
For example:
local M = {} ---@return table function M.lazy_opts() return { -- See https://github.com/folke/lazy.nvim/#%EF%B8%8F-configuration concurrency = jit.os:find('Windows') and (vim.uv.available_parallelism() * 2) or nil, } end return M
-
You can completely override lazy.nvim setup by creating
lua/config/lazy.lua
to replacelua/rafi/config/lazy.lua
with your own procedure.
Extend: LSP Settings
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
<details open> <summary><strong>List of plugins</strong> <small><i>(π Click to expand/collapse)</i></small></summary>Completion & Code-Analysis
Name | Description |
---|---|
neovim/nvim-lspconfig | Quickstart configurations for the Nvim LSP client |
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 |
folke/persistence.nvim | Simple lua plugin for automated session management |
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 | Fancy Window picker |
dnlhc/glance.nvim | Pretty window for navigating LSP locations |
MagicDuck/grug-far.nvim | Search/replace in multiple 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 |
rafamadriz/friendly-snippets | Preconfigured snippets for different languages |
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 |
numToStr/Comment.nvim | Powerful line and block-wise 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 |
folke/lazydev.nvim | Faster LuaLS setup |
Bilal2453/luvit-meta | Manage libuv types with lazy |
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 |
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 for a word |
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 |
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 |
---|---|
echasnovski/mini.icons | Icon provider |
MunifTanjim/nui.nvim | UI Component Library |
rcarriga/nvim-notify | Fancy notification manager |
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 |
Extra Plugins
<details open> <summary><strong>List of extras</strong> <small><i>(π Click to expand/collapse)</i></small></summary>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 <kbd>x</kbd>. (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 |
chainsaw | chrisgrieser/nvim-chainsaw | Create log statements on the fly |
editorconfig | sgur/vim-editorconfig | EditorConfig plugin written entirely in Vimscript |
emmet | mattn/emmet-vim | Provides support for expanding abbreviations alΓ‘ emmet |
luasnip | L3MON4D3/LuaSnip saadparwaiz1/cmp_luasnip | Snippet Engine and cmp source |
mini-pairs | echasnovski/mini.pairs | Automatically manage character pairs |
neogen | danymat/neogen | Annotation generator |
sandwich | machakann/vim-sandwich | Search, select, and edit sandwich text objects |
Extra Plugins: Colorscheme
Spec: rafi.plugins.extras.colorscheme.<name>
Name | Repository | Description |
---|---|---|
nordic | AlexvZyl/nordic.nvim | Nord for Neovim, but warmer and darker |
tokyonight | folke/tokyonight.nvim | Clean, dark Neovim theme |
kanagawa | rebelot/kanagawa.nvim | Inspired by the colors of the famous painting by Katsushika Hokusai |
onedarkpro | olimorris/onedarkpro.nvim | OneDarkPro theme |
nightfox | EdenEast/nightfox.nvim | Highly customizable theme |
oxocarbon | nyoom-engineering/oxocarbon.nvim | Dark and light theme inspired by IBM Carbon |
bamboo | ribru17/bamboo.nvim | Warm green theme |
catppuccin | catppuccin/nvim | Soothing pastel theme |
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 |
mini-visits | echasnovski/mini.visits | Track and reuse file system visits |
rest | rest-nvim/rest.nvim | Fast Neovim http client written in Lua |
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 |
---|---|---|
cmp-git | petertriho/cmp-git | Git source for nvim-cmp |
fugitive | tpope/vim-fugitive | Git client, including junegunn/gv.vim |
Extra Plugins: Lang
Spec: rafi.plugins.extras.lang.<name>
Name | Description |
---|---|
ansible | imports lazyvim.plugins.extras.lang.ansible , add syntax and pearofducks/ansible-vim |
go | imports lazyvim.plugins.extras.lang.go , add tools, patterns, etc. |
helm | imports lazyvim.plugins.extras.lang.helm , add filetype patterns |
kubernetes | imports lazyvim.plugins.extras.lang.yaml , add filetype patterns and ramilito/kubectl.nvim |
markdown | imports lazyvim.plugins.extras.lang.markdown , disable headlines, add mzlogin/vim-markdown-toc |
python | imports lazyvim.plugins.extras.lang.python , add syntax and filetype patterns |
tmux | syntax, completion andersevenrud/cmp-tmux, keymaps christoomey/tmux-navigator |
Extra Plugins: LSP
Spec: rafi.plugins.extras.lsp.<name>
Key | Name | Description |
---|---|---|
gtd | hrsh7th/nvim-gtd | LSP's go-to definition plugin |
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 |
---|---|---|
calendar | itchyny/calendar.vim | Calendar application |
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 |
bookmarks | tomasky/bookmarks.nvim | Bookmarks plugin with global file store |
ccc | uga-rosa/ccc.nvim | Super powerful color picker/colorizer plugin |
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 |
headlines | lukas-reineke/headlines.nvim | Adds horizontal highlights for headlines and code background. |
illuminate | RRethy/vim-illuminate | Highlights other uses of the word under the cursor |
incline | b0o/incline.nvim | Floating statuslines |
marks | chentoast/marks.nvim | Interacting with and manipulating marks |
mini-clue | echasnovski/mini.clue | Show next key clues |
mini-map | 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)
- Spec:
lazyvim.plugins.extras.dap.<name>
- See lazyvim/plugins/extras/dap
Test
- Spec:
lazyvim.plugins.extras.test.<name>
- See lazyvim/plugins/extras/test
Custom Key-mappings
Note that,
- Leader key set as <kbd>Space</kbd>
- Local-Leader key set as <kbd>;</kbd> and used for navigation and search (Telescope and Neo-tree)
- Disable <kbd>β</kbd> <kbd>β</kbd> <kbd>β</kbd> <kbd>β</kbd> in normal mode by enabling
elite_mode
.
Navigation
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>j</kbd> / <kbd>k</kbd> | π π | Cursor moves through display-lines | <small>g j/k </small> |
<kbd>gj</kbd> / <kbd>gk</kbd> | π π π | Jump to edge upward/downward | <small>haya14busa/vim-edgemotion</small> |
<kbd>gh</kbd> / <kbd>gl</kbd> | π π | Easier line-wise movement | <small>g^ g$ </small> |
<kbd>zl</kbd> / <kbd>zh</kbd> | π | Scroll horizontally and vertically wider | <small>z4 l/h </small> |
<kbd>Ctrl</kbd>+<kbd>j</kbd> | π | Move to split below | <small><C-w>j or christoomey/tmux-navigator</small> |
<kbd>Ctrl</kbd>+<kbd>k</kbd> | π | Move to upper split | <small><C-w>k or christoomey/tmux-navigator</small> |
<kbd>Ctrl</kbd>+<kbd>h</kbd> | π | Move to left split | <small><C-w>h or christoomey/tmux-navigator</small> |
<kbd>Ctrl</kbd>+<kbd>l</kbd> | π | Move to right split | <small><C-w>l or christoomey/tmux-navigator</small> |
<kbd>Return</kbd> | π | Toggle fold under cursor | <small>za </small> |
<kbd>Shift</kbd>+<kbd>Return</kbd> | π | Focus the current fold by closing all others | <small>zMzv </small> |
<kbd>Ctrl</kbd>+<kbd>f</kbd> | π | Move cursor forwards in command | <kbd>Right</kbd> |
<kbd>Ctrl</kbd>+<kbd>b</kbd> | π | Move cursor backwards in command | <kbd>Left</kbd> |
<kbd>Ctrl</kbd>+<kbd>h</kbd> | π | Move cursor to the beginning in command | <kbd>Home</kbd> |
<kbd>Ctrl</kbd>+<kbd>l</kbd> | π | Move cursor to the end in command | <kbd>End</kbd> |
<kbd>Ctrl</kbd>+<kbd>Tab</kbd> | π | Go to next tab | <small>:tabnext </small> |
<kbd>Ctrl</kbd>+<kbd>Shift</kbd><kbd>Tab</kbd> | π | Go to previous tab | <small>:tabprevious </small> |
<kbd>Alt</kbd>+<kbd>j</kbd> or <kbd>]</kbd> | π | Go to next tab | <small>:tabnext </small> |
<kbd>Alt</kbd>+<kbd>k</kbd> or <kbd>[</kbd> | π | Go to previous tab | <small>:tabprevious </small> |
<kbd>Alt</kbd>+<kbd>{</kbd> | π | Move tab backward | <small>:-tabmove </small> |
<kbd>Alt</kbd>+<kbd>}</kbd> | π | Move tab forward | <small>:+tabmove </small> |
Selection
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Space</kbd>+<kbd>Space</kbd> | π π | Toggle visual-line mode | <small>V / <kbd>Escape</kbd></small> |
<kbd>v</kbd> / <kbd>V</kbd> | π | Increment/shrink selection | <small>nvim-treesitter</small> |
<kbd>vsp</kbd> | π | Select last paste | <small>config/keymaps.lua</small> |
<kbd>sg</kbd> | π | Replace within selected area | <small>config/keymaps.lua</small> |
<kbd>Ctrl</kbd>+<kbd>r</kbd> | π | Replace selection with step-by-step confirmation | <small>config/keymaps.lua</small> |
<kbd>></kbd> / <kbd><</kbd> | π | Indent and re-select | <small>config/keymaps.lua</small> |
<kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | π | Indent and re-select | <small>config/keymaps.lua</small> |
<kbd>I</kbd> / <kbd>gI</kbd> / <kbd>A</kbd> | π | Force blockwise operation | <small>config/keymaps.lua</small> |
Jump To
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>],</kbd> or <kbd>[,</kbd> | π | Next/previous parameter | <small>akinsho/bufferline.nvim</small> |
<kbd>]q</kbd> or <kbd>[q</kbd> | π | Next/previous on quick-fix | <small>:cnext / :cprev </small> |
<kbd>]a</kbd> or <kbd>[a</kbd> | π | Next/previous on location-list | <small>:lnext / :lprev </small> |
<kbd>]d</kbd> or <kbd>[d</kbd> | π | Next/previous diagnostics | <small>config/keymaps.lua</small> |
<kbd>]e</kbd> or <kbd>[e</kbd> | π | Next/previous error | <small>config/keymaps.lua</small> |
<kbd>]w</kbd> or <kbd>[w</kbd> | π | Next/previous warning | <small>config/keymaps.lua</small> |
<kbd>]b</kbd> or <kbd>[b</kbd> | π | Next/previous buffer | <small>akinsho/bufferline.nvim</small> |
<kbd>]f</kbd> or <kbd>[f</kbd> | π | Next/previous function start | <small>echasnovski/mini.ai</small> |
<kbd>]F</kbd> or <kbd>[F</kbd> | π | Next/previous function end | <small>echasnovski/mini.ai</small> |
<kbd>]c</kbd> or <kbd>[c</kbd> | π | Next/previous class start | <small>echasnovski/mini.ai</small> |
<kbd>]C</kbd> or <kbd>[C</kbd> | π | Next/previous class end | <small>echasnovski/mini.ai</small> |
<kbd>]m</kbd> or <kbd>[m</kbd> | π | Next/previous method start | <small>echasnovski/mini.ai</small> |
<kbd>]M</kbd> or <kbd>[M</kbd> | π | Next/previous method end | <small>echasnovski/mini.ai</small> |
<kbd>]g</kbd> or <kbd>[g</kbd> | π | Next/previous Git hunk | <small>lewis6991/gitsigns.nvim</small> |
<kbd>]i</kbd> or <kbd>[i</kbd> | π | Next/previous indent scope | <small>echasnovski/mini.indentscope</small> |
<kbd>]t</kbd> or <kbd>[t</kbd> | π | Next/previous TODO | <small>folke/todo-comments.nvim</small> |
<kbd>]z</kbd> or <kbd>[z</kbd> | π | Next/previous whitespace error | <small>config/keymaps.lua</small> |
Buffers
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Space</kbd>+<kbd>bd</kbd> | π | Delete buffer | <small>LazyVim.ui.bufremove</small> |
Clipboard
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>p</kbd> or <kbd>P</kbd> | π | Paste without yank | <small>:let @+=@0 </small> |
<kbd>Space</kbd>+<kbd>y</kbd> | π | Copy relative file-path to clipboard | <small>config/keymaps.lua</small> |
<kbd>Space</kbd>+<kbd>Y</kbd> | π | Copy absolute file-path to clipboard | <small>config/keymaps.lua</small> |
Auto-Completion
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Tab</kbd> / <kbd>Shift-Tab</kbd> | π π | Navigate/open completion-menu | <small>nvim-cmp</small> |
<kbd>Tab</kbd> / <kbd>Shift-Tab</kbd> | π π | Navigate snippet placeholders | <small>L3MON4D3/LuaSnip</small> |
<kbd>Ctrl</kbd>+<kbd>Space</kbd> | π | Open completion menu | <small>nvim-cmp</small> |
<kbd>Enter</kbd> | π | Select completion item or expand snippet | <small>nvim-cmp</small> |
<kbd>Shift</kbd>+<kbd>Enter</kbd> | π | Select and replace with completion item | <small>nvim-cmp</small> |
<kbd>Ctrl</kbd>+<kbd>n</kbd>/<kbd>p</kbd> | π | Movement in completion pop-up | <small>nvim-cmp</small> |
<kbd>Ctrl</kbd>+<kbd>f</kbd>/<kbd>b</kbd> | π | Scroll documentation | <small>nvim-cmp</small> |
<kbd>Ctrl</kbd>+<kbd>d</kbd>/<kbd>u</kbd> | π | Scroll candidates | <small>nvim-cmp</small> |
<kbd>Ctrl</kbd>+<kbd>e</kbd> | π | Abort selection and close pop-up | <small>nvim-cmp</small> |
<kbd>Ctrl</kbd>+<kbd>l</kbd> | π | Expand snippet at cursor | <small>L3MON4D3/LuaSnip</small> |
<kbd>Ctrl</kbd>+<kbd>c</kbd> | π | Close completion menu | <small>nvim-cmp</small> |
LSP
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>gr</kbd> | π | Go to references | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gR</kbd> | π | List references with Trouble | <small>folke/trouble.nvim</small> |
<kbd>gd</kbd> | π | Go to definition | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gD</kbd> | π | Go to declaration | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gI</kbd> | π | Go to implementation | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gy</kbd> | π | Go to type definition | <small>plugins/lsp/keymaps.lua</small> |
<kbd>K</kbd> | π | Show hover help or collapsed fold | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gK</kbd> | π | Show signature help | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>cl</kbd> | π | Open LSP info window | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>cr</kbd> | π | Rename | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>ce</kbd> | π | Open diagnostics window | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>co</kbd> | π | Formatter menu selection | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>ca</kbd> | π π | Code action | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>cA</kbd> | π | Source action | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>chi</kbd> | π | LSP incoming calls | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>cho</kbd> | π | LSP outgoing calls | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>ud</kbd> | π | Toggle buffer diagnostics | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>fwa</kbd> | π | Add workspace folder | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>fwr</kbd> | π | Remove workspace folder | <small>plugins/lsp/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>fwl</kbd> | π | List workspace folders | <small>plugins/lsp/keymaps.lua</small> |
<kbd>gpd</kbd> | π | Glance definitions | <small>dnlhc/glance.nvim</small> |
<kbd>gpr</kbd> | π | Glance references | <small>dnlhc/glance.nvim</small> |
<kbd>gpy</kbd> | π | Glance type definitions | <small>dnlhc/glance.nvim</small> |
<kbd>gpi</kbd> | π | Glance implementations | <small>dnlhc/glance.nvim</small> |
Diagnostics
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Space</kbd> <kbd>xt</kbd> | π | List TODO with Trouble | <small>folke/todo-comments.nvim</small> |
<kbd>Space</kbd> <kbd>xT</kbd> | π | List TODO/FIXME with Trouble | <small>folke/todo-comments.nvim</small> |
<kbd>Space</kbd> <kbd>st</kbd> | π | Select TODO with Telescope | <small>folke/todo-comments.nvim</small> |
<kbd>Space</kbd> <kbd>sT</kbd> | π | Select TODO/FIXME with Telescope | <small>folke/todo-comments.nvim</small> |
<kbd>Space</kbd> <kbd>xx</kbd> | π | Toggle Trouble | <small>folke/trouble.nvim</small> |
<kbd>Space</kbd> <kbd>xd</kbd> | π | Toggle Trouble document | <small>folke/trouble.nvim</small> |
<kbd>Space</kbd> <kbd>xw</kbd> | π | Toggle Trouble workspace | <small>folke/trouble.nvim</small> |
<kbd>Space</kbd> <kbd>xq</kbd> | π | Toggle Quickfix via Trouble | <small>folke/trouble.nvim</small> |
<kbd>Space</kbd> <kbd>xl</kbd> | π | Toggle Locationlist via Trouble | <small>folke/trouble.nvim</small> |
Coding
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Ctrl</kbd>+<kbd>q</kbd> | π | Start recording macro | <small>q </small> |
<kbd>Space</kbd> <kbd>cf</kbd> | π π | Format | <small>[plugins/formatting.lua]</small> |
<kbd>Space</kbd> <kbd>cF</kbd> | π π | Format injected langs | <small>[plugins/formatting.lua]</small> |
<kbd>Space</kbd> <kbd>cc</kbd> | π | Generate doc annotations | <small>danymat/neogen</small> |
<kbd>Shift</kbd>+<kbd>Return</kbd> | π | Start new line from any cursor position | <small><C-o>o </small> |
<kbd>]</kbd> <kbd>Space</kbd> | π | Add new line below | <small>o<Esc> </small> |
<kbd>[</kbd> <kbd>Space</kbd> | π | Add new line above | <small>O<Esc> </small> |
<kbd>gc</kbd> | π π | Comment prefix | <small>numToStr/Comment.nvim</small> |
<kbd>gcc</kbd> | π π | Toggle comments | <small>numToStr/Comment.nvim</small> |
<kbd>Space</kbd>+<kbd>j</kbd> or <kbd>k</kbd> | π π | Move lines down/up | <small>:m β¦ |
<kbd>Space</kbd>+<kbd>v</kbd> | π π | Toggle line-wise comments | <small>numToStr/Comment.nvim</small> |
<kbd>Space</kbd>+<kbd>V</kbd> | π π | Toggle block-wise comments | <small>numToStr/Comment.nvim</small> |
<kbd>Space</kbd>+<kbd>dd</kbd> | π π | Duplicate line or selection | <small>config/keymaps.lua</small> |
<kbd>Space</kbd>+<kbd>cw</kbd> | π | Remove all spaces at EOL | <small>echasnovski/mini.trailspace</small> |
<kbd>sj</kbd> / <kbd>sk</kbd> | π | Join/split arguments | <small>echasnovski/mini.splitjoin</small> |
<kbd>dsf</kbd> / <kbd>csf</kbd> | π | Delete/change surrounding function call | <small>AndrewRadev/dsf.vim</small> |
Search, Substitute, Diff
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>*</kbd> / <kbd>#</kbd> | π π | Search partial words | <small>g* / g# </small> |
<kbd>g*</kbd> / <kbd>g#</kbd> | π π | Search whole-word forward/backward | <small>* / # </small> |
<kbd>Escape</kbd> | π | Clear search highlight | <small>:nohlsearch </small> |
<kbd>Backspace</kbd> | π | Match bracket | <small>% </small> |
<kbd>Space</kbd>+<kbd>bf</kbd> | π | Diff current windows in tab | <small>windo diffthis </small> |
<kbd>ss</kbd> | π π π | Flash jump | <small>folke/flash.nvim</small> |
<kbd>S</kbd> | π π π | Flash treesitter | <small>folke/flash.nvim</small> |
<kbd>r</kbd> | π | Flash remote | <small>folke/flash.nvim</small> |
<kbd>R</kbd> | π π | Flash treesitter search | <small>folke/flash.nvim</small> |
<kbd>Ctrl</kbd>+<kbd>s</kbd> | π | Toggle flash in search input | <small>folke/flash.nvim</small> |
Command & History
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>g!</kbd> | π | Read vim command into buffer | <small>:put=execute('β΄') </small> |
<kbd>Ctrl</kbd>+<kbd>n</kbd> / <kbd>p</kbd> | π | Switch history search pairs | <kbd>β</kbd> / <kbd>β</kbd> |
<kbd>β</kbd> / <kbd>β</kbd> | π | Switch history search pairs | <small>Ctrl n /p </small> |
File Operations
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Space</kbd>+<kbd>cd</kbd> | π | Switch tab to the directory of current buffer | <small>:tcd %:p:h </small> |
<kbd>Space</kbd>+<kbd>w</kbd> | π | Write buffer to file | <small>:write </small> |
<kbd>Ctrl</kbd>+<kbd>s</kbd> | π π π | Write buffer to file | <small>:write </small> |
Editor UI
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>Space</kbd> <kbd>ub</kbd> | π | Toggle structure scope in winbar | <small>SmiteshP/nvim-navic</small> |
<kbd>Space</kbd> <kbd>uf</kbd> | π | Toggle format on Save | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>us</kbd> | π | Toggle spell-checker | <small>:setlocal spell! </small> |
<kbd>Space</kbd> <kbd>ul</kbd> | π | Toggle line numbers | <small>:setlocal nonumber! </small> |
<kbd>Space</kbd> <kbd>uL</kbd> | π | Toggle relative line numbers | <small>:setlocal norelativenumber! </small> |
<kbd>Space</kbd> <kbd>uw</kbd> | π | Toggle wrap | <small>:setlocal wrap! </small> β¦ |
<kbd>Space</kbd> <kbd>ue</kbd> | π | Toggle indentation lines | <small>lukas-reineke/indent-blankline.nvim</small> |
<kbd>Space</kbd> <kbd>uh</kbd> | π | Toggle inlay-hints | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>ui</kbd> | π | Show highlight groups for word | <small>vim.show_pos </small> |
<kbd>Space</kbd> <kbd>up</kbd> | π | Disable auto-pairs | <small>windwp/nvim-autopairs</small> |
<kbd>Space</kbd> <kbd>ur</kbd> | π | Redraw, clear hlsearch, and diff update | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>un</kbd> | π | Dismiss all notifications | <small>rcarriga/nvim-notify</small> |
Window Management
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>q</kbd> | π | Quit window (if last window, quit nvim) | <small>:quit </small> |
<kbd>Ctrl</kbd>+<kbd>x</kbd> | π | Rotate window placement | <small>C-w x </small> |
<kbd>sp</kbd> | π | Choose a window to edit | <small>s1n7ax/nvim-window-picker</small> |
<kbd>sw</kbd> | π | Switch editing window with selected | <small>s1n7ax/nvim-window-picker</small> |
<kbd>sv</kbd> | π | Horizontal split | <small>:split </small> |
<kbd>sg</kbd> | π | Vertical split | <small>:vsplit </small> |
<kbd>st</kbd> | π | Open new tab | <small>:tabnew </small> |
<kbd>so</kbd> | π | Close other windows | <small>:only </small> |
<kbd>sb</kbd> | π | Previous buffer | <small>:b# </small> |
<kbd>sc</kbd> | π | Close current buffer | <small>:close </small> |
<kbd>sd</kbd> | π | Delete buffer | <small>:bdelete </small> |
<kbd>sq</kbd> | π | Quit window | <small>:quit </small> |
<kbd>sx</kbd> | π | Delete buffer, leave blank window | <small>:enew β bdelete </small> |
<kbd>sz</kbd> | π | Toggle window zoom | <small>:vertical resize β resize </small> |
<kbd>sh</kbd> | π | Toggle colorscheme background=dark/light | <small>:set background β¦ |
Plugins
Key | Mode | Action | Plugin or Mapping |
---|---|---|---|
<kbd>;</kbd>+<kbd>c</kbd> | π | Open context-menu | <small>lua/rafi/util/contextmenu.lua</small> |
<kbd>g</kbd><kbd>Ctrl</kbd>+<kbd>o</kbd> | π | Navigate to previous file on jumplist | <small>util/edit.lua</small> |
<kbd>g</kbd><kbd>Ctrl</kbd>+<kbd>i</kbd> | π | Navigate to next file on jumplist | <small>util/edit.lua</small> |
<kbd>Ctrl</kbd>+<kbd>/</kbd> | π | Toggle terminal | <small>akinsho/toggleterm.nvim</small> |
<kbd>Space</kbd> <kbd>l</kbd> | π | Open Lazy | <small>folke/lazy.nvim</small> |
<kbd>Space</kbd> <kbd>o</kbd> | π | Open Outline side | <small>[hedyhli/outline.nvim]</small> |
<kbd>Space</kbd> <kbd>?</kbd> | π | Open the macOS dictionary on current word | <small>:!open dict:// </small> |
<kbd>Space</kbd> <kbd>cp</kbd> | π | Toggle Markdown preview | <small>iamcco/markdown-preview.nvim</small> |
<kbd>Space</kbd> <kbd>mc</kbd> | π | Open color-picker | <small>uga-rosa/ccc.nvim</small> |
<kbd>Space</kbd> <kbd>tt</kbd> | π | Open terminal (root dir) | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>tT</kbd> | π | Open terminal (cwd) | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>tg</kbd> | π | Open Lazygit (root dir) | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>tG</kbd> | π | Open Lazygit (cwd) | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>gu</kbd> | π | Open undo-tree | <small>mbbill/undotree</small> |
<kbd>Space</kbd> <kbd>gb</kbd> | π | Git blame | <small>FabijanZulj/blame.nvim</small> |
<kbd>Space</kbd> <kbd>gB</kbd> | π | Git blame in window | <small>FabijanZulj/blame.nvim</small> |
<kbd>Space</kbd> <kbd>gm</kbd> | π | Reveal commit under cursor | <small>rhysd/git-messenger.vim</small> |
<kbd>Space</kbd> <kbd>go</kbd> | π π | Open SCM detailed URL in browser | <small>ruifm/gitlinker.nvim</small> |
<kbd>Space</kbd> <kbd>mg</kbd> | π | Open Neogit | <small>NeogitOrg/neogit</small> |
<kbd>Space</kbd> <kbd>ml</kbd> | π | Append modeline to end of buffer | <small>config/keymaps.lua</small> |
<kbd>Space</kbd> <kbd>mda</kbd> | π | Sequentially mark region for diff | <small>AndrewRadev/linediff.vim</small> |
<kbd>Space</kbd> <kbd>mdf</kbd> | π | Mark region for diff and compare if more than one | <small>AndrewRadev/linediff.vim</small> |
<kbd>Space</kbd> <kbd>mds</kbd> | π | Shows the comparison for all marked regions | <small>AndrewRadev/linediff.vim</small> |
<kbd>Space</kbd> <kbd>mdr</kbd> | π | Removes the signs denoting the diff regions | <small>AndrewRadev/linediff.vim</small> |
<kbd>Space</kbd> <kbd>mh</kbd> | π | Open HTTP Rest UI | <small>rest-nvim/rest.nvim</small> |
<kbd>Space</kbd> <kbd>mt</kbd> | π π | Toggle highlighted word | <small>t9md/vim-quickhl</small> |
<kbd>Space</kbd> <kbd>mo</kbd> | π | Update Markdown TOC | <small>mzlogin/vim-markdown-toc</small> |
<kbd>Space</kbd> <kbd>zz</kbd> | π | Toggle distraction-free writing | <small>folke/zen-mode.nvim</small> |
Plugin: Mini.Surround
See echasnovski/mini.surround for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>sa</kbd> & movement | π π | Add surrounding |
<kbd>cs</kbd> & movement | π | Replace surrounding |
<kbd>ds</kbd> & movement | π | Delete surrounding |
<kbd>gzf</kbd> & movement | π | Find surrounding (to the right) |
<kbd>gzF</kbd> & movement | π | Find surrounding (to the left) |
<kbd>gzh</kbd> & movement | π | Highlight surrounding |
<kbd>gzn</kbd> & movement | π | Update neighbor lines |
Plugin: Gitsigns
See lewis6991/gitsigns.nvim for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>]g</kbd> or <kbd>]g</kbd> | π | Next/previous Git hunk |
<kbd>gs</kbd> | π | Preview hunk |
<kbd>Space</kbd> <kbd>hp</kbd> | π | Preview hunk inline |
<kbd>Space</kbd> <kbd>hb</kbd> | π | Blame line |
<kbd>Space</kbd> <kbd>hs</kbd> | π π | Stage hunk |
<kbd>Space</kbd> <kbd>hr</kbd> | π π | Reset hunk |
<kbd>Space</kbd> <kbd>hu</kbd> | π | Undo stage hunk |
<kbd>Space</kbd> <kbd>hS</kbd> | π | Stage buffer |
<kbd>Space</kbd> <kbd>hR</kbd> | π | Reset buffer |
<kbd>Space</kbd> <kbd>hd</kbd> | π | Diff against the index |
<kbd>Space</kbd> <kbd>hD</kbd> | π | Diff against the last commit |
<kbd>Space</kbd> <kbd>hw</kbd> | π | Toggle word diff |
<kbd>Space</kbd> <kbd>hl</kbd> | π | Publish hunks to location-list |
<kbd>Space</kbd> <kbd>htb</kbd> | π | Toggle git current line blame |
<kbd>Space</kbd> <kbd>htd</kbd> | π | Toggle git deleted |
<kbd>Space</kbd> <kbd>htw</kbd> | π | Toggle git word diff |
<kbd>Space</kbd> <kbd>htl</kbd> | π | Toggle git line highlight |
<kbd>Space</kbd> <kbd>htn</kbd> | π | Toggle git number highlight |
<kbd>Space</kbd> <kbd>hts</kbd> | π | Toggle git signs |
<kbd>ih</kbd> | π | Select inner hunk operator |
Plugin: Diffview
See sindrets/diffview.nvim for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>Space</kbd> <kbd>gd</kbd> | π | Diff view file history |
<kbd>Space</kbd> <kbd>gv</kbd> | π | Diff view open |
Β | ||
Within diffview "view" window | Β | |
Β | ||
<kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | π | Select next/previous entry |
<kbd>;</kbd> <kbd>a</kbd> | π | Focus file |
<kbd>;</kbd> <kbd>e</kbd> | π | Toggle files panel |
Β | ||
Within diffview "file" panel | Β | |
Β | ||
<kbd>q</kbd> | π | Close |
<kbd>h</kbd> | π | Previous entry |
<kbd>o</kbd> | π | Focus entry |
<kbd>gf</kbd> | π | Open file |
<kbd>sg</kbd> | π | Open file in split |
<kbd>st</kbd> | π | Open file in new tab |
<kbd>Ctrl</kbd>+<kbd>r</kbd> | π | Refresh files |
<kbd>;</kbd> <kbd>e</kbd> | π | Toggle panel |
Β | ||
Within diffview "history" panel | Β | |
Β | ||
<kbd>q</kbd> | π | Close diffview |
<kbd>o</kbd> | π | Focus entry |
<kbd>O</kbd> | π | Show options |
Plugin: Telescope
See telescope.nvim for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>;r</kbd> | π | Results of the previous picker |
<kbd>;p</kbd> | π | List of the previous pickers |
<kbd>;f</kbd> | π | File search |
<kbd>;g</kbd> | π | Grep search |
<kbd>;b</kbd> | π | Buffers |
<kbd>;h</kbd> | π | Highlights |
<kbd>;j</kbd> | π | Jump points |
<kbd>;m</kbd> | π | Marks |
<kbd>;o</kbd> | π | Vim options |
<kbd>;t</kbd> | π | LSP workspace symbols |
<kbd>;v</kbd> | π π | Yank history |
<kbd>;n</kbd> | π | Plugins |
<kbd>;k</kbd> | π | Thesaurus |
<kbd>;u</kbd> | π | Spelling suggestions |
<kbd>;s</kbd> | π | Sessions |
<kbd>;x</kbd> | π | Old files |
<kbd>;w</kbd> | π | Zk notes |
<kbd>;z</kbd> | π | Zoxide directories |
<kbd>;;</kbd> | π | Command history |
<kbd>;:</kbd> | π | Commands |
<kbd>;/</kbd> | π | Search history |
<kbd>;dd</kbd> | π | LSP definitions |
<kbd>;di</kbd> | π | LSP implementations |
<kbd>;dr</kbd> | π | LSP references |
<kbd>;da</kbd> | π π | LSP code actions |
<kbd>Space</kbd> <kbd>/</kbd> | π | Buffer fuzzy find |
<kbd>Space</kbd> <kbd>gs</kbd> | π | Git status |
<kbd>Space</kbd> <kbd>gr</kbd> | π | Git branches |
<kbd>Space</kbd> <kbd>gl</kbd> | π | Git commits |
<kbd>Space</kbd> <kbd>gL</kbd> | π | Git buffer commits |
<kbd>Space</kbd> <kbd>gh</kbd> | π | Git stashes |
<kbd>Space</kbd> <kbd>gt</kbd> | π | Find symbols matching word under cursor |
<kbd>Space</kbd> <kbd>gf</kbd> | π | Find files matching word under cursor |
<kbd>Space</kbd> <kbd>gg</kbd> | π π | Grep word under cursor |
<kbd>Space</kbd> <kbd>sc</kbd> | π | Colorschemes |
<kbd>Space</kbd> <kbd>sd</kbd> | π | Document diagnostics |
<kbd>Space</kbd> <kbd>sD</kbd> | π | Workspace diagnostics |
<kbd>Space</kbd> <kbd>sh</kbd> | π | Help tags |
<kbd>Space</kbd> <kbd>sk</kbd> | π | Key-maps |
<kbd>Space</kbd> <kbd>sm</kbd> | π | Man pages |
<kbd>Space</kbd> <kbd>ss</kbd> | π | LSP document symbols |
<kbd>Space</kbd> <kbd>sS</kbd> | π | LSP workspace symbols |
<kbd>Space</kbd> <kbd>st</kbd> | π | Todo list |
<kbd>Space</kbd> <kbd>sT</kbd> | π | Todo/Fix/Fixme list |
<kbd>Space</kbd> <kbd>sw</kbd> | π | Grep string |
Β | ||
Within Telescope window | Β | |
Β | ||
<kbd>?</kbd> | π | Keymaps help screen |
<kbd>Ctrl</kbd>+<kbd>Space</kbd> | π | Move from none fuzzy search to fuzzy |
<kbd>jj</kbd> or <kbd>Escape</kbd> | π | Leave Insert mode |
<kbd>i</kbd> | π | Enter Insert mode (filter input) |
<kbd>q</kbd> or <kbd>Escape</kbd> | π | Exit Telescope |
<kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> | π π | Next/previous candidate |
<kbd>Ctrl</kbd>+<kbd>d</kbd>/<kbd>u</kbd> | π π | Scroll down/upwards |
<kbd>Ctrl</kbd>+<kbd>f</kbd>/<kbd>b</kbd> | π π | Scroll preview down/upwards |
<kbd>Ctrl</kbd>+<kbd>j</kbd>/<kbd>k</kbd> | π π | Scroll preview vertically |
<kbd>Ctrl</kbd>+<kbd>h</kbd>/<kbd>l</kbd> | π π | Scroll preview horizontally |
<kbd>J</kbd> or <kbd>K</kbd> | π | Select candidates up/downwards |
<kbd>st</kbd> | π | Open in a new tab |
<kbd>sg</kbd> | π | Open in a vertical split |
<kbd>sv</kbd> | π | Open in a split |
<kbd>*</kbd> | π | Toggle selection |
<kbd>u</kbd> | π | Drop all |
<kbd>w</kbd> | π | Smart send to quickfix list |
<kbd>e</kbd> | π | Send to quickfix list |
<kbd>Ctrl</kbd>+<kbd>q</kbd> | π | Send to quickfix list |
<kbd>dd</kbd> | π | Delete entry (buffer list) |
<kbd>!</kbd> | π | Edit in command line |
Plugin: Neo-Tree
See nvim-neo-tree/neo-tree.nvim for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>fe</kbd> / <kbd>Space</kbd><kbd>e</kbd> | π | Toggle file explorer (root) |
<kbd>fE</kbd> / <kbd>Space</kbd><kbd>E</kbd> | π | Toggle file explorer (cwd) |
<kbd>ge</kbd> | π | Open Git explorer |
<kbd>be</kbd> | π | Open Buffer explorer |
<kbd>xe</kbd> | π | Open Document explorer |
<kbd>;a</kbd> | π | Focus current file in file-explorer |
Β | ||
Within Neo-Tree window | Β | |
Β | ||
<kbd>g?</kbd> | π | Show help |
<kbd>q</kbd> | π | Close window |
<kbd>j</kbd> or <kbd>k</kbd> | π | Move up and down the tree |
<kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> | π | Next or previous source |
<kbd>]g</kbd> or <kbd>[g</kbd> | π | Jump to next/previous git modified node |
<kbd>l</kbd> | π | Toggle collapse/expand directory or open file |
<kbd>h</kbd> | π | Collapse directory tree |
<kbd>Return</kbd> | π | Select window to open file |
<kbd>gr</kbd> | π | Grep in current position |
<kbd>gf</kbd> | π | Find files in current position |
<kbd>.</kbd> | π | Set as root directory |
<kbd>Backspace</kbd> | π | Change into parent directory |
<kbd>sv</kbd> or <kbd>S</kbd> | π | Open file in a horizontal split |
<kbd>sg</kbd> or <kbd>s</kbd> | π | Open file in a vertical split |
<kbd>st</kbd> or <kbd>t</kbd> | π | Open file in new tab |
<kbd>p</kbd> | π | Preview toggle |
<kbd>a</kbd> | π | Create new directories and/or files |
<kbd>N</kbd> | π | Create new directory |
<kbd>r</kbd> | π | Rename file or directory |
<kbd>dd</kbd> | π | Delete |
<kbd>c</kbd> / <kbd>m</kbd> | π | Copy/move |
<kbd>y</kbd> / <kbd>x</kbd> / <kbd>P</kbd> | π | Clipboard copy/cut/paste |
<kbd>!</kbd> | π | Filter |
<kbd>D</kbd> | π | Filter directories |
<kbd>#</kbd> | π | Fuzzy sorter |
<kbd>F</kbd> | π | Filter on submit |
<kbd>Ctrl</kbd>+<kbd>c</kbd> | π | Clear filter |
<kbd>Ctrl</kbd>+<kbd>r</kbd> or <kbd>R</kbd> | π | Refresh |
<kbd>fi</kbd> / <kbd>fe</kbd> | π | Include/exclude |
<kbd>H</kbd> | π | Toggle hidden files |
<kbd>e</kbd> | π | Toggle auto-expand window width |
<kbd>w</kbd> | π | Toggle window width |
<kbd>z</kbd> | π | Collapse all nodes |
Plugin: Marks
See chentau/marks.nvim for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>m,</kbd> | π | Set the next available alphabetical (lowercase) mark |
<kbd>m;</kbd> | π | Toggle the next available mark at the current line |
<kbd>m</kbd> <kbd>a-z</kbd> | π | Set mark |
<kbd>dm</kbd> <kbd>a-z</kbd> | π | Remove mark |
<kbd>dm-</kbd> | π | Delete all marks on the current line |
<kbd>dm<Space></kbd> | π | Delete all marks in the current buffer |
<kbd>m]</kbd> | π | Move to next mark |
<kbd>m[</kbd> | π | Move to previous mark |
<kbd>m:</kbd> <kbd>a-z</kbd> | π | Preview mark |
<kbd>m/</kbd> | π | List marks from all opened buffers |
Plugin: Zk
See zk-org/zk-nvim and zk for more mappings and usage information.
Key | Mode | Action |
---|---|---|
<kbd>Space</kbd>+<kbd>zn</kbd> | π | Ask for title and create new note |
<kbd>Space</kbd>+<kbd>zo</kbd> | π | Browse notes sorted by modification time |
<kbd>Space</kbd>+<kbd>zt</kbd> | π | Browse tags |
<kbd>Space</kbd>+<kbd>zf</kbd> | π | Search notes |
<kbd>Space</kbd>+<kbd>zf</kbd> | π | Search notes with selection |
<kbd>Space</kbd>+<kbd>zb</kbd> | π | Show backlinks |
<kbd>Space</kbd>+<kbd>zl</kbd> | π | Show links |