rafi / vim-config

Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim.
1.89k stars 467 forks source link
css dotfiles golang html ide javascript language-server-protocol lsp neovim nvim nvim-lsp nvim-lua nvim-telescope php python vim vimrc

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.

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](#features) * [Screenshot](#screenshot) * [Prerequisites](#prerequisites) * [Install](#install) * [Install LSP, DAP, Linters, Formatters](#install-lsp-dap-linters-formatters) * [Language-Server Protocol (LSP)](#language-server-protocol-lsp) * [Recommended LSP](#recommended-lsp) * [Recommended Linters](#recommended-linters) * [Recommended Formatters](#recommended-formatters) * [Recommended Fonts](#recommended-fonts) * [Upgrade](#upgrade) * [Structure](#structure) * [Extending](#extending) * [Extend: Config](#extend-config) * [Extend: Plugins](#extend-plugins) * [Extend: Defaults](#extend-defaults) * [Extend: LSP Settings](#extend-lsp-settings) * [Plugin Highlights](#plugin-highlights) * [Plugins Included](#plugins-included) * [Completion & Code-Analysis](#completion--code-analysis) * [Editor Plugins](#editor-plugins) * [Coding Plugins](#coding-plugins) * [Colorscheme Plugins](#colorscheme-plugins) * [Git Plugins](#git-plugins) * [Misc Plugins](#misc-plugins) * [Treesitter & Syntax](#treesitter--syntax) * [UI Plugins](#ui-plugins) * [Extra Plugins](#extra-plugins) * [Extra Plugins: Coding](#extra-plugins-coding) * [Extra Plugins: Colorscheme](#extra-plugins-colorscheme) * [Extra Plugins: Editor](#extra-plugins-editor) * [Extra Plugins: Git](#extra-plugins-git) * [Extra Plugins: Lang](#extra-plugins-lang) * [Extra Plugins: LSP](#extra-plugins-lsp) * [Extra Plugins: Org](#extra-plugins-org) * [Extra Plugins: Treesitter](#extra-plugins-treesitter) * [Extra Plugins: UI](#extra-plugins-ui) * [LazyVim Extras](#lazyvim-extras) * [Language](#language) * [DAP (Debugging)](#dap-debugging) * [Test](#test) * [Custom Key-mappings](#custom-key-mappings) * [Navigation](#navigation) * [Selection](#selection) * [Jump To](#jump-to) * [Buffers](#buffers) * [Clipboard](#clipboard) * [Auto-Completion](#auto-completion) * [LSP](#lsp) * [Diagnostics](#diagnostics) * [Coding](#coding) * [Search, Substitute, Diff](#search-substitute-diff) * [Command & History](#command--history) * [File Operations](#file-operations) * [Editor UI](#editor-ui) * [Window Management](#window-management) * [Plugins](#plugins) * [Plugin: Mini.Surround](#plugin-minisurround) * [Plugin: Gitsigns](#plugin-gitsigns) * [Plugin: Diffview](#plugin-diffview) * [Plugin: Telescope](#plugin-telescope) * [Plugin: Neo-Tree](#plugin-neo-tree) * [Plugin: Marks](#plugin-marks) * [Plugin: Zk](#plugin-zk)

Features

Screenshot

Vim screenshot

Prerequisites

Optional, but highly recommended:

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! :smile:

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:

To update Neovim configuration from my repo:

git pull --ff --ff-only

Structure

Extending

Extend: Config

Fork this repository and create a directory lua/config with one or more of these files: (Optional)

Adding plugins or override existing options:

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.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

  1. 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
  2. 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',
              },
            },
          },
        },
      },
    }
  3. 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
  4. You can completely override lazy.nvim setup by creating lua/config/lazy.lua to replace lua/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

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 | | [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 | [neovim/nvim-lspconfig]: https://github.com/neovim/nvim-lspconfig [williamboman/mason.nvim]: https://github.com/williamboman/mason.nvim [williamboman/mason-lspconfig.nvim]: https://github.com/williamboman/mason-lspconfig.nvim [stevearc/conform.nvim]: https://github.com/stevearc/conform.nvim [mfussenegger/nvim-lint]: https://github.com/mfussenegger/nvim-lint [folke/lazy.nvim]: https://github.com/folke/lazy.nvim [nmac427/guess-indent.nvim]: https://github.com/nmac427/guess-indent.nvim [tweekmonster/helpful.vim]: https://github.com/tweekmonster/helpful.vim [lambdalisue/suda.vim]: https://github.com/lambdalisue/suda.vim [folke/persistence.nvim]: https://github.com/folke/persistence.nvim [mbbill/undotree]: https://github.com/mbbill/undotree [folke/flash.nvim]: https://github.com/folke/flash.nvim [haya14busa/vim-edgemotion]: https://github.com/haya14busa/vim-edgemotion [folke/zen-mode.nvim]: https://github.com/folke/zen-mode.nvim [folke/todo-comments.nvim]: https://github.com/folke/todo-comments.nvim [folke/trouble.nvim]: https://github.com/folke/trouble.nvim [akinsho/toggleterm.nvim]: https://github.com/akinsho/toggleterm.nvim [s1n7ax/nvim-window-picker]: https://github.com/s1n7ax/nvim-window-picker [dnlhc/glance.nvim]: https://github.com/dnlhc/glance.nvim [MagicDuck/grug-far.nvim]: https://github.com/MagicDuck/grug-far.nvim [hrsh7th/nvim-cmp]: https://github.com/hrsh7th/nvim-cmp [hrsh7th/cmp-nvim-lsp]: https://github.com/hrsh7th/cmp-nvim-lsp [hrsh7th/cmp-buffer]: https://github.com/hrsh7th/cmp-buffer [hrsh7th/cmp-path]: https://github.com/hrsh7th/cmp-path [hrsh7th/cmp-emoji]: https://github.com/hrsh7th/cmp-emoji [rafamadriz/friendly-snippets]: https://github.com/rafamadriz/friendly-snippets [windwp/nvim-autopairs]: https://github.com/windwp/nvim-autopairs [echasnovski/mini.surround]: https://github.com/echasnovski/mini.surround [JoosepAlviste/nvim-ts-context-commentstring]: https://github.com/JoosepAlviste/nvim-ts-context-commentstring [numToStr/Comment.nvim]: https://github.com/numToStr/Comment.nvim [echasnovski/mini.splitjoin]: https://github.com/echasnovski/mini.splitjoin [echasnovski/mini.trailspace]: https://github.com/echasnovski/mini.trailspace [AndrewRadev/linediff.vim]: https://github.com/AndrewRadev/linediff.vim [AndrewRadev/dsf.vim]: https://github.com/AndrewRadev/dsf.vim [echasnovski/mini.ai]: https://github.com/echasnovski/mini.ai [folke/lazydev.nvim]: https://github.com/folke/lazydev.nvim [Bilal2453/luvit-meta]: https://github.com/Bilal2453/luvit-meta [rafi/theme-loader.nvim]: https://github.com/rafi/theme-loader.nvim [rafi/neo-hybrid.vim]: https://github.com/rafi/neo-hybrid.vim [rafi/awesome-colorschemes]: https://github.com/rafi/awesome-vim-colorschemes [lewis6991/gitsigns.nvim]: https://github.com/lewis6991/gitsigns.nvim [sindrets/diffview.nvim]: https://github.com/sindrets/diffview.nvim [NeogitOrg/neogit]: https://github.com/NeogitOrg/neogit [FabijanZulj/blame.nvim]: https://github.com/FabijanZulj/blame.nvim [rhysd/git-messenger.vim]: https://github.com/rhysd/git-messenger.vim [ruifm/gitlinker.nvim]: https://github.com/ruifm/gitlinker.nvim [rhysd/committia.vim]: https://github.com/rhysd/committia.vim [hoob3rt/lualine.nvim]: https://github.com/hoob3rt/lualine.nvim [nvim-neo-tree/neo-tree.nvim]: https://github.com/nvim-neo-tree/neo-tree.nvim [nvim-telescope/telescope.nvim]: https://github.com/nvim-telescope/telescope.nvim [jvgrootveld/telescope-zoxide]: https://github.com/jvgrootveld/telescope-zoxide [rafi/telescope-thesaurus.nvim]: https://github.com/rafi/telescope-thesaurus.nvim [nvim-lua/plenary.nvim]: https://github.com/nvim-lua/plenary.nvim [nvim-treesitter/nvim-treesitter]: https://github.com/nvim-treesitter/nvim-treesitter [nvim-treesitter/nvim-treesitter-textobjects]: https://github.com/nvim-treesitter/nvim-treesitter-textobjects [RRethy/nvim-treesitter-endwise]: https://github.com/RRethy/nvim-treesitter-endwise [windwp/nvim-ts-autotag]: https://github.com/windwp/nvim-ts-autotag [andymass/vim-matchup]: https://github.com/andymass/vim-matchup [iloginow/vim-stylus]: https://github.com/iloginow/vim-stylus [mustache/vim-mustache-handlebars]: https://github.com/mustache/vim-mustache-handlebars [lifepillar/pgsql.vim]: https://github.com/lifepillar/pgsql.vim [MTDL9/vim-log-highlighting]: https://github.com/MTDL9/vim-log-highlighting [reasonml-editor/vim-reason-plus]: https://github.com/reasonml-editor/vim-reason-plus [echasnovski/mini.icons]: https://github.com/echasnovski/mini.icons [MunifTanjim/nui.nvim]: https://github.com/MunifTanjim/nui.nvim [rcarriga/nvim-notify]: https://github.com/rcarriga/nvim-notify [stevearc/dressing.nvim]: https://github.com/stevearc/dressing.nvim [akinsho/bufferline.nvim]: https://github.com/akinsho/bufferline.nvim [folke/noice.nvim]: https://github.com/folke/noice.nvim [SmiteshP/nvim-navic]: https://github.com/SmiteshP/nvim-navic [chentau/marks.nvim]: https://github.com/chentau/marks.nvim [lukas-reineke/indent-blankline.nvim]: https://github.com/lukas-reineke/indent-blankline.nvim [echasnovski/mini.indentscope]: https://github.com/echasnovski/mini.indentscope [folke/which-key.nvim]: https://github.com/folke/which-key.nvim [tenxsoydev/tabs-vs-spaces.nvim]: https://github.com/tenxsoydev/tabs-vs-spaces.nvim [t9md/vim-quickhl]: https://github.com/t9md/vim-quickhl [kevinhwang91/nvim-bqf]: https://github.com/kevinhwang91/nvim-bqf

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](#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 | 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 | [echasnovski/mini.align]: https://github.com/echasnovski/mini.align [chrisgrieser/nvim-chainsaw]: https://github.com/chrisgrieser/nvim-chainsaw [sgur/vim-editorconfig]: https://github.com/sgur/vim-editorconfig [mattn/emmet-vim]: https://github.com/mattn/emmet-vim [L3MON4D3/LuaSnip]: https://github.com/L3MON4D3/LuaSnip [saadparwaiz1/cmp_luasnip]: https://github.com/saadparwaiz1/cmp_luasnip [echasnovski/mini.pairs]: https://github.com/echasnovski/mini.pairs [danymat/neogen]: https://github.com/danymat/neogen [machakann/vim-sandwich]: https://github.com/machakann/vim-sandwich ### Extra Plugins: Colorscheme Spec: `rafi.plugins.extras.colorscheme.` | 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 | [AlexvZyl/nordic.nvim]: https://github.com/AlexvZyl/nordic.nvim [folke/tokyonight.nvim]: https://github.com/folke/tokyonight.nvim [rebelot/kanagawa.nvim]: https://github.com/rebelot/kanagawa.nvim [olimorris/onedarkpro.nvim]: https://github.com/olimorris/onedarkpro.nvim [EdenEast/nightfox.nvim]: https://github.com/EdenEast/nightfox.nvim [nyoom-engineering/oxocarbon.nvim]: https://github.com/nyoom-engineering/oxocarbon.nvim [ribru17/bamboo.nvim]: https://github.com/ribru17/bamboo.nvim [catppuccin/nvim]: https://github.com/catppuccin/nvim ### Extra Plugins: Editor Spec: `rafi.plugins.extras.editor.` | 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 | [pechorin/any-jump.vim]: https://github.com/pechorin/any-jump.vim [glepnir/flybuf.nvim]: https://github.com/glepnir/flybuf.nvim [ThePrimeagen/harpoon]: https://github.com/ThePrimeagen/harpoon [echasnovski/mini.visits]: https://github.com/echasnovski/mini.visits [rest-nvim/rest.nvim]: https://github.com/rest-nvim/rest.nvim [sidebar-nvim/sidebar.nvim]: https://github.com/sidebar-nvim/sidebar.nvim [kevinhwang91/nvim-ufo]: https://github.com/kevinhwang91/nvim-ufo ### Extra Plugins: Git Spec: `rafi.plugins.extras.git.` | Name | Repository | Description | | -------------| -------------- | ---------------------- | | `cmp-git` | [petertriho/cmp-git] | Git source for nvim-cmp | | `fugitive` | [tpope/vim-fugitive] | Git client, including [junegunn/gv.vim] | [petertriho/cmp-git]: https://github.com/petertriho/cmp-git [tpope/vim-fugitive]: https://github.com/tpope/vim-fugitive [junegunn/gv.vim]: https://github.com/junegunn/gv.vim ### Extra Plugins: Lang Spec: `rafi.plugins.extras.lang.` | 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] | [pearofducks/ansible-vim]: https://github.com/pearofducks/ansible-vim [ramilito/kubectl.nvim]: https://github.com/ramilito/kubectl.nvim [mzlogin/vim-markdown-toc]: https://github.com/mzlogin/vim-markdown-toc [andersevenrud/cmp-tmux]: https://github.com/andersevenrud/cmp-tmux [christoomey/tmux-navigator]: https://github.com/christoomey/vim-tmux-navigator ### Extra Plugins: LSP Spec: `rafi.plugins.extras.lsp.` | 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 | [hrsh7th/nvim-gtd]: https://github.com/hrsh7th/nvim-gtd [kosayoda/nvim-lightbulb]: https://github.com/kosayoda/nvim-lightbulb [yaml-companion.nvim]: https://github.com/someone-stole-my-name/yaml-companion.nvim ### Extra Plugins: Org Spec: `rafi.plugins.extras.org.` | 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 | [itchyny/calendar.vim]: https://github.com/itchyny/calendar.vim [serenevoid/kiwi.nvim]: https://github.com/serenevoid/kiwi.nvim [renerocksai/telekasten.nvim]: https://github.com/renerocksai/telekasten.nvim [vimwiki/vimwiki]: https://github.com/vimwiki/vimwiki [zk-org/zk-nvim]: https://github.com/zk-org/zk-nvim ### Extra Plugins: Treesitter Spec: `rafi.plugins.extras.treesitter.` | Key | Name | Description | | -------------- | -------------- | ---------------------- | | `treesj` | [Wansmer/treesj] | Splitting and joining blocks of code | [Wansmer/treesj]: https://github.com/Wansmer/treesj ### Extra Plugins: UI Spec: `rafi.plugins.extras.ui.` | 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 | [goolord/alpha-nvim]: https://github.com/goolord/alpha-nvim [utilyre/barbecue.nvim]: https://github.com/utilyre/barbecue.nvim [tomasky/bookmarks.nvim]: https://github.com/tomasky/bookmarks.nvim [uga-rosa/ccc.nvim]: https://github.com/uga-rosa/ccc.nvim [itchyny/cursorword]: https://github.com/itchyny/vim-cursorword [ghillb/cybu.nvim]: https://github.com/ghillb/cybu.nvim [Bekaboo/deadcolumn.nvim]: https://github.com/Bekaboo/deadcolumn.nvim [rmagatti/goto-preview]: https://github.com/rmagatti/goto-preview [lukas-reineke/headlines.nvim]: https://github.com/lukas-reineke/headlines.nvim [RRethy/vim-illuminate]: https://github.com/RRethy/vim-illuminate [b0o/incline.nvim]: https://github.com/b0o/incline.nvim [chentoast/marks.nvim]: https://github.com/chentoast/marks.nvim [echasnovski/mini.clue]: https://github.com/echasnovski/mini.clue [echasnovski/mini.map]: https://github.com/echasnovski/mini.map [simrat39/symbols-outline.nvim]: https://github.com/simrat39/symbols-outline.nvim ### LazyVim Extras LazyVim is imported in specs (see [lua/rafi/config/lazy.lua](./lua/rafi/config/lazy.lua)) Therefore, you can import any of the "Extras" plugins defined at [LazyVim/LazyVim](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/plugins/extras) and documented in [lazyvim.org](https://www.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.` * See [lazyvim/plugins/extras/dap](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/plugins/extras/dap) #### Test * Spec: `lazyvim.plugins.extras.test.` * See [lazyvim/plugins/extras/test](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/plugins/extras/test)

Custom Key-mappings

Note that,

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 | `j` or [christoomey/tmux-navigator] | | Ctrl+k | 𝐍 | Move to upper split | `k` or [christoomey/tmux-navigator] | | Ctrl+h | 𝐍 | Move to left split | `h` or [christoomey/tmux-navigator] | | Ctrl+l | 𝐍 | Move to right split | `l` or [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] | | vsp | 𝐍 | Select last paste | [config/keymaps.lua] | | sg | 𝐕 | Replace within selected area | [config/keymaps.lua] | | Ctrl+r | 𝐕 | Replace selection with step-by-step confirmation | [config/keymaps.lua] | | > / < | 𝐕 | Indent and re-select | [config/keymaps.lua] | | Tab / Shift+Tab | 𝐕 | Indent and re-select | [config/keymaps.lua] | | I / gI / A | 𝐕 | Force blockwise operation | [config/keymaps.lua] | ### Jump To | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | ], or [, | 𝐍 | Next/previous parameter | [akinsho/bufferline.nvim] | | ]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 | [config/keymaps.lua] | | ]e or [e | 𝐍 | Next/previous error | [config/keymaps.lua] | | ]w or [w | 𝐍 | Next/previous warning | [config/keymaps.lua] | | ]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] | | ]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 | LazyVim.ui.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 cr | 𝐍 | Rename | [plugins/lsp/keymaps.lua] | | Space ce | 𝐍 | Open diagnostics window | [plugins/lsp/keymaps.lua] | | Space co | 𝐍 | Formatter menu selection | [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 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 | `o` | | ] Space | 𝐍 | Add new line below | `o` | | [ Space | 𝐍 | Add new line above | `O` | | gc | 𝐍 𝐕 | Comment prefix | [numToStr/Comment.nvim] | | gcc | 𝐍 𝐕 | Toggle comments | [numToStr/Comment.nvim] | | Space+j or k | 𝐍 𝐕 | Move lines down/up | `:m` … | | Space+v | 𝐍 𝐕 | Toggle line-wise comments | [numToStr/Comment.nvim] | | Space+V | 𝐍 𝐕 | Toggle block-wise comments | [numToStr/Comment.nvim] | | Space+dd | 𝐍 𝐕 | Duplicate line or selection | [config/keymaps.lua] | | 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 | | ----- |:----:| ------------------ | ------ | | 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 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 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 | | ;s | 𝐍 | Sessions | | ;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: 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\ | 𝐍 | 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](https://github.com/zk-org/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 |