- Fast start. Everything lazy-loads on a key, command or event. Cold start is ~30 ms.
- Web stack ready. LSP, formatting and debugging for TS, Svelte, Astro, Tailwind, CSS and Go, installed by Mason on first run.
- Format on save. ESLint autofix, then Prettier / stylua / shfmt / gofmt via conform.nvim.
- Modern treesitter. nvim-treesitter
main with textobjects, sticky context and auto-closing tags.
- Copilot on demand. Off by default, one key turns on inline suggestions and the blink.cmp source.
- Small. About 1.1k lines of Lua, one file per plugin area, no framework.
| Tool |
Used by |
| Neovim 0.12+ |
everything |
| git, make |
lazy.nvim, fzf-native, LuaSnip |
| node, go |
language servers, prettier, gofmt |
| ripgrep, fd |
Telescope |
tree-sitter CLI (brew install tree-sitter-cli) |
building parsers |
| lazygit |
,g |
| a Nerd Font |
icons |
git clone git@github.com:ecelustka/neo.git ~/.config/nvim
nvim
lazy.nvim bootstraps itself, then Mason installs language servers, formatters
and the JS debug adapter. :Lazy and :Mason show progress.
init.lua leader, requires config/*
lua/config/options.lua vim options
lua/config/lazy.lua lazy.nvim bootstrap, imports lua/plugins/*
lua/config/keymaps.lua plugin-independent keymaps
lua/config/autocmds.lua yank highlight, eslint fix + format on save
lua/plugins/*.lua one plugin spec file per area
lua/blink_copilot_safe.lua guard around the copilot completion source
Keymaps that belong to a plugin live in that plugin's spec under keys.
| Area |
Plugins |
| Colors |
catppuccin |
| Completion |
blink.cmp, LuaSnip, friendly-snippets, blink-cmp-copilot |
| LSP |
nvim-lspconfig, mason, mason-lspconfig, mason-tool-installer, lazydev |
| Syntax |
nvim-treesitter main, textobjects, context, nvim-ts-autotag |
| Formatting |
conform.nvim |
| Files |
neo-tree, Telescope + fzf-native, harpoon |
| Git |
gitsigns, lazygit.nvim, octo.nvim |
| Debug |
nvim-dap, nvim-dap-ui, nvim-dap-virtual-text |
| UI |
lualine, which-key, toggleterm, nvim-autopairs |
| Other |
copilot.lua, swagger-preview |
Language servers: astro · cssls · eslint · gopls · html · jsonls · lua_ls · marksman · stylelint_lsp · svelte · tailwindcss · ts_ls · yamlls
Formatters: prettier · stylua · shfmt · gofmt · terraform fmt
Leader is ,. Press it and wait for which-key.
Editing
| Key |
Action |
d x |
delete without touching the register |
p (visual) |
paste without overwriting the register |
,j ,k |
move line or selection down / up |
,n |
new vertical split |
<C-h/j/k/l> |
move between windows |
af if ac ic aa ia |
function / class / argument textobjects |
Find and navigate
| Key |
Action |
,p |
find files |
,f |
live grep |
,e |
toggle neo-tree |
,ha ,he ,hD |
harpoon add / menu / clear |
,h1 – ,h4 |
harpoon slot |
<C-t> |
toggle terminal (2<C-t> for terminal 2) |
LSP and diagnostics
| Key |
Action |
gd gD |
definition (same window / vsplit) |
gr gi |
references / implementations |
ge |
diagnostics list |
K D |
hover / diagnostic float |
,rn ,ca |
rename / code action |
Git
| Key |
Action |
,g |
lazygit |
]c [c |
next / previous hunk |
,Gs ,Gr |
stage / reset hunk (also in visual) |
,Gp ,Gb ,Gd |
preview hunk / blame line / diff buffer |
Debug
| Key |
Action |
<F5> <F6> <F11> <F12> |
continue / step over / into / out |
,b ,B |
breakpoint / conditional breakpoint |
,ui |
toggle DAP UI |
Copilot
| Key |
Action |
,ct |
toggle Copilot (inline suggestions and blink source) |
,, |
accept suggestion |
<M-]> <M-[> <C-]> |
next / previous / dismiss |
Completion (blink.cmp default preset)
| Key |
Action |
<C-space> |
open / toggle docs |
<C-n> <C-p> |
next / previous |
<C-y> |
accept |
<C-e> |
cancel |
<Tab> <S-Tab> |
snippet jump |
BufWritePre runs LspEslintFixAll on JS/TS/Svelte/Vue/Astro buffers, then
conform formats the buffer with the filetype's formatter, falling back to the
LSP where none is configured.
MIT