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/nvim
docker run -it --rm -v "$(pwd)":/home/neovim/workspace liubang/nvim
Clone this repository into your Neovim config directory:
git clone https://github.com/liubang/nvimrc ~/.config/nvim
nvim
If 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
nvim
On 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 |
j |
accelerated-jk.nvim Accelerated gj movement | n |
k |
accelerated-jk.nvim Accelerated gk movement | 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 |
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 |
<Leader>hb |
gitsigns.nvim Show the line git blame in a floating window | n |
<Leader>hd |
gitsigns.nvim Perform a vimdiff on the given file |
n |
<Leader>hr |
gitsigns.nvim Reset the lines of the hunk at the cursor position | n |
<Leader>hs |
gitsigns.nvim Stage the hunk at the cursor position | n |
<leader>sr |
grug-far.nvim Search and Replace | n, v |
<Leader>mp |
markview.nvim Markdown Preview | n |
<leader>bd |
mini.bufremove Delete Buffer | n |
<leader>bD |
mini.bufremove Delete Buffer (Force) | n |
gc |
mini.comment Toggle line comment | n, x |
gcc |
mini.comment Toggle line comment | n |
<leader>ft |
mini.files Toggle mini.files (Directory of Current File) | n |
<leader>fT |
mini.files Toggle mini.files (cwd) | n |
<leader>dB |
nvim-dap Breakpoint Condition | n |
<leader>db |
nvim-dap Toggle Breakpoint | n |
<leader>dc |
nvim-dap Continue | n |
<leader>da |
nvim-dap Run with Args | n |
<leader>dC |
nvim-dap Run to Cursor | n |
<leader>dl |
nvim-dap Run Last | n |
<leader>di |
nvim-dap Step Into | n |
<leader>do |
nvim-dap Step Out | n |
<leader>dO |
nvim-dap Step Over | n |
<leader>dp |
nvim-dap Pause | n |
<leader>dt |
nvim-dap Terminate | n |
<leader>dj |
nvim-dap Down | n |
<leader>dk |
nvim-dap Up | n |
<leader>dg |
nvim-dap Go to Line (No Execute) | n |
<leader>ds |
nvim-dap Session | n |
<leader>dr |
nvim-dap Toggle REPL | n |
<leader>dw |
nvim-dap Widgets | n |
<C-v> |
nvim-treesitter Increment Selection | n |
V |
nvim-treesitter Decrement Selection | x |
- |
oil.nvim Open parent directory | n |
<Leader>- |
oil.nvim Open parent directory | n |
<Leader>tl |
outline.nvim Open or close the outline window | n |
<Leader>ff |
telescope.nvim List files | n |
<Leader>rf |
telescope.nvim List recent files | n |
<Leader>ag |
telescope.nvim Grep in files | n |
<Leader>Ag |
telescope.nvim Searches for the string under your cursor (root dir) | n |
<Leader>bb |
telescope.nvim Lists open buffers in current neovim instance | n |
<Leader>ts |
telescope.nvim Lists AsyncTasks for current buffer | n |
<Leader>br |
telescope.nvim Bazl run | n |
<Leader>bt |
telescope.nvim Bazel test | n |
<Leader>bs |
telescope.nvim Bazel build | n |
<leader>vv |
venn.nvim Toggle draw box | n |
<C-t> |
vim-floaterm Toggle floaterm | n, t |
<C-n> |
vim-floaterm Create a new floaterm window | t |
<C-k> |
vim-floaterm Goto previous floaterm window | t |
<C-j> |
vim-floaterm Goto next floaterm window | t |
<C-d> |
vim-floaterm Kill floaterm | t |
- accelerated-jk.nvim
- alpha-nvim
- asyncrun.vim
- asynctasks.vim
- autoclose.nvim
- blink.cmp
- bufferline.nvim
- diffview.nvim
- fidget.nvim
- flash.nvim
- friendly-snippets
- fzy-lua-native
- gitsigns.nvim
- grug-far.nvim
- gruvbox-material
- lazy.nvim
- lazydev.nvim
- leetcode.nvim
- lualine.nvim
- LuaSnip
- markview.nvim
- mason-lspconfig.nvim
- mason.nvim
- mini.align
- mini.bufremove
- mini.comment
- mini.cursorword
- mini.files
- mini.icons
- mini.surround
- neogen
- none-ls.nvim
- nui.nvim
- nvim-dap
- nvim-dap-virtual-text
- nvim-highlight-colors
- nvim-java
- nvim-lspconfig
- nvim-navic
- nvim-nio
- nvim-treesitter
- oil.nvim
- outline.nvim
- plenary.nvim
- schemastore.nvim
- smartyank.nvim
- spring-boot.nvim
- telescope-fzf-native.nvim
- telescope-live-grep-args.nvim
- telescope-ui-select.nvim
- telescope-undo.nvim
- telescope.nvim
- tla.nvim
- venn.nvim
- vim-caser
- vim-diagon
- vim-floaterm
- vim-matchup
- vimtex
- wilder.nvim


