
neovim
Comprehensive guide for this Neovim configuration - a modular, performance-optimized Lua-based IDE. Use when configuring plugins, adding keybindings, setting up LSP servers, debugging, or extending the configuration. Covers lazy.nvim, 82+ plugins across 9 categories, DAP debugging, AI integrations, and performance optimization.
- Installs
- 296
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/julianobarbosa/claude-code-skills --skill neovim- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads neovim automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Neovim Configuration Skill
A comprehensive guide for working with this modular, performance-optimized Neovim configuration built on lazy.nvim.
Quick Reference
| Metric | Value |
|---|---|
| Plugin Manager | lazy.nvim |
| Total Plugins | 82 |
| Target Startup | <50ms |
| Module Pattern | M.setup() |
| Leader Key | <Space> |
Architecture Overview
~/.config/nvim/
├── init.lua # Entry point
├── lua/
│ ├── config/ # Core configuration (11 modules)
│ │ ├── lazy.lua # Plugin manager bootstrap
│ │ ├── options.lua # Vim options
│ │ ├── keymaps.lua # Key bindings
│ │ ├── autocmds.lua # Autocommands
│ │ └── performance.lua # Startup optimization
│ ├── plugins/specs/ # Plugin specs (9 categories)
│ │ ├── core.lua # Foundation (plenary, nui, devicons)
│ │ ├── ui.lua # UI (lualine, bufferline, noice)
│ │ ├── editor.lua # Editor (autopairs, flash, harpoon)
│ │ ├── lsp.lua # LSP (lspconfig, mason, conform)
│ │ ├── git.lua # Git (fugitive, gitsigns, diffview)
│ │ ├── ai.lua # AI (copilot, ChatGPT)
│ │ ├── debug.lua # DAP (nvim-dap, dap-ui)
│ │ ├── tools.lua # Tools (telescope, neo-tree)
│ │ └── treesitter.lua # Syntax (treesitter, textobjects)
│ ├── kickstart/ # Kickstart-derived modules
│ └── utils/ # Utility functions
└── lazy-lock.json # Plugin version lock
Standard Module Pattern
All configuration modules follow the M.setup() pattern:
local M = {}
M.setup = function()
-- Configuration logic here
end
return M
Plugin Management (lazy.nvim)
Adding a New Plugin
Add to the appropriate category file in lua/plugins/specs/:
-- lua/plugins/specs/tools.lua
return {
-- Existing plugins...
{
"author/plugin-name",
event = "VeryLazy", -- Loading strategy
dependencies = { "dep/name" }, -- Required plugins
opts = {
-- Plugin options
},
config = function(_, opts)
require("plugin-name").setup(opts)
end,
},
}
Loading Strategies
| Strategy | When to Use | Example |
|---|---|---|
lazy = true | Default, load on demand | Most plugins |
event = "VeryLazy" | After UI loads | UI enhancements |
event = "BufReadPre" | When opening files | Treesitter, gitsigns |
event = "InsertEnter" | When typing | Completion, autopairs |
cmd = "CommandName" | On command invocation | Heavy tools |
ft = "filetype" | For specific filetypes | Language plugins |
keys = {...} | On keypress | Motion plugins |
Plugin Commands
| Command | Description |
|---|---|
:Lazy | Open lazy.nvim dashboard |
:Lazy sync | Update and install plugins |
:Lazy profile | Show startup time analysis |
:Lazy clean | Remove unused plugins |
:Lazy health | Check plugin health |
LSP Configuration
See references/lsp.md for complete LSP reference.
LSP Stack
mason.nvim (installer)
├── mason-lspconfig.nvim → nvim-lspconfig
├── mason-tool-installer.nvim (auto-install)
└── mason-nvim-dap.nvim → nvim-dap
nvim-lspconfig
├── blink.cmp (completion)
├── conform.nvim (formatting)
├── nvim-lint (linting)
└── trouble.nvim (diagnostics)
Adding an LSP Server
-- In lua/plugins/specs/lsp.lua, add to mason-tool-installer list:
ensure_installed = {
"lua_ls",
"pyright",
"your_new_server", -- Add here
}
-- Configure in lspconfig setup:
servers = {
your_new_server = {
settings = {
-- Server-specific settings
},
},
}
LSP Keybindings
| Key | Action |
|---|---|
gd | Go to definition |
gr | Go to references |
gI | Go to implementation |
gD | Go to declaration |
K | Hover documentation |
<leader>rn | Rename symbol |
<leader>ca | Code action |
<leader>D | Type definition |
<leader>ds | Document symbols |
<leader>ws | Workspace symbols |
Keybindings
See references/keybindings.md for complete reference.
Core Navigation
| Key | Action |
|---|---|
<C-h/j/k/l> | Window navigation |
<S-h> / <S-l> | Previous/next buffer |
<leader>sf | Search files |
<leader>sg | Search by grep |
<leader><space> | Search buffers |
\\ | Toggle Neo-tree |
Adding Keybindings
-- In lua/config/keymaps.lua M.setup():
vim.keymap.set('n', '<leader>xx', function()
-- Your action
end, { desc = 'Description for which-key' })
-- Or in a plugin spec:
keys = {
{ "<leader>xx", "<cmd>Command<CR>", desc = "Description" },
}
Debugging (DAP)
See references/debugging.md for complete reference.
DAP Keybindings
| Key | Action |
|---|---|
<F5> | Continue/Start debugging |
<F10> | Step over |
<F11> | Step into |
<F12> | Step out |
<leader>b | Toggle breakpoint |
<leader>B | Conditional breakpoint |
Adding a Debug Adapter
-- In lua/plugins/specs/debug.lua
local dap = require("dap")
dap.adapters.your_adapter = {
type = "executable",
command = "path/to/adapter",
}
dap.configurations.your_filetype = {
{
type = "your_adapter",
request = "launch",
name = "Launch",
program = "${file}",
},
}
Performance Optimization
Startup Optimization Layers
| Layer | Technique | Savings |
|---|---|---|
| 1 | vim.loader.enable() | ~50ms |
| 2 | Skip vim._defaults | ~180ms |
| 3 | Disable providers | ~10ms |
| 4 | Disable builtins | ~20ms |
| 5 | Deferred config | ~30ms |
| 6 | Event-based loading | Variable |
Profiling Startup
:Lazy profile
Deferred Loading Pattern
-- In init.lua
vim.defer_fn(function()
require('config.options').setup()
require('config.keymaps').setup()
require('config.autocmds').setup()
end, 0)
Common Tasks
Adding an Autocommand
-- In lua/config/autocmds.lua M.setup():
vim.api.nvim_create_autocmd("FileType", {
pattern = { "markdown", "text" },
callback = function()
vim.opt_local.wrap = true
vim.opt_local.spell = true
end,
})
Adding Vim Options
-- In lua/config/options.lua M.setup():
vim.opt.your_option = value
Creating a Utility Function
-- In lua/utils/init.lua
local M = {}
M.your_function = function(args)
-- Implementation
end
return M
-- Usage: require('utils').your_function(args)
Plugin Categories
Core (4 plugins)
plenary.nvim, nui.nvim, nvim-web-devicons, lazy.nvim
UI (11 plugins)
tokyonight, alpha-nvim, lualine, bufferline, noice, nvim-notify, which-key, indent-blankline, mini.indentscope, fidget, nvim-scrollbar
Editor (13 plugins)
nvim-autopairs, flash.nvim, clever-f, nvim-spectre, grug-far, harpoon, persistence, smartyank, vim-sleuth, vim-illuminate, tabular, todo-comments, toggleterm
LSP (12 plugins)
nvim-lspconfig, mason, mason-lspconfig, mason-tool-installer, lazydev, luvit-meta, SchemaStore, conform, nvim-lint, trouble, blink.cmp/nvim-cmp, LuaSnip
Git (7 plugins)
vim-fugitive, vim-rhubarb, gitsigns, diffview, vim-flog, git-conflict, octo
AI (3 plugins)
copilot.vim, ChatGPT.nvim, mcphub.nvim
Debug (8 plugins)
nvim-dap, nvim-dap-ui, nvim-dap-virtual-text, nvim-dap-python, nvim-dap-go, mason-nvim-dap, telescope-dap, nvim-nio
Tools (14 plugins)
telescope, telescope-fzf-native, telescope-ui-select, neo-tree, oil.nvim, nvim-bqf, rest.nvim, vim-dadbod, vim-dadbod-ui, vim-dadbod-completion, iron.nvim, markdown-preview, nvim-puppeteer, obsidian.nvim
Treesitter (3 plugins)
nvim-treesitter, nvim-treesitter-context, nvim-treesitter-textobjects
Troubleshooting
| Issue | Solution |
|---|---|
| Plugins not loading | :Lazy sync |
| LSP not starting | :LspInfo, :Mason |
| Icons missing | Install a Nerd Font |
| Slow startup | :Lazy profile |
| Treesitter errors | :TSUpdate |
| Keybinding conflicts | :verbose map <key> |
Health Check
:checkhealth
Debug Logging
-- Temporarily add to plugin config:
log_level = vim.log.levels.DEBUG,
Resources
References
- references/configuration.md - Core configuration options
- references/plugins.md - All 82 plugins detailed
- references/plugin-deepdives.md - In-depth plugin guides
- references/lsp.md - LSP server configuration
- references/keybindings.md - Complete keybinding reference
- references/debugging.md - DAP debugging guide
- references/performance.md - Optimization techniques
- references/tools.md - CLI tools, utilities, and workflows
- references/troubleshooting.md - Common issues and solutions
- references/migration-0.11.md - Neovim 0.11 migration guide
Gotchas
- LSP attaches on FileType, not BufRead: Buffers opened before plugin spec evaluation get no LSP.
:LspInfoshows nothing — open a new buffer of the same filetype or:editto retrigger the autocommand. lazy-lock.jsonsilently pins everything::Lazy syncwill not update plugins unless the lock entry is removed or:Lazy updateis run explicitly. Sync only installs missing plugins and removes orphans.vim.defer_fn(..., 0)runs after UIEnter but before FileType: Config loaded this way misses the first buffer's filetype event. Move keymaps and options out ofdefer_fnif first-buffer integrations break.- Mason installs to
~/.local/share/nvim/mason/bin/, not$PATH: External tools that invoke formatters or linters from the shell will not find Mason-installed binaries unless you prepend that path explicitly. event = "VeryLazy"defers until after UI is ready: Plugins that intercept startup behavior (sessions, dashboards, colorschemes) must uselazy = falsewithpriority = 1000— VeryLazy is too late.- Treesitter parsers compile against the installed Neovim ABI: After a Neovim upgrade,
:TSUpdateis mandatory or you will see "Impossible pattern" errors with no obvious cause.
FAQ
What does the neovim skill do?
Comprehensive guide for this Neovim configuration - a modular, performance-optimized Lua-based IDE. Use when configuring plugins, adding keybindings, setting up LSP servers, debugging, or extending the configuration. Covers lazy.nvim, 82+ plugins across 9 categories, DAP debugging, AI integrations, and performance optimization.
How do I install neovim?
Run npx skills add https://github.com/julianobarbosa/claude-code-skills --skill neovim in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/neovim/ (personal) or .claude/skills/neovim/ (project).
Which AI agents can use neovim?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is neovim safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains neovim?
It is published by julianobarbosa in julianobarbosa/claude-code-skills. It has 296 recorded installs.
More from julianobarbosa/claude-code-skills
markitdown
julianobarbosa/claude-code-skills
Guide for using Microsoft MarkItDown - a Python utility for converting files to Markdown. Use when converting PDF, Word, PowerPoint, Excel, images, audio, HTML, CSV, JSON, XML, ZIP, YouTube URLs, EPubs, Jupyter notebooks, RSS feeds, or Wikipedia pages to Markdown format. Also use for document processing pipelines, LLM preprocessing, or text extraction tasks.
obsidian-vault-management
julianobarbosa/claude-code-skills
Creates, edits, and manages Obsidian vault content including notes, templates, daily notes, and dataview queries. Use when working with markdown files in an Obsidian vault, creating notes, writing templates, building dataview queries, or organizing knowledge management content.
markitdown-skill
julianobarbosa/claude-code-skills
Guide for using Microsoft MarkItDown - a Python utility for converting files to Markdown. Use when converting PDF, Word, PowerPoint, Excel, images, audio, HTML, CSV, JSON, XML, ZIP, YouTube URLs, EPubs, Jupyter notebooks, RSS feeds, or Wikipedia pages to Markdown format. Also use for document processing pipelines, LLM preprocessing, or text extraction tasks.
obsidian
julianobarbosa/claude-code-skills
Guide for implementing Obsidian knowledge management - vault operations, plugin development, URI scheme automation, markdown extensions, and Local REST API integration. Use when working with Obsidian vaults, creating plugins, automating note workflows, querying notes via API, or implementing knowledge graph features.
argocd-advanced
julianobarbosa/claude-code-skills
Advanced ArgoCD operations beyond the core CLI/API — multi-cluster ApplicationSet generators, automated image updates, new-cluster bootstrapping, and workload onboarding via templated ApplicationSets. USE WHEN working with ApplicationSet CRDs (list, cluster, git, matrix, merge, SCM, pull request, plugin generators), configuring ArgoCD Image Updater (semver/digest/newest-build update strategies + git write-back), bootstrapping a new Kubernetes cluster into a multi-repo GitOps setup, registering clusters with proper labels for ApplicationSet targeting, onboarding a new workload via the standard ApplicationSet template, or troubleshooting any of these. For routine app sync/status/diff work use the core argocd skill instead.
researching-web
julianobarbosa/claude-code-skills
Search the web using Perplexity AI. Use when needing to search, look up, research, find current information, best practices, compare technologies, or answer factual questions about tools and libraries.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.