A fast, practical, and fully Lua-based Neovim setup for day-to-day development.
This repository contains my personal Neovim configuration, shaped around a few goals:
- Fast startup and responsive editing.
- Sensible defaults that work out of the box.
- A modern Lua-first configuration built on top of
lazy.nvim. - Useful tooling for real projects, including LSP, Telescope, Git, debugging, Markdown, Java, and Bazel workflows.
- Auto-generated documentation for keymaps and installed plugins so the README stays in sync with the config.
Startup time is typically under 30 ms on a modern machine. That number depends on your hardware, filesystem, and plugin state. The original measurements were taken with rhysd/vim-startuptime.
Required:
- Neovim >= 0.11.0 with LuaJIT
- Git >= 2.19.0 for partial clone support
- A Nerd Font
Recommended:
ripgrepfor fast project searchfdfor better file discovery in Telescope pickers- Language-specific tools you already use locally, such as LSP servers, formatters, DAP adapters, Java runtimes, or Bazel
If you want to try the configuration without touching your local setup, run it with Docker:
docker run -it --rm liubang/nvimdocker run -it --rm -v "$(pwd)":/home/neovim/workspace liubang/nvimClone this repository into your Neovim config directory:
git clone https://github.com/liubang/nvimrc ~/.config/nvim
nvimIf you already have a Neovim configuration, back it up first:
mv ~/.config/nvim ~/.config/nvim.bak
git clone https://github.com/liubang/nvimrc ~/.config/nvim
nvimOn first launch, lazy.nvim will install the configured plugins automatically.
- Editor UX: bufferline, statusline, file explorers, surrounding/comment helpers, and smooth motion/navigation improvements.
- Project navigation: Telescope, live grep, recent files, task pickers, and outline views.
- Coding support: Treesitter, LSP, completion, snippets, formatting, and diagnostics.
- Git workflow: signs, blame, diff views, and buffer-aware navigation.
- Debugging:
nvim-dapwith keymaps for breakpoints, stepping, REPL, and widgets. - Language extras: dedicated support for Java, Markdown, LaTeX, and a few personal productivity plugins.
The Keymaps and Plugins sections below are generated from the actual configuration, which helps keep the documentation accurate as the setup evolves.
| Key | Description | Mode |
|---|---|---|
n |
Next search result | n, x, o |
N |
Previous search result | n, x, o |
<S-j> |
Move lines down | n, x |
<S-k> |
Move lines up | n, x |
<Esc><Esc> |
Clear hlsearch | n |
/ |
Search in visually selected region | x |
< |
Keep the visually selected area when indenting | x |
> |
Keep the visually selected area when indenting | x |
p |
Replace the selection without overwriting the default register | x |
<Leader>bp |
Previous | n |
<Leader>bn |
Next | n |
<Leader>bf |
First | n |
<Leader>bl |
Last | n |
<Leader>ww |
Toggle between open windows | n |
<leader>wd |
Delete window | n |
<Leader>wh |
Move to the left window | n |
<Leader>wl |
Move to the right window | n |
<Leader>wj |
Move to the bottom window | n |
<Leader>wk |
Move to the top window | n |
<Leader>ws |
Split window horizontally | n |
<Leader>wv |
Split window vertically | n |
<C-Up> |
Increase window height | n |
<C-Down> |
Decrease window height | n |
<C-Left> |
Decrease window width | n |
<C-Right> |
Increase window width | n |
<C-b> |
asynctasks.vim Build current file | n |
<C-r> |
asynctasks.vim Run current file | n |
<C-x> |
asynctasks.vim Build and run current file | n |
<Leader>1 |
bufferline.nvim Go to visible buffer 1 | n |
<Leader>2 |
bufferline.nvim Go to visible buffer 2 | n |
<Leader>3 |
bufferline.nvim Go to visible buffer 3 | n |
<Leader>4 |
bufferline.nvim Go to visible buffer 4 | n |
<Leader>5 |
bufferline.nvim Go to visible buffer 5 | n |
<Leader>6 |
bufferline.nvim Go to visible buffer 6 | n |
<Leader>7 |
bufferline.nvim Go to visible buffer 7 | n |
<Leader>8 |
bufferline.nvim Go to visible buffer 8 | n |
<Leader>9 |
bufferline.nvim Go to visible buffer 9 | n |
<leader>bo |
bufferline.nvim Delete other buffers | n |
<Leader>fm |
conform.nvim Format buffer | n, v |
s |
flash.nvim Flash | n, x, o |
S |
flash.nvim Flash Treesitter | n, x, o |
r |
flash.nvim Remote Flash | o |
R |
flash.nvim Treesitter Search | o, x |
]h |
gitsigns.nvim Next hunk | n |
[h |
gitsigns.nvim Prev hunk | n |
<Leader>hs |
gitsigns.nvim Stage the hunk at the cursor position | n |
<Leader>hr |
gitsigns.nvim Reset the lines of the hunk at the cursor position | n |
<leader>sr |
grug-far.nvim Search and Replace | n, v |
gc |
mini.comment Toggle line comment | n, x |
gcc |
mini.comment Toggle line comment | n |
- |
mini.files Open mini.files (parent directory) | n |
<leader>ft |
mini.files Toggle mini.files (Directory of Current File) | n |
<leader>fT |
mini.files Toggle mini.files (cwd) | n |
<Leader>tl |
outline.nvim Open or close the outline window | n |
<Leader>mp |
peek.nvim Markdown Preview | n |
<Leader>ff |
snacks.nvim Find files | n |
<Leader>rf |
snacks.nvim Recent files | n |
<Leader>ag |
snacks.nvim Live grep in files | n |
<Leader>Ag |
snacks.nvim Search for string under cursor | n, x |
<Leader>bb |
snacks.nvim List open buffers | n |
<leader>bd |
snacks.nvim Delete buffer | n |
<leader>bD |
snacks.nvim Delete buffer (force) | n |
<Leader>br |
snacks.nvim Bazel run | n |
<Leader>bt |
snacks.nvim Bazel test | n |
<Leader>bs |
snacks.nvim Bazel build | n |
<Leader>ts |
snacks.nvim AsyncTasks | n |
<Leader>sb |
snacks.nvim Buffer lines | n |
<Leader>gf |
snacks.nvim Git files | n |
<Leader>gs |
snacks.nvim Git status | n |
<Leader>gl |
snacks.nvim Git log | n |
<Leader>gL |
snacks.nvim Git log (current file) | n |
<Leader>gh |
snacks.nvim Git log (current line) | n |
<Leader>gv |
snacks.nvim Git diff (hunks) | n |
<Leader>gb |
snacks.nvim Git branches | n |
<C-t> |
toggleterm.nvim Toggle terminal | n |
<C-v> |
tree-sitter-manager.nvim Treesitter Increment Selection | n |
V |
tree-sitter-manager.nvim Treesitter Decrement Selection | x |
<leader>vv |
venn.nvim Toggle draw box | n |
- asyncrun.vim
- asynctasks.vim
- autoclose.nvim
- blink.cmp
- blink.lib
- bufferline.nvim
- conform.nvim
- fidget.nvim
- flash.nvim
- friendly-snippets
- gitsigns.nvim
- grug-far.nvim
- gruvbox-material
- lazy.nvim
- lazydev.nvim
- lualine.nvim
- LuaSnip
- mason-lspconfig.nvim
- mason.nvim
- mini.align
- mini.comment
- mini.cursorword
- mini.files
- mini.icons
- mini.surround
- neogen
- nui.nvim
- nvim-dap
- nvim-highlight-colors
- nvim-java
- nvim-lint
- nvim-lspconfig
- nvim-navic
- nvim-nio
- outline.nvim
- peek.nvim
- plenary.nvim
- schemastore.nvim
- snacks.nvim
- spring-boot.nvim
- tla.nvim
- toggleterm.nvim
- tree-sitter-manager.nvim
- venn.nvim
- vim-caser
- vim-diagon
- vim-matchup
- vimtex


