NOTICE : This is the second version of my Neovim configuration. It's been fully restructured and now uses lazy.nvim as the plugin manager for faster and more efficient performance. You can install, customize, and extend this configuration as much as you like. It's intended to serve as a clean and modern reference setup for new Neovim users.Vim is better na kub.
| Language | Status |
|---|---|
| Java | ✅ |
| Golang | ✅ |
| Plugin | Description |
|---|---|
| bufferline.nvim | Buffer/tab line |
| catppuccin | Theme/colorscheme |
| cmp-buffer | Completion source (buffer) |
| cmp-nvim-lsp | LSP source for nvim-cmp |
| cmp-path | Completion source (filesystem paths) |
| cmp_luasnip | LuaSnip source for nvim-cmp |
| dashboard-nvim | Neovim start screen |
| fidget.nvim | LSP progress UI |
| friendly-snippets | Ready-to-use snippets |
| gitsigns.nvim | Git signs in gutter |
| image.nvim | Render images in Neovim |
| indent-blankline.nvim | Indentation guides |
| lazy.nvim | Plugin manager |
| lazygit.nvim | Launch lazygit inside Neovim |
| leap.nvim | Motion/navigation plugin |
| lualine.nvim | Status line |
| LuaSnip | Snippet engine |
| mason-lspconfig.nvim | Mason LSP bridge |
| mason-null-ls.nvim | Mason source manager for null-ls |
| mason-tool-installer.nvim | Auto installer for Mason tools |
| mason.nvim | LSP/DAP server installer |
| multicursor.nvim | Multi-cursor support |
| neo-tree.nvim | File explorer |
| neoscroll.nvim | Smooth scrolling |
| noice.nvim | Modern notification & UI |
| none-ls-extras.nvim | Extra sources for none-ls |
| none-ls.nvim | Linter/formatter engine |
| nui.nvim | UI component lib |
| nvim-autopairs | Auto close brackets/quotes |
| nvim-cmp | Autocompletion engine |
| nvim-colorizer.lua | Color codes preview |
| nvim-lspconfig | LSP setup |
| nvim-notify | Fancy notifications |
| nvim-surround | Add/change/delete surrounding text |
| nvim-treesitter | Syntax highlighting |
| nvim-web-devicons | File icons |
| nvim-window-picker | Easy window switching |
| plenary.nvim | Lua helper library |
| render-markdown.nvim | Markdown rendering |
| smear-cursor.nvim | Cursor trail |
| telescope-fzf-native.nvim | Native FZF sorter for Telescope |
| telescope-ui-select.nvim | UI picker for Telescope |
| telescope.nvim | Fuzzy finder |
| todo-comments.nvim | Highlight and manage TODOs |
| vim-bbye | Buffer closing without closing window |
| vim-fugitive | Git integration |
| vim-rhubarb | GitHub extension for fugitive |
| vim-sleuth | Auto-detect indentation |
| vim-tmux-navigator | Navigate tmux splits from Neovim |
| which-key.nvim | Keybinding helper |
| hererocks | Python environment (required for some LSPs) |
| trouble.nvim | LSP diagnostics panel, bound to <leader>dX, <leader>cl, etc. |
| nvim-java | Painless Java in Neovim |
| tiny-inline-diagnostic.nvim | PDisplay diagnostic messages where the cursor is |
Important
- Mason has already installed some languages, and for some languages, errors may occur during installation if they are not available on your machine, such as Golang and Java. If you don’t use them, it’s recommended to remove them.
- The
nvim-javaplugin has a JDK version configured, which may cause errors when opening Neovim. If you don’t need it, you should remove the plugin and also delete its configuration inlsp.lua.
MacOS/Linux
brew install neovim ripgrepWindows
scoop install neovimMacOS/Linux
git clone https://github.com/Bourbxn/bourbxn-nvim-v2.git ~/.config/nvimWindows
git clone https://github.com/Bourbxn/bourbxn-nvim-v2.git $HOME\AppData\Local\nvimMacOS/Linux
rm -rf ~/.config/nvim
rm -rf ~/.local/share/nvim
rm -rf ~/.cache/nvimWindows
rd -r ~\AppData\Local\nvim
rd -r ~\AppData\Local\nvim-dataFor plugins that are easy to use and require little to no configuration (e.g., nvim-colorizer.lua, todo-comments.nvim), add them to the file /nvim/lua/plugins/misc.lua and restart neovim.
return {
-- ...
{
'kylechui/nvim-surround',
version = '^3.0.0',
event = 'VeryLazy',
config = function()
require('nvim-surround').setup {
-- Optional configuration here or leave empty for defaults
}
end,
},
-- ### Add new plugins here ###
}- Create a new Lua file named after the plugin inside
/nvim/lua/plugins/<plugin-name>.lua - Example plugin config file (.lua):
return {
'author/plugin-name',
config = function()
-- Detailed plugin configuration here
end,
}- Then, open your main Neovim config file
/nvim/init.lua - Add the new plugin module inside the lazy setup call:
require('lazy').setup {
-- Other plugins...
require('plugins.smear-cursor'),
require('plugins.trouble'),
-- ### Import new plugins here ###
}- Restart neovim
- Delete or comment out the plugin from:
~/.config/nvim/lua/plugins/misc.lua- or
plugins/<plugin-name>.lua
- Remove its import from
init.luaif you usedrequire('plugins.plugin-name'). - Restart neovim
Configure keymaps at /nvim/lua/core/keymaps.lua (Built-in keymaps) and /nvim/lua/core/plugins/<plugin> (Plugin keymaps)
Mapleader is a first key to start using keymaps. Keymaps should use mapleader because keymaps shortkey will not cover default vim shortkey. Normally neovim user used spacebar as mapleader.
vim.g.mapleader = "<mapleader>"[mode] has 3 modes normal moden, insert modei and visual modev
[keys] can add many keys on keyboard ex. "<leader>ee"
[command] can add neovim command ex. "<cmd>NvimTreeToggle<cr>"
vim.g.mapleader = " "
local keymap = vim.keymap
local opts = { buffer = 0 }
...
keymap.set("[mode]", "<leader>[keys]", "<cmd>[command]<cr>")| Mode | Key | Action Description |
|---|---|---|
i |
jk |
Exit insert mode |
n |
<C-s> |
Save file (:w) |
n |
<leader>sn |
Save file without formatting (:noautocmd w) |
n |
<C-q> |
Quit file (:q) |
n |
x |
Delete character without copying |
n |
<C-d> / <C-u> |
Scroll down/up and center screen |
n |
n / N |
Find next/prev search result and center screen |
n |
<Up>/<Down> |
Resize window height |
n |
<Left>/<Right> |
Resize window width |
n |
<Tab> / <S-Tab> |
Switch to next/previous buffer |
n |
<leader>x |
Close buffer (:Bdelete) |
n |
<leader>b |
New empty buffer (:enew) |
n |
<leader>v |
Vertical split (<C-w>v) |
n |
<leader>h |
Horizontal split (<C-w>s) |
n |
<leader>se |
Equalize split sizes (<C-w>=) |
n |
<leader>xs |
Close current split window (:close) |
n |
<leader>pk/pj/ph/pl |
Move between splits (up/down/left/right) |
n |
<leader>to |
Open new tab (:tabnew) |
n |
<leader>tx |
Close current tab (:tabclose) |
n |
<leader>tn/tp |
Go to next/previous tab |
n |
<leader>lw |
Toggle line wrap |
v |
< / > |
Stay in indent mode while shifting |
v |
p |
Paste without overwriting the yank register |
n |
[d / ]d |
Go to previous/next diagnostic |
n |
<leader>d |
Show diagnostic in floating window |
n |
<leader>q |
Open diagnostic location list |
v |
J/K |
Move lines up/down |
n |
<leader>nh |
Clear search highlight |
| Mode | Key | Action Description | Plugin |
|---|---|---|---|
i, s |
<Tab> |
Select next item or expand snippet | nvim-cmp + LuaSnip |
i, s |
<S-Tab> |
Select previous item or jump back | nvim-cmp + LuaSnip |
i, s |
<C-l> |
Jump to next snippet placeholder | LuaSnip |
i, s |
<C-h> |
Jump to previous snippet placeholder | LuaSnip |
i |
<C-n> |
Select next completion item | nvim-cmp |
i |
<C-p> |
Select previous completion item | nvim-cmp |
i |
<C-b> |
Scroll completion docs up | nvim-cmp |
i |
<C-f> |
Scroll completion docs down | nvim-cmp |
i |
<C-y> |
Confirm completion item | nvim-cmp |
i |
<C-Space> |
Trigger completion manually | nvim-cmp |
n |
<leader>gg |
Open LazyGit | lazygit.nvim |
n |
gd |
Goto LSP definition | telescope.nvim |
n |
gr |
Find references | telescope.nvim |
n |
gI |
Goto implementation | telescope.nvim |
n |
gD |
Goto declaration | vim.lsp |
n |
<leader>D |
Type definition | telescope.nvim |
n |
<leader>ds |
Document symbols | telescope.nvim |
n |
<leader>ws |
Workspace symbols | telescope.nvim |
n |
<leader>rn |
Rename symbol | vim.lsp |
n,x |
<leader>ca |
Code action | vim.lsp |
n |
<leader>sh |
Search help | telescope.nvim |
n |
<leader>sk |
Search keymaps | telescope.nvim |
n |
<leader>sf |
Find files | telescope.nvim |
n |
<leader>ss |
Telescope builtins | telescope.nvim |
n |
<leader>sw |
Search current word | telescope.nvim |
n |
<leader>sg |
Live grep | telescope.nvim |
n |
<leader>sd |
Search diagnostics | telescope.nvim |
n |
<leader>sr |
Resume last picker | telescope.nvim |
n |
<leader>s. |
Search recent files | telescope.nvim |
n |
<leader><leader> |
Search buffers | telescope.nvim |
n |
<leader>dx |
Toggle diagnostics view | trouble.nvim |
n |
<leader>dX |
Toggle buffer diagnostics | trouble.nvim |
n |
<leader>cs |
Toggle LSP symbols | trouble.nvim |
n |
<leader>cl |
Toggle LSP definitions/references | trouble.nvim |
n |
<leader>dL |
Toggle location list | trouble.nvim |
n |
<leader>dQ |
Toggle quickfix list | trouble.nvim |
n,x |
<Up> |
Add multicursor above | multicursor.nvim |
n,x |
<Down> |
Add multicursor below | multicursor.nvim |
n,x |
<leader><Up> |
Skip cursor above | multicursor.nvim |
n,x |
<leader><Down> |
Skip cursor below | multicursor.nvim |
n,x |
<leader>n/N |
Add next/previous match | multicursor.nvim |
n,x |
<leader>s/S |
Skip next/previous match | multicursor.nvim |
n |
<C-LeftMouse> |
Add cursor with mouse | multicursor.nvim |
n |
<C-LeftDrag> |
Drag cursor selection | multicursor.nvim |
n |
<C-LeftRelease> |
End cursor drag | multicursor.nvim |
n,x |
<C-q> |
Toggle multicursor mode | multicursor.nvim |
n |
\ |
Reveal current file in file explorer | neo-tree.nvim |
n |
<leader>e |
Toggle file explorer | neo-tree.nvim |
n |
<leader>ngs |
Show git status in float | neo-tree.nvim |
n |
<leader>z |
Dismiss notifications | noice.nvim |
n |
]h |
Next Hunk (or ]c in diff mode) |
gitsigns.nvim |
n |
[h |
Prev Hunk (or [c in diff mode) |
gitsigns.nvim |
n |
]H |
Jump to Last Hunk | gitsigns.nvim |
n |
[H |
Jump to First Hunk | gitsigns.nvim |
n,v |
<leader>ghs |
Stage Hunk | gitsigns.nvim |
n,v |
<leader>ghr |
Reset Hunk | gitsigns.nvim |
n |
<leader>ghS |
Stage Buffer | gitsigns.nvim |
n |
<leader>ghu |
Undo Stage Hunk | gitsigns.nvim |
n |
<leader>ghR |
Reset Buffer | gitsigns.nvim |
n |
<leader>ghp |
Preview Hunk Inline | gitsigns.nvim |
n |
<leader>ghb |
Blame Line (full) | gitsigns.nvim |
n |
<leader>ghB |
Blame Buffer | gitsigns.nvim |
n |
<leader>ghd |
Diff This | gitsigns.nvim |
n |
<leader>ghD |
Diff This ~ | gitsigns.nvim |
o,x |
ih |
Select Hunk | gitsigns.nvim |



