Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rafi/vim-config
Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim.
https://github.com/rafi/vim-config
css dotfiles golang html ide javascript language-server-protocol lsp neovim nvim nvim-lsp nvim-lua nvim-telescope php python vim vimrc
Last synced: 3 days ago
JSON representation
Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim.
- Host: GitHub
- URL: https://github.com/rafi/vim-config
- Owner: rafi
- Created: 2014-01-04T19:15:37.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2024-12-14T20:58:53.000Z (7 days ago)
- Last Synced: 2024-12-16T12:52:38.016Z (5 days ago)
- Topics: css, dotfiles, golang, html, ide, javascript, language-server-protocol, lsp, neovim, nvim, nvim-lsp, nvim-lua, nvim-telescope, php, python, vim, vimrc
- Language: Lua
- Homepage:
- Size: 2.76 MB
- Stars: 1,904
- Watchers: 57
- Forks: 470
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-starred-test - rafi/vim-config - Lean mean Neovim machine, carefully crafted with :heart: Use with latest Neovim. (Lua)
README
# Rafael Bodill's Neovim Config
Lean mean Neovim machine, 30-45ms startup time. Works best with [Neovim] β₯0.10
: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)
* [Language](#language)
* [DAP (Debugging)](#dap-debugging)
* [Test](#test)
* [Custom Key-mappings](#custom-key-mappings)
* [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: Telescope](#plugin-telescope)
* [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+mm
* LSP configuration with [nvim-lspconfig]
* [telescope.nvim] centric work-flow with lists (try ;+fβ¦)
* Custom context-menu (try it! ;+c)
* Auto-complete extensive setup with [nvim-cmp]
(try Tab or Ctrl+Space in insert-mode)
* Structure view with [hedyhli/outline.nvim]
* Git features using [lewis6991/gitsigns.nvim], [sindrets/diffview.nvim], and [more](#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 [email protected]: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+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 `,
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 UTo 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.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:```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'-- Auto format on-save
vim.g.autoformat = false-- Snacks animations
vim.g.snacks_animate = false
```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,
}
endreturn 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 |
| -------------- | ---------------------- |
| [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 |
| [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[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
[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 [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 |
| -------------- | ---------------------------- | ---------------------- |
| `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 |
| `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
[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,
* **Leader** key set as Space
* **Local-Leader** key set as ; and used for navigation and search
(Telescope and Neo-tree)
* Disable β β β β in normal mode by enabling `vim.g.elite_mode`.
Key-mappings
(π Click to expand/collapse)
Legend: | βormal | βisual | βelect | βΎnsert | βperator | βΈommand |
### 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 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 uh | β | Toggle inlay-hints |
| Space ui | β | Show highlight groups for word |
| Space ul | β | Toggle line numbers |
| Space uL | β | Toggle relative line numbers |
| 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 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 |
| 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 | [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 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 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 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 |
| ----- |:----:| ------------------ | ------ |
| q | β | Quit window (if last window, quit nvim) | `:quit` |
| Ctrl+x | β | Rotate window placement | `C-w` `x` |
| Space qq | β | Quit all and exit | `:quitall` |
| 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 | [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: 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 gh | β | Git stashes |
| 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 |[Neovim]: https://github.com/neovim/neovim
[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
[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
[www.lazyvim.org/extras]: https://www.lazyvim.org/extras