用途
该技能在用户配置 Neovim、编写 Lua 插件、设置键位映射或优化 Vim 编辑工作流时触发。具体触发场景包括:初始化或重构 init.lua 或 ~/.config/nvim/ 目录;使用 lazy.nvim 安装或配置插件;使用 mason.nvim + nvim-lspconfig 设置 LSP 服务器;配置 telescope.nvim 选择器或扩展;安装或查询 nvim-treesitter 解析器;使用 vim.keymap.set 添加或重构键位映射;编写自定义 Lua 插件、模块或自动命令。
不适用于:与 Neovim 无关的通用 shell 脚本或终端复用器问题;VS Code、JetBrains 或其他编辑器(除非明确与 Neovim 对比)。
主要能力
Neovim 是基于 Vim 的可高度扩展文本编辑器,完全使用 Lua 配置,入口文件为 ~/.config/nvim/init.lua。插件通过 lazy.nvim 管理,LSP 通过 mason.nvim 配置,语法高亮使用 nvim-treesitter,模糊查找使用 telescope.nvim。Neovim 提供丰富的 Lua API(vim.api、vim.keymap、vim.opt、vim.fn),无需 Vimscript 即可深度定制。
核心原则:
- 优先使用 Lua 而非 Vimscript,仅在无 Lua API 时用 vim.cmd 兼容旧 Vimscript。
- 延迟加载所有插件,在 lazy.nvim 配置中指定 event、ft、cmd 或 keys,使启动时间保持在 50 毫秒以内。
- 结构化配置,将关注点拆分到 lua/config/(options、keymaps、autocmds)和 lua/plugins/(每个插件或逻辑组一个文件)。
- 优先使用 LSP 原生功能处理跳转定义、重命名、诊断和格式化。
- 避免全局命名空间污染,将插件代码封装在模块中并返回公共 API,不在 _G 层定义函数。
核心概念包括:模式(Normal、Insert、Visual、Command、Terminal)、动作(motions)、操作符(d、c、y、=、>)、文本对象(i 与 a 前缀)、寄存器(""、"0、"+、"*、"_、"/)以及 Lua API 接口。
使用方式
技能提供多个常见任务的代码示例:
-
使用 lazy.nvim 引导 init.lua:克隆 lazy.nvim 到数据目录,设置 leader 键(必须在 lazy 加载插件前设置),调用 require("lazy").setup("plugins", {...}),并加载 config.options、config.keymaps、config.autocmds。
-
使用 mason 配置 LSP:安装 mason.nvim、mason-lspconfig.nvim 和 nvim-lspconfig,通过 ensure_installed 指定服务器(如 lua_ls、ts_ls、pyright、rust_analyzer),在 on_attach 中设置 gd、gr、K、<leader>rn、<leader>ca、<leader>f 等键位,并配置诊断 UI。
-
设置 telescope:通过 cmd 和 keys 延迟加载,配置 find_files、live_grep、buffers、help_tags、oldfiles 等键位,依赖 plenary.nvim 和 telescope-fzf-native.nvim。
-
配置 treesitter:通过 build = ":TSUpdate" 更新,指定 ensure_installed 语言列表,启用 highlight、indent 和 textobjects。
-
创建自定义键位:使用 vim.keymap.set,为窗口导航、缩进保持可视模式、粘贴不覆盖寄存器等设置映射,并始终设置 desc 以支持 which-key.nvim 和 :help 查询。
-
编写简单插件:使用 local M = {} 模块模式,提供 setup(opts) 函数,用 vim.tbl_deep_extend("force", defaults, overrides) 合并选项,通过 nvim_create_user_command 注册用户命令。
-
设置自动命令:使用命名 augroup(clear = true)避免重复,示例包括高亮复制文本和恢复光标位置。
适用场景
适用于 Neovim 的初始化配置、插件管理、LSP 集成、语法高亮、模糊查找、键位定制、自定义插件开发和自动命令编写等场景。
限制与注意事项
反模式:对每个选项使用 vim.cmd("set ...") 会混入 Vimscript 风格,应使用 vim.opt;不使用 augroup 或复用未命名组会导致自动命令重复,应始终创建命名组并 clear = true;急切加载所有插件会拖慢启动,应在 lazy 配置中指定 event、cmd、ft 或 keys;插件代码中使用全局函数会污染 _G 并导致命名冲突,应使用模块;硬编码绝对路径会破坏可移植性,应使用 vim.fn.stdpath;在热循环中调用 require 应缓存结果。
注意事项:mapleader 必须在 lazy.setup() 之前设置,否则使用 <leader> 的插件键位会使用默认反斜杠;自动命令在重新 source 时若不清理会重复;LSP on_attach 每个缓冲区运行一次而非每个服务器一次,键位需传 { buffer = bufnr };通过 cmd 延迟加载在插件于 setup() 中注册命令时会失效;treesitter 与 LSP 同时启用同一语言高亮可能冲突,需在 on_attach 中设置 client.server_capabilities.semanticTokensProvider = nil。
参考资料:references/plugin-ecosystem.md 提供按类别划分的必备插件及 lazy.nvim 配置,仅在任务需要时加载。
伴随检查:首次激活时运行 ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null 检查已安装的伴随技能,与 frontmatter 中的 recommended_skills 对比,缺失的可用 npx skills add AbsolutelySkilled/AbsolutelySkilled --skill <name> 安装。若 recommended_skills 为空或全部已安装则跳过。