Carefully crafted neovim config by me as an vim/neovim user and evangelist for more than 10 years. Use lazy.nvim as plugin manager.
- lazy.nvim (lazy loading plugin manager)
Well, these plugins are hard to categorize, but they are gems. You will need them.
- mini.nvim (various modules for neovim)
- snacks.nvim (collection of small QoL plugins)
- lualine.nvim (fast custom status line)
- dropbar.nvim (vscode-like winbar)
- fzf (fuzzy finder for almost everything)
- fzf.vim (used with fzf)
- telescope.nvim (fuzzy finder written in Lua and support LSP)
- fzf-lua (fzf wrapper in Lua and support LSP and performs well)
- blink.cmp (auto completion)
- nvim-autopairs (automatically insert paired brackets)
- nvim-surround (quickly add/delete/replace brackets)
- grug-far.nvim (find-and-replace globally)
- flash.nvim (quickly move cursor to certain place on screen)
- hop.nvim (quickly move cursor to certain place on screen, written in Lua)
- lightspeed.nvim (quickly move cursor by search)
- outline.nvim (Display symbols in sidebar using LSP)
- conform.nvim (on-demand formatter)
- nvim-lint (on-demand linter)
- trouble.nvim (diagnostics UI)
- oil.nvim (buffer-based file explorer with folder synchronization)
- defx.nvim (buffer-based file explorer for better multiple project folder)
- nvim-treesitter (fast semantic syntax highlighting)
- syntax-tree-surfer (text navigation and manipulation based on treesitter)
- vim-fugitive (almost perfect git wrapper)
- vim-flog (git commit browser)
- diffview.nvim (git diff viewer & git history viewer)
- vim-floaterm (open terminal buffer in floating window)
- vimwiki (wiki plugin like orgmode)
- vim-localvimrc (for setup project-local vim config, useful for LSP)
- overseer.nvim (asynchronous task runner that support
tasks.jsonand many task frameworks) - markview.nvim (markdown previewer)
- neovim 0.11.4+ (stable), 0.12.0+ (nightly)
- python 3.6.1+ (optional, for Python provider / pynvim / Defx.nvim)
- universal-ctags (required by fzf)
- C compiler and libstdc++ (required by nvim-treesitter)
- git (required)
- ripgrep (required for grepping files using FZF)
- fd (required for goto to directory using FZF)
- eza (required for previewing directory using FZF)
- bat (required for various preview commands using FZF)
Clone the project as ~/.config/nvim.
git clone https://github.com/mars90226/dotvim ~/.config/nvim
Open neovim and wait for lazy.nvim to finish the job.
Helper commands are defined in the justfile.
Make sure just is installed.
just testruns the Lua test suite withbusted.just update_pluginscommits updated plugin lock files.
<Leader> key is ,.
fzfkey mappings<Space>zg: Search and open git files<Space>zf: Search and open files<Space>zw: Search and open git worktree files<Space>zW: Search and switch to windows<Space>zl: Search and goto to lines in current buffer<Space>zt: Search and goto to tags in current buffer<Space>zp: Search and goto to tags in current project<Space>zi: Live grep and goto files using ripgrep<Space>zr: Grep and goto files using ripgrep<Space>zm: Search and open most recently used files provided by neomru<Space>zh: Search and open vim help
telescope.nvimkey mappings<Space>tg: Search and open git files<Space>tF: Search and open all files (include hidden / no ignore)<Space>tll: Search in current buffer (fuzzy find)<Space>ti: Live grep and goto files using ripgrep<Space>tr: Grep and goto files using ripgrep<Space>to: Search and open most recently used files<Space>th: Search and open vim help
fzf-luakey mappings<Space>fg: Search and open git files<Space>ff: Search and open files<Space>fw: Search and switch to windows<Space>fl: Search and goto to lines in current buffer<Space>ft: Search and goto to tags in current buffer<Space>fp: Search and goto to tags in current project<Space>fi: Live grep and goto files using ripgrep<Space>fr: Grep and goto files using ripgrep<Space>fm: Search and open most recently used files using oldfiles<Space>fh: Search and open vim help<Space>ld: Search and goto LSP definitions<Space>lr: Search and goto LSP references<Space>lo: Search and goto LSP document symbols<Space>ls: Search and goto LSP workspace symbols<Space>lS: Search and goto LSP workspace symbols by live query<Space>la: Search and execute LSP code actions<Space>lx: Search and goto document diagnostics<Space>lX: Search and goto workspace diagnostics
- LSP key mappings
K: Show hover documentationga: Code actiongd: Goto definitiongi: Goto implementationgrn: LSP RenamegR: Show referencesgy: Show signature help<Space>lf: Format current buffer<Space>lfon visual selection: Range format selected code
outline.nvimkey mappings<F7>: Toggle outline.nvim that showing LSP symbols outline in sidebar
nvim-lintkey mappings<Leader>ll: Execute linter
- Diagnostic key mappings
[d: Goto previous diagnostic error]d: Goto next diagnostic errorgo: Open floating window with diagnostic informationyoo: Toggle diagnostic
trouble.nvimkey mappings<Space>xx: Show workspace diagnostics in Trouble UI or toggle Trouble UI<Space>xd: Show document diagnostics in Trouble UI<Space>xs: Show document symbols in Trouble UI<Space>xl: Show definitions / references in Trouble UI[x: Goto previous diagnostic error in Trouble UI]x: Goto next diagnostic error in Trouble UI
oil.nvimkey mappings-: Open current buffer folder in oil<Space>-: Open current buffer folder in split in oil
defx.nvimkey mappings<Space>dd: Open current buffer folder in Defx<Space>ds: Open current buffer folder in split in Defx<F4>: Toggle Defx as sidebar file explorer<Space><F4>: Toggle Defx as sidebar file explorer and find current buffer
grug-far.nvimkey mappings<Space>gw: Find and replace cursor word/visual selection globally<Space>g': Find and replace cursor word/visual selection in current file
hop.nvimkey mappings<Space>e: Goto word end<Space>;: Search and goto pattern<LocalLeader>f: Goto 1 character<LocalLeader>l: Goto line<Space>cw: Goto camel-case word<Space>': Goto treesitter node
lightspeed.nvimkey mappingsf: Forward search and goto 1 charactersF: Backward search and goto 1 characters;: Forward search and goto 2 characters<M-;>: Backward search and goto 2 characters
flash.nvimkey mappings<Space>w: Goto word start<Space>j: Goto below lines<Space>k: Goto above lines<Leader>f: Goto searched text
- Treesitter key mappings
affor textobject: outer function textobjectiffor textobject: inner function textobjectacfor textobject: outer class textobjecticfor textobject: inner class textobject]m: Goto next function start[m: Goto previous function start]]: Goto next class start[]: Goto previous class start<F6>: Toggle context<CR>: Incremental selection (init / scope)<Tab>/<S-Tab>: Incremental selection (node inc / dec)<M-h>,<M-j>,<M-k>,<M-l>in visual mode: navigate node<M-S-j>,<M-S-k>in visual mode: swap node
vim-fugitivekey mappings<Leader>gs: Show git status<Leader>gc: Show git blame commit of current line<Leader>gd: Compare current buffer with git indexed file using vimdiff<Leader>gb: Show git blame of current buffer<Leader>gl: Show git log in quickfix and display most recent commit<Leader>gL: Show git log of current buffer in quickfix and display most recent commit
vim-flogkey mappings<Space>gf: Open Flog UI<Leader>gf: Show current file in Flog UI<Leader>gdin Flog UI: Search and open diff files in current git commit using FZF<Leader>gdon visual selection in Flog UI: Search and open diff files in between last git commit and first git commit using FZF<Leader>gfin Flog UI: Search and open git files in current git commit using FZF<Leader>ggin Flog UI: Grep and goto git files in current git commit using FZF and ripgrep
vim-floatermkey mappings<M-2>: Toggle Floaterm terminal<M-3>: Goto previous Floaterm terminal<M-4>: Goto next Floaterm terminal<M-5>: Open new Floaterm terminal
markview.nvimkey mappingscohinmarkdownbuffer: Togglemarkview.nvimpreview
- Custom key mappings
<M-h>,<M-j>,<M-k>,<M-l>: Move between windows, like<C-W>h,<C-W>j,<C-W>k, and<C-W>l<C-J>,<C-K>: Move between tabs, likegTandgt<Space>q: Close window, like:q<CR><Leader>d5: Change current window working directory to folder containing current buffer. Equivalent of:lcd %:h<CR>.<M-1>: Switch to last tab<Leader><Tab>s: Open shell in horizontal split<Leader><Tab>t: Open shell in new tab
- Terminal key mappings
<M-F1>: Escape terminal mode to normal mode<M-r>: Paste from register
- Add full plugin dependencies
- Add provider plugin for dependencies
- Add nvim-dap and related plugins.
- Add description to key mappings
- Add description to LuaSnip snippets
- Add noice.nvim
- Add other terminal plugin, like toggleterm.nvim, and change overseer.nvim strategy to toggleterm.
- Replace
nvim-cmpwithblink.cmp - Migrate nvim-treesitter from
mastertomainbranch - Migrate nvim-lspconfig from
setuptoconfig&enable
Vim specific config is removed, but you can use vim branch to access them.
Packer specific config is removed, but you can use packer branch to access them.
- rockerBOO/awesome-neovim Collections of awesome neovim plugins.
- Dotfyle | Neovim Plugins & Neovim News
- LazyVim/LazyVim Neovim config for the lazy
- AstroNvim/AstroNvim AstroNvim is an aesthetic and feature-rich neovim config that is extensible and easy to use with a great set of plugins
- NvChad/NvChad Blazing fast Neovim config providing solid defaults and a beautiful UI, enhancing your neovim experience.


