# vim-config **Repository Path**: mamh-mixed/vim-config ## Basic Information - **Project Name**: vim-config - **Description**: https://github.com/mamh-mixed/vim-config - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-14 - **Last Updated**: 2025-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rafael Bodill's Neovim Config Lean mean Neovim machine, 30-45ms startup time. Works best with [Neovim] β‰₯0.10
(powered by [LazyVim]πŸ’€) :gear: See [__Extending__](#extending) for customizing configuration and adding plugins. > 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) * [Custom Key-mappings](#custom-key-mappings) * [Picker](#picker) * [Toggle Features](#toggle-features) * [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) * [Window Management](#window-management) * [Plugins](#plugins) * [Plugin: Mini.Surround](#plugin-minisurround) * [Plugin: Gitsigns](#plugin-gitsigns) * [Plugin: Diffview](#plugin-diffview) * [Plugin: Neo-Tree](#plugin-neo-tree) * [Plugin: Marks](#plugin-marks) * [Plugin: Zk](#plugin-zk)
## Features * Fast startup time β€” plugins are almost entirely lazy-loaded! * Robust, yet light-weight * Plugin management with [folke/lazy.nvim]. Use with `:Lazy` or Space+l * Install LSP, DAP, linters, and formatters. Use with `:Mason` or Space+cm * LSP configuration with [nvim-lspconfig] * [telescope.nvim] centric work-flow with lists (try ;+f…) * Custom context-menu (try it! ;+c) * Auto-complete setup with [blink.cmp] or [nvim-cmp] * Structure view with [hedyhli/outline.nvim] * Git features using [lewis6991/gitsigns.nvim], [sindrets/diffview.nvim], and [more](#git-plugins) * Session management with [folke/persistence.nvim] * Unobtrusive, yet informative status & tab lines * Premium color-schemes * Remembers last-used colorscheme ## Screenshot ![Vim screenshot](http://rafi.io/img/project/vim-config/features.png) ## Prerequisites * [git](https://git-scm.com/) β‰₯ 2.19.0 (`brew install git`) * [Neovim](https://github.com/neovim/neovim/wiki/Installing-Neovim) β‰₯ v0.10.0 (`brew install neovim`) **Optional**, but highly recommended: * [bat](https://github.com/sharkdp/bat) (`brew install bat`) * [fd](https://github.com/sharkdp/fd) (`brew install fd`) * [fzf](https://github.com/junegunn/fzf) (`brew install fzf`) * [ripgrep](https://github.com/BurntSushi/ripgrep) (`brew install ripgrep`) * [zoxide](https://github.com/ajeetdsouza/zoxide) (`brew install zoxide`) ## Install 1. Let's clone this repo! Clone to `~/.config/nvim` ```bash mkdir -p ~/.config git clone git@github.com:rafi/vim-config.git ~/.config/nvim cd ~/.config/nvim ``` 1. 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. 1. Inside Neovim, run `:LazyExtras` and use x to install extras. Enjoy! :smile: ## Install LSP, DAP, Linters, Formatters Use `:Mason` (or Space+cm) 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 `, or `:LspInstall ` (use Tab to list available servers). See Mason's [PACKAGES.md](https://mason-registry.dev/registry/list) for the official list, and the [Language server mapping](https://github.com/williamboman/mason-lspconfig.nvim/blob/main/doc/server-mapping.md) 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](https://github.com/williamboman/mason.nvim#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 ```vim :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](https://github.com/williamboman/mason-lspconfig.nvim/blob/main/doc/server-mapping.md)… ### Recommended Linters ```vim :MasonInstall vint shellcheck editorconfig-checker flake8 gitlint hadolint :MasonInstall markdownlint mypy selene shellharden write-good yamllint ``` ### Recommended Formatters ```vim :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: ```sh 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 ``` [Pragmata Pro]: https://www.fsd.it/shop/fonts/pragmatapro/ [Nerd Fonts]: https://www.nerdfonts.com ## Upgrade To upgrade packages and plugins: * Neovim plugins: `:Lazy update` * Mason packages: `:Mason` and press U To update Neovim configuration from my repo: ```bash git pull --ff --ff-only ``` ## Structure * [after/](./after) β€” Language specific custom settings and plugins. * [lua/](./lua) β€” Lua configurations * **`config/`** β€” Custom user configuration * **`plugins/`** β€” Custom user plugins (or `lua/plugins.lua`) * [rafi/](./lua/rafi) * [config/](./lua/config) β€” Neovim configurations * [autocmd.lua](./lua/rafi/config/autocmd.lua) β€” Auto-commands * [init.lua](./lua/rafi/config/init.lua) β€” Initialization * [keymaps.lua](./lua/rafi/config/keymaps.lua) β€” Key-mappings * [lazy.lua](./lua/rafi/config/lazy.lua) β€” Entry-point initialization * [options.lua](./lua/rafi/config/options.lua) β€” Editor settings * [plugins/](./lua/plugins) β€” Plugins and configurations * [util/](./lua/rafi/util) β€” Utility library * [snippets/](./snippets) β€” Personal code snippets ## Extending ### Extend: Config Fork this repository and create a directory `lua/config` with one or more of these files: (Optional) * `lua/config/autocmds.lua` β€” Custom auto-commands * `lua/config/options.lua` β€” Custom options * `lua/config/keymaps.lua` β€” Custom key-mappings * `lua/config/setup.lua` β€” Override config, see [extend defaults](#extend-defaults). Adding plugins or override existing options: * `lua/plugins/*.lua` or `lua/plugins.lua` β€” Plugins (See [lazy.nvim] specs for syntax) ### Extend: Plugins Install "extras" plugins using `:LazyExtras` and installing with x. This saves choices in `lazyvim.json` which you can also edit manually, here's a recommended starting point: ```json { "extras": [ "lazyvim.plugins.extras.ai.copilot", "lazyvim.plugins.extras.coding.neogen", "lazyvim.plugins.extras.coding.yanky", "lazyvim.plugins.extras.dap.core", "lazyvim.plugins.extras.dap.nlua", "lazyvim.plugins.extras.lang.docker", "lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.svelte", "lazyvim.plugins.extras.lang.terraform", "lazyvim.plugins.extras.lang.toml", "lazyvim.plugins.extras.lang.typescript", "lazyvim.plugins.extras.test.core", "lazyvim.plugins.extras.util.mini-hipatterns", "rafi.plugins.extras.lang.ansible", "rafi.plugins.extras.lang.go", "rafi.plugins.extras.lang.helm", "rafi.plugins.extras.lang.kubernetes", "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: ```lua 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.ai.copilot' }, -- Enable incline, displaying filenames on each window { import = 'rafi.plugins.extras.ui.incline' }, -- Disable built-in plugins { 'shadmansaleh/lualine.nvim', enabled = false }, { 'folke/persistence.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) ```lua -- Elite-mode (hjkl mode. arrow-keys resize window) vim.g.elite_mode = false -- External file diff program vim.g.diffprg = 'bcompare' ``` 1. You can override LazyVim options. For example in `lua/plugins/lazyvim.lua`: ```lua return { { 'LazyVim/LazyVim', opts = { icons = { diagnostics = { Error = '', Warn = '', Info = '', }, status = { diagnostics = { error = 'E', warn = 'W', info = 'I', hint = 'H', }, }, }, }, }, } ``` 1. 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: ```lua 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 ``` 1. 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: ```lua { 'neovim/nvim-lspconfig', opts = { servers = { yamlls = { filetypes = { 'yaml', 'yaml.ansible', 'yaml.docker-compose' }, }, lua_ls = { settings = { Lua = { workspace = { checkThirdParty = false }, completion = { callSnippet = 'Replace' }, }, }, }, }, } } ``` ## Plugin Highlights * Plugin management with cache and lazy loading for speed * Auto-completion with Language-Server Protocol (LSP) * Project-aware tabline * Extensive syntax highlighting with [nvim-treesitter]. _Note_ that 95% of the plugins are **lazy-loaded**. ## Plugins Included
List of plugins (πŸ”Ž Click to expand/collapse) ### Completion & Code-Analysis | Name | Description | | -------------- | ---------------------- | | [neovim/nvim-lspconfig] | Quickstart configurations for the Nvim LSP client | | [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 | | [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 | | [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 | | -------------- | ---------------------- | | [rafamadriz/friendly-snippets] | Preconfigured snippets for different languages | | [echasnovski/mini.pairs] | Automatically manage character pairs | | [echasnovski/mini.surround] | Fast and feature-rich surround actions | | [JoosepAlviste/nvim-ts-context-commentstring] | Set the commentstring based on the cursor location | | [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 | | [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/committia.vim] | Pleasant editing on Git commit messages | ### Misc Plugins | Name | Description | | -------------- | ---------------------- | | [folke/snacks.nvim] | Collection of small QoL plugins | | [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 | | [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 | | [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 | [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 [folke/todo-comments.nvim]: https://github.com/folke/todo-comments.nvim [folke/trouble.nvim]: https://github.com/folke/trouble.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 [rafamadriz/friendly-snippets]: https://github.com/rafamadriz/friendly-snippets [echasnovski/mini.pairs]: https://github.com/echasnovski/mini.pairs [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 [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/committia.vim]: https://github.com/rhysd/committia.vim [folke/snacks.nvim]: https://github.com/folke/snacks.nvim [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 [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 [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
## Extra Plugins
List of extras (πŸ”Ž Click to expand/collapse) You can view all LazyVim's extras at [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 | | `debugprint.lua` | [andrewferrier/debugprint.nvim] | Easily add debug print lines | | `editorconfig` | [sgur/vim-editorconfig] | EditorConfig plugin written entirely in Vimscript | | `emmet` | [mattn/emmet-vim] | Provides support for expanding abbreviations alΓ‘ emmet | | `nvim-cmp` | [hrsh7th/nvim-cmp] | Completion plugin | | `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 [andrewferrier/debugprint.nvim]: https://github.com/andrewferrier/debugprint.nvim [sgur/vim-editorconfig]: https://github.com/sgur/vim-editorconfig [mattn/emmet-vim]: https://github.com/mattn/emmet-vim [hrsh7th/nvim-cmp]: https://github.com/hrsh7th/nvim-cmp [machakann/vim-sandwich]: https://github.com/machakann/vim-sandwich ### Extra Plugins: Colorscheme Spec: `rafi.plugins.extras.colorscheme.` | Name | Repository | Description | | -------------- | -------------- | ---------------------- | | `bamboo` | [ribru17/bamboo.nvim] | Warm green theme | | `cyberdream` | [scottmckendry/cyberdream.nvim] | High-contrast, futuristic & vibrant theme | | `github` | [projekt0n/github-nvim-theme] | GitHub's theme | | `kanagawa` | [rebelot/kanagawa.nvim] | Inspired by the colors of the famous painting by Katsushika Hokusai | | `monokai-pro` | [loctvl842/monokai-pro.nvim] | Monokai Pro theme with multiple filters | [ribru17/bamboo.nvim]: https://github.com/ribru17/bamboo.nvim [scottmckendry/cyberdream.nvim]: https://github.com/scottmckendry/cyberdream.nvim [projekt0n/github-nvim-theme]: https://github.com/projekt0n/github-nvim-theme [rebelot/kanagawa.nvim]: https://github.com/rebelot/kanagawa.nvim [loctvl842/monokai-pro.nvim]: https://github.com/loctvl842/monokai-pro.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 | | `harpoon2` | [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 | | `spectre` | [nvim-pack/nvim-spectre] | Find and replace | | `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 [nvim-pack/nvim-spectre]: https://github.com/nvim-pack/nvim-spectre [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 | | -------------- | ---------------------------- | ---------------------- | | `endwise` | [RRethy/nvim-treesitter-endwise] | Wisely add "end" in various filetypes | | `treesj` | [Wansmer/treesj] | Splitting and joining blocks of code | [RRethy/nvim-treesitter-endwise]: https://github.com/RRethy/nvim-treesitter-endwise [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 | | `bqf` | [kevinhwang91/nvim-bqf] | Better quickfix window | | `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 | | `quicker` | [stevearc/quicker.nvim] | Improved quickfix UI and workflow | | `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 [kevinhwang91/nvim-bqf]: https://github.com/kevinhwang91/nvim-bqf [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 [stevearc/quicker.nvim]: https://github.com/stevearc/quicker.nvim [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/extras]. Use Spacemx or `:LazyExtras` to install them. **These are only highlights:** * `ai.copilot` * `coding.neogen` * `coding.yanky` * `dap.core` * `test.core` * `util.mini-hipatterns` * `lang.docker` * `lang.json` * `lang.markdown` * `lang.svelte` * `lang.terraform` * And [much more](https://www.lazyvim.org/extras)…
## Custom Key-mappings Note that, * **Leader** key set as Space * **Local-Leader** key set as ; and used for navigation and search (Telescope/Snacks/FZF and Neo-tree) * Disable ← ↑ β†’ ↓ in normal mode by enabling `vim.g.elite_mode`.
Key-mappings (πŸ”Ž Click to expand/collapse) Legend: | Ⓝormal | β“‹isual | β“ˆelect | β’Ύnsert | β“„perator | β’Έommand | ### Picker (Telescope/Snacks/FZF) | Key | Mode | Action | | ----- |:----:| ------------------ | | Space ; | Ⓝ | Select picker | | ;r | Ⓝ | Resume previous picker | | ;p | Ⓝ | Projects | | ;f | Ⓝ | File | | ;F | Ⓝ | File (cwd) | | ;g | Ⓝ | Grep search | | ;G | Ⓝ | Grep search (cwd) | | ;b | Ⓝ | Switch buffers | | ;h | Ⓝ | Help pages | | ;H | Ⓝ | Highlights | | ;j | Ⓝ | Jumplist | | ;m | Ⓝ | Jump to mark | | ;M | Ⓝ | Man pages | | ;o | Ⓝ | Options | | ;t | Ⓝ | Goto symbol | | ;T | Ⓝ | Goto symbol (workspace) | | ;v | Ⓝ β“‹ | Registers | | ;s | Ⓝ | Sessions | | ;u | Ⓝ | Spelling suggestions | | ;x | Ⓝ | Recent | | ;X | Ⓝ | Recent (cwd) | | ;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 gh | Ⓝ | Git stashes | | Space gF | Ⓝ | Find files matching word under cursor | | Space gg | Ⓝ β“‹ | Grep word/selection | | Space gG | Ⓝ β“‹ | Grep word/selection (cwd) | | 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 | | | |   | | ;i | Ⓝ | (Snacks only) Icons | | ;w | Ⓝ | (Telescope only) Notes | | ;n | Ⓝ | (Telescope only) Plugin directories | | ;k | Ⓝ | (Telescope only) Thesaurus | | | |   | | **Within _Picker_ 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 | | 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 | ### Toggle Features | Key | Mode | Action | | ----- |:----:| ------------------ | | Space dph | Ⓝ | Toggle profiler highlights | | Space dpp | Ⓝ | Toggle profiler | | Space ua | Ⓝ | Toggle animation | | Space uA | Ⓝ | Toggle tabline | | Space ub | Ⓝ | Toggle background dark/light | | Space uc | Ⓝ | Toggle conceal level | | Space uC | Ⓝ | Colorschemes | | Space ud | Ⓝ | Toggle buffer diagnostics | | Space uD | Ⓝ | Toggle text dim | | Space uf | Ⓝ | Toggle format on Save | | Space uF | Ⓝ | Toggle format on Save (Global) | | Space ug | Ⓝ | Toggle indentation lines | | Space uG | Ⓝ | Toggle git signs | | Space uh | Ⓝ | Toggle inlay-hints | | Space ui | Ⓝ | Inspect position | | Space uI | Ⓝ | Inspect tree | | Space ul | Ⓝ | Toggle line numbers | | Space uL | Ⓝ | Toggle relative line numbers | | Space um | Ⓝ | Toggle markdown render | | Space un | Ⓝ | Dismiss all notifications | | Space up | Ⓝ | Disable auto-pairs | | Space ur | Ⓝ | Redraw, clear hlsearch, and diff update | | Space us | Ⓝ | Toggle spell-checker | | Space uS | Ⓝ | Toggle smooth scroll | | Space uT | Ⓝ | Toggle tree-sitter | | Space uw | Ⓝ | Toggle wrap | | Space uz | Ⓝ | Toggle distraction-free zen writing | | Space uZ | Ⓝ | Toggle window zoom | ### Navigation | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | j / k | Ⓝ β“‹ | Cursor moves through display-lines | `g` `j/k` | | ]i / [i | Ⓝ β“‹ | Jump to scope edges | [folke/snacks.nvim] | | 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 | | Ctrl+Space / 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 | [folke/snacks.nvim] | ### Clipboard | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | p or P | β“‹ | Paste without yank | `:let @+=@0` | | Space+y | Ⓝ | Copy relative file-path to clipboard | [config/keymaps.lua] | | Space+Y | Ⓝ | Copy absolute file-path to clipboard | [config/keymaps.lua] | ### 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 cr | Ⓝ | Rename | [plugins/lsp/keymaps.lua] | | Space ce | Ⓝ | Open diagnostics window | [plugins/lsp/keymaps.lua] | | Space cs | Ⓝ | Formatter menu selection | [plugins/lsp/keymaps.lua] | | Space ca | Ⓝ β“‹ | Code action | [plugins/lsp/keymaps.lua] | | Space cA | Ⓝ | Source action | [plugins/lsp/keymaps.lua] | | Space cli | Ⓝ | LSP incoming calls | [plugins/lsp/keymaps.lua] | | Space clo | Ⓝ | LSP outgoing calls | [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] | | Space cgd | Ⓝ | Glance definitions | [dnlhc/glance.nvim] | | Space cgr | Ⓝ | Glance references | [dnlhc/glance.nvim] | | Space cgy | Ⓝ | Glance type definitions | [dnlhc/glance.nvim] | | Space cgi | Ⓝ | Glance implementations | [dnlhc/glance.nvim] | | Space cgu | Ⓝ | Glance resume | [dnlhc/glance.nvim] | ### Diagnostics | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | Space ud | Ⓝ | Toggle buffer diagnostics | [plugins/lsp/keymaps.lua] | | 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] | | Space+cid | Ⓝ | LazyDev | [folke/lazydev.nvim] | | Space+cif | Ⓝ | LazyFormatterInfo | [LazyVim/LazyVim] | | Space+cir | Ⓝ | LazyRoot | [LazyVim/LazyVim] | | sj / sk | Ⓝ | Join/split arguments | [echasnovski/mini.splitjoin] | ### Search, Substitute, Diff | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | \* / # | Ⓝ β“‹ | Search partial words | `g*` / `g#` | | g\* / g# | Ⓝ β“‹ | Search whole-word forward/backward | `*` / `#` | | Ctrl+c | Ⓝ | Change inner word | `ciw` | | Escape | Ⓝ | Clear search highlight | `:nohlsearch` | | Backspace | Ⓝ | Match bracket | `%` | | Space+bf | Ⓝ | Diff current windows in tab | `windo diffthis` | | Space+bF | Ⓝ | External diff | `!vim.g.diffprg % #` | | 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 or M+s | Ⓝ | Write buffer to file | `:write` | | Ctrl+s | Ⓝ β“‹ β’Έ | Write buffer to file | `:write` | ### Window Management | Key | Mode | Action | Plugin or Mapping | | ----- |:----:| ------------------ | ------ | | Space qq | Ⓝ | Quit all and exit | `:quitall` | | s] | Ⓝ | 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 (if last window, quit nvim) | `: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 | [folke/snacks.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 gt | Ⓝ | Open Lazygit (root dir) | [config/keymaps.lua] | | Space gT | Ⓝ | Open Lazygit (cwd) | [config/keymaps.lua] | | Space gF | Ⓝ | Open Lazygit on current file history | [config/keymaps.lua] | | Space gl | Ⓝ | Open Lazygit log | [config/keymaps.lua] | | Space gL | Ⓝ | Open Lazygit log (cwd) | [config/keymaps.lua] | | Space gb | Ⓝ | Git blame | [FabijanZulj/blame.nvim] | | Space gB | Ⓝ | Git blame in window | [FabijanZulj/blame.nvim] | | Space gm | Ⓝ | Reveal commit under cursor | [config/keymaps.lua] | | Space go | Ⓝ β“‹ | Open source-code URL in browser | [config/keymaps.lua] | | Space gY | Ⓝ β“‹ | Copy source-code URL | [config/keymaps.lua] | | Space gu | Ⓝ | Open undo-tree | [mbbill/undotree] | | 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] | #### 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: Neo-Tree See [nvim-neo-tree/neo-tree.nvim] for more mappings and usage information. | Key | Mode | Action | | ----- |:----:| ------------------ | | Space e/fe | Ⓝ | Toggle file explorer (root) | | Space E/fE | Ⓝ | Toggle file explorer (cwd) | | ge | Ⓝ | Open Git explorer | | be | Ⓝ | Open Buffer explorer | | ;a | Ⓝ | Reveal in file explorer | | ;A | Ⓝ | Reveal in file explorer (cwd) | | | |   | | **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 |
[Neovim]: https://github.com/neovim/neovim [LazyVim]: https://www.lazyvim.org/ [lazy.nvim]: https://github.com/folke/lazy.nvim [lua/rafi/plugins/lsp/init.lua]: ./lua/rafi/plugins/lsp/init.lua [nvim-lspconfig]: https://github.com/neovim/nvim-lspconfig [blink.cmp]: https://github.com/saghen/blink.cmp [nvim-cmp]: https://github.com/hrsh7th/nvim-cmp [telescope.nvim]: https://github.com/nvim-telescope/telescope.nvim [config/keymaps.lua]: ./lua/rafi/config/keymaps.lua [util/edit.lua]: ./lua/rafi/util/edit.lua [plugins/lsp/keymaps.lua]: ./lua/rafi/plugins/lsp/keymaps.lua [lua/rafi/util/contextmenu.lua]: ./lua/rafi/util/contextmenu.lua [nvim-treesitter]: https://github.com/nvim-treesitter/nvim-treesitter [lazyvim.org/extras]: https://www.lazyvim.org/extras