A modern, batteries-included Neovim setup built on LazyVim. Designed as an IntelliJ replacement with full LSP support, AI assistance, debugging, testing, and Git integration.
| Location | Purpose |
|---|---|
~/.config/nvim/ |
Main configuration - Lua files, settings |
~/.local/share/nvim/lazy/ |
Installed plugins (~93 plugins) |
~/.local/share/nvim/mason/ |
LSP servers, formatters, linters |
~/.local/state/nvim/ |
State files (shada, sessions) |
~/.cache/nvim/ |
Cache files |
~/.config/nvim/
├── init.lua # Entry point
├── lazy-lock.json # Plugin version lock file
├── lazyvim.json # LazyVim extras configuration
├── lua/
│ ├── config/
│ │ ├── lazy.lua # Plugin manager + LazyVim extras
│ │ ├── keymaps.lua # Custom key bindings
│ │ ├── options.lua # Editor options
│ │ └── autocmds.lua # Auto commands
│ └── plugins/
│ ├── ai.lua # AI assistants (Avante, CodeCompanion)
│ ├── git.lua # Git integration (gitsigns, diffview, neogit)
│ ├── lsp.lua # LSP servers and formatters
│ └── editor.lua # Editor enhancements
- Neovim >= 0.10.0
- Git
- Node.js >= 18 (for LSP servers)
- ripgrep - for Telescope grep
- fd - for Telescope file finding
- lazygit - for Git UI
brew install neovim ripgrep fd lazygit nodemv ~/.config/nvim ~/.config/nvim.backup
mv ~/.local/share/nvim ~/.local/share/nvim.backup
mv ~/.local/state/nvim ~/.local/state/nvim.backupgit clone <your-repo-url> ~/.config/nvimnvimOn first launch:
- lazy.nvim will auto-install all plugins
- Mason will install language servers and tools
- Treesitter will compile parsers
Add to ~/.zshrc or ~/.bashrc:
export ANTHROPIC_API_KEY="sk-ant-..." # For Claude AI
export OPENAI_API_KEY="sk-..." # For GPT (optional)| Language | LSP | Formatter | Linter | Debugger | Test Runner |
|---|---|---|---|---|---|
| Rust | rust-analyzer | rustfmt | clippy | codelldb | neotest |
| Go | gopls | gofumpt | golangci-lint | delve | neotest-golang |
| TypeScript/JavaScript | ts_ls | prettier | eslint | js-debug-adapter | neotest |
| Python | pyright | black, isort | ruff | debugpy | neotest-python |
| Ruby | ruby-lsp | rubocop | rubocop | rdbg | neotest-rspec |
| Elixir | elixirls | mix format | credo | - | neotest-elixir |
| Clojure | clojure-lsp | cljfmt | clj-kondo | - | conjure |
| Kotlin | kotlin-language-server | ktlint | ktlint | - | - |
| Dart/Flutter | flutter-tools | dart format | dart analyze | flutter | neotest-dart |
| Swift | sourcekit-lsp | swiftformat | swiftlint | - | - |
| Vue | volar | prettier | eslint | - | - |
| Lua | lua_ls | stylua | - | nlua | - |
| SQL | sqlls | - | - | - | - |
| Terraform | terraformls | terraform fmt | tflint | - | - |
| Ansible | ansiblels | - | ansible-lint | - | - |
| Docker | dockerfile-ls | - | hadolint | - | - |
| YAML | yaml-language-server | prettier | yamllint | - | - |
| JSON/JSONC | jsonls | prettier | - | - | - |
| TOML | taplo | taplo | - | - | - |
| Markdown | - | prettier | markdownlint | - | - |
| HTML/CSS | html-lsp, css-lsp | prettier | - | - | - |
| Tailwind | tailwindcss | prettier | - | - | - |
| Plugin | Description |
|---|---|
| lazy.nvim | Plugin manager with lazy loading |
| LazyVim | Neovim distro with sensible defaults |
| nvim-lspconfig | LSP configuration |
| mason.nvim | LSP/DAP/linter/formatter installer |
| nvim-treesitter | Syntax highlighting and code understanding |
| telescope.nvim | Fuzzy finder |
| blink.cmp | Completion engine |
| snacks.nvim | Collection of small QoL plugins |
| Plugin | Description | Key Bindings |
|---|---|---|
| claudecode.nvim | Claude Code CLI integration | Works with claude CLI |
| avante.nvim | Cursor-like AI (Claude/GPT/Ollama) | <leader>aa ask, <leader>ae edit, <leader>at toggle |
| codecompanion.nvim | Multi-LLM chat interface | <leader>cc chat, <leader>ca actions, ga (visual) add to chat |
| copilot.lua | GitHub Copilot | Auto-suggestions in insert mode |
| Plugin | Description | Key Bindings |
|---|---|---|
| gitsigns.nvim | Git decorations, hunk actions | ]h/[h next/prev hunk, <leader>ghs stage, <leader>ghr reset, <leader>ghp preview, <leader>gtb toggle blame |
| diffview.nvim | Git diff viewer | <leader>gd open diffview, <leader>gfh file history |
| neogit | Magit-like Git interface | <leader>gn neogit, <leader>gc commit, <leader>gp push |
| git-conflict.nvim | Conflict marker resolution | Auto-highlights conflicts |
| lazygit | Terminal Git UI | <leader>gg open lazygit |
| Plugin | Description | Key Bindings |
|---|---|---|
| nvim-dap | Debug Adapter Protocol | <leader>db breakpoint, <leader>dB conditional breakpoint |
| nvim-dap-ui | Debugger UI | <leader>du toggle UI |
| nvim-dap-go | Go debugger | <leader>dc continue, <leader>di step into, <leader>do step over |
| nvim-dap-python | Python debugger | <leader>dt terminate, <leader>dr run to cursor |
| nvim-dap-ruby | Ruby debugger | |
| one-small-step-for-vimkind | Lua/Neovim debugger |
| Plugin | Description | Key Bindings |
|---|---|---|
| neotest | Test runner framework | <leader>tt run nearest, <leader>tf run file, <leader>ts summary, <leader>to output |
| neotest-golang | Go test adapter | |
| neotest-python | Python (pytest) adapter | |
| neotest-rspec | Ruby RSpec adapter | |
| neotest-elixir | Elixir ExUnit adapter | |
| neotest-dart | Dart/Flutter adapter |
| Plugin | Description | Key Bindings |
|---|---|---|
| oil.nvim | File manager as buffer | - open parent dir, <leader>o open oil |
| vim-tmux-navigator | Seamless tmux/vim navigation | <C-h/j/k/l> navigate splits/panes |
| hardtime.nvim | Break bad vim habits | <leader>uH toggle |
| flash.nvim | Navigation/search | s flash jump, S flash treesitter |
| which-key.nvim | Keybinding hints | Press <leader> and wait |
| trouble.nvim | Diagnostics list | <leader>xx toggle trouble |
| todo-comments.nvim | Highlight TODO/FIXME | ]t/[t next/prev todo, <leader>st search |
| nvim-surround | Surround text objects | ys{motion}{char} add, ds{char} delete, cs{old}{new} change |
| grug-far.nvim | Search and replace | <leader>sr open |
| persistence.nvim | Session management | <leader>qs restore, <leader>ql restore last |
| nvim-ufo | Better folding | zR open all, zM close all, zK peek |
| neoscroll.nvim | Smooth scrolling | <C-u/d/b/f> smooth scroll |
| auto-save.nvim | Auto-save files | Automatic (2s debounce) |
| marks.nvim | Better marks | m{a-z} set, '{a-z} jump |
| dashboard-nvim | Start screen | Shows on empty nvim |
| Plugin | Description | Key Bindings |
|---|---|---|
| yanky.nvim | Better yank/paste with history | p/P paste, <C-p>/<C-n> cycle history |
| dial.nvim | Increment/decrement values | <C-a> increment, <C-x> decrement |
| refactoring.nvim | Refactoring operations | <leader>re extract function, <leader>rv extract variable |
| mini.pairs | Auto-pairs | Auto-close brackets, quotes |
| mini.ai | Extended text objects | vaf select function, vic select class |
| mini.hipatterns | Highlight patterns | Highlights hex colors, TODO, etc. |
| nvim-ts-autotag | Auto-close HTML tags | Automatic |
| Plugin | Description | Key Bindings |
|---|---|---|
| rustaceanvim | Enhanced Rust | <leader>cR code action, <leader>dr debuggables |
| flutter-tools.nvim | Flutter/Dart | <leader>Fs run, <leader>Fr reload, <leader>FR restart |
| crates.nvim | Cargo.toml helper | Shows crate versions, <leader>cu update |
| conjure | Interactive REPL (Clojure, etc.) | <leader>ee eval, <leader>eb eval buffer |
| nvim-paredit | Paredit for Lisp | >) slurp, <) barf |
| venv-selector.nvim | Python venv picker | <leader>cv select venv |
| nvim-ansible | Ansible support | Syntax, snippets |
| telescope-terraform | Terraform docs/state | <leader>ft terraform |
| vim-dadbod | Database client | :DB queries |
| vim-dadbod-ui | Database UI | <leader>D toggle DBUI |
| Plugin | Description |
|---|---|
| tokyonight.nvim | Default colorscheme |
| catppuccin | Alternative colorscheme |
| bufferline.nvim | Tab/buffer line |
| lualine.nvim | Status line |
| noice.nvim | UI for messages, cmdline, popupmenu |
| indent-blankline.nvim | Indent guides |
| nvim-bqf | Better quickfix |
| baleia.nvim | ANSI colors in buffers |
Leader key: <Space>
| Key | Mode | Description |
|---|---|---|
jj or jk |
Insert | Escape to normal mode |
<leader>w |
Normal | Save file |
<leader>q |
Normal | Quit |
<C-h/j/k/l> |
Normal | Navigate splits (tmux-aware) |
<S-h> / <S-l> |
Normal | Previous/next buffer |
<leader>bd |
Normal | Delete buffer |
| Key | Mode | Description |
|---|---|---|
gd |
Normal | Go to definition |
gr |
Normal | Find references |
gI |
Normal | Go to implementation |
gy |
Normal | Go to type definition |
K |
Normal | Hover documentation |
gK |
Normal | Signature help |
<leader>ca |
Normal/Visual | Code actions |
<leader>cr |
Normal | Rename symbol |
<leader>cf |
Normal | Format file |
<leader>cd |
Normal | Line diagnostics |
]d / [d |
Normal | Next/previous diagnostic |
<leader>uh |
Normal | Toggle inlay hints |
| Key | Mode | Description |
|---|---|---|
<leader>ff |
Normal | Find files |
<leader>fg |
Normal | Live grep |
<leader>fb |
Normal | Find buffers |
<leader>fr |
Normal | Recent files |
<leader>fs |
Normal | Find symbols |
<leader>sw |
Normal | Search word under cursor |
<leader>/ |
Normal | Grep in current buffer |
| Key | Mode | Description |
|---|---|---|
<leader>e |
Normal | Toggle neo-tree |
- |
Normal | Open oil (parent directory) |
<leader>o |
Normal | Open oil |
| Key | Mode | Description |
|---|---|---|
<leader>y |
Normal/Visual | Yank to system clipboard |
<leader>d |
Normal/Visual | Delete to void register |
gc |
Normal/Visual | Toggle comment |
J / K |
Visual | Move lines down/up |
<C-a> / <C-x> |
Normal | Increment/decrement (dial.nvim) |
p then <C-p>/<C-n> |
Normal | Paste and cycle yank history |
Use :LazyExtras to browse and enable additional language support and features. Current extras enabled:
ai.claudecode- Claude Code integrationcoding.yanky- Better yank/pasteeditor.dial- Increment/decrementeditor.refactoring- Refactoring toolslang.ansible- Ansiblelang.clojure- Clojure (Conjure)lang.dart- Dart/Flutterlang.elixir- Elixirlang.terraform- Terraformlang.toml- TOMLlang.vue- Vue.jsui.dashboard-nvim- Start screenutil.mini-hipatterns- Pattern highlightingutil.dot- Dotfile support
Edit ~/.config/nvim/lua/plugins/ai.lua and change the provider:
opts = {
provider = "claude", -- Options: "claude", "openai", "copilot", "ollama"
}For local LLMs via Ollama:
brew install ollama
ollama pull codellama:13bThen set provider = "ollama".
# Update plugins from command line
nvim --headless "+Lazy! sync" +qa
# Or inside Neovim
:Lazy sync
# Update Mason tools
:Mason # then press U| Command | Description |
|---|---|
:Lazy |
Plugin manager UI |
:LazyExtras |
Enable/disable LazyVim extras |
:Mason |
LSP/tool installer UI |
:LspInfo |
LSP status for current buffer |
:TSInstall {lang} |
Install treesitter parser |
:checkhealth |
Check Neovim health |
:Telescope keymaps |
Search all keybindings |
:ConformInfo |
Show active formatters |
:checkhealth