sidekick.nvim
sidekick.nvim 是专为 Neovim 打造的 AI 编程助手,旨在让开发者在不离开编辑器的情况下,高效利用人工智能提升编码体验。它主要解决了传统 AI 插件功能单一、上下文切换频繁以及代码建议不够直观的问题。
该工具的核心亮点在于深度集成了 GitHub Copilot LSP 的“下一步编辑建议”(NES)功能。与普通行内补全不同,NES 能主动提供跨越多行的重构方案或大范围代码修改,并通过基于 Treesitter 的高亮差分视图,让用户逐块预览和确认变更。此外,sidekick.nvim 内置了智能终端,支持直接调用 Claude、Gemini、Codex 等主流 AI 命令行工具。它能自动感知当前文件内容、光标位置及错误信息作为上下文,并预设了丰富的提示词库,方便用户快速执行代码解释、故障修复或测试生成等任务。
sidekick.nvim 特别适合习惯使用 Neovim 的软件开发者和技术研究人员。如果你希望将 AI 的大局观建议与灵活的命令行交互无缝融入日常编码流,同时保持对代码变更的完全掌控,这款插件将极大优化你的工作流。其高度可配置的架构也允许高级用户根据需求定制界面与功能,打造个性化的智能开发环境。
使用场景
资深后端工程师正在重构一个遗留的 Python 微服务模块,需要批量优化异步逻辑并修复潜在的竞态条件。
没有 sidekick.nvim 时
- 上下文频繁切换:为了获取大段重构建议,必须离开编辑器打开浏览器或独立终端与 AI 对话,复制粘贴代码不仅打断心流,还容易出错。
- 审查效率低下:面对 AI 返回的大段代码差异,缺乏精细化的逐词高亮和分块导航,只能肉眼逐行比对,极易遗漏细微的逻辑变更。
- 手动应用繁琐:将 AI 生成的多行修改应用到现有文件中时,需手动定位、删除旧代码并粘贴新内容,操作过程机械且耗时。
- 状态感知缺失:无法在编辑器状态栏直观看到 Copilot LSP 的请求进度或建议就绪状态,常常需要盲目等待或反复检查。
使用 sidekick.nvim 后
- 沉浸式智能协作:暂停打字即可自动触发“下一步编辑建议(NES)”,直接在编辑器内通过
<Tab>键预览并应用整块重构方案,无需切换窗口。 - 精细化差异审查:利用基于 Treesitter 的词级差异高亮和分块(Hunk)导航功能,可以逐个审查变更细节,确保每一处逻辑修改都符合预期。
- 一键安全应用:支持逐块跳转审查确认,确认无误后一键应用所有更改,将原本繁琐的手动合并过程简化为流畅的键盘操作。
- 实时状态反馈:状态栏实时显示 Copilot 建议的生成进度和预览文本,让开发者对 AI 辅助状态一目了然,掌控感更强。
sidekick.nvim 通过将强大的 AI 建议与精细的代码审查流程无缝融入 Neovim,让开发者在不中断思维流的情况下高效完成复杂重构。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
🤖 sidekick.nvim
sidekick.nvim 是你的 Neovim AI 小助手,它将 Copilot LSP 的“下一次编辑建议”与内置终端集成,适用于任何 AI 命令行工具。你可以在不离开编辑器的情况下,审查并应用差异、与 AI 助手对话,从而简化编码流程。
✨ 功能
🤖 由 Copilot LSP 提供支持的下一次编辑建议 (NES)
- 🪄 自动建议:当你暂停输入或移动光标时,会自动获取建议。
- 🎨 丰富的差异显示:通过内联和块级差异可视化更改,采用 Treesitter 基础的语法高亮,并可精确到单词或字符级别的差异。
- 🧭 逐块导航:逐个跳转查看编辑内容,确认后再应用。
- 📊 状态栏集成:在状态栏中显示 Copilot LSP 的状态、请求进度以及预览文本。
💬 集成的 AI 命令行终端
- 🚀 直接访问 AI 命令行工具:无需离开 Neovim 即可与你喜欢的 AI 命令行工具交互。
- 📦 为常用工具预配置:开箱即用支持 Claude、Gemini、Grok、Codex、Copilot CLI 等。
- ✨ 上下文感知提示:自动将文件内容、光标位置和诊断信息包含在提示中。
- 📝 提示库:提供用于常见任务的预定义提示库,例如解释代码、修复问题或编写测试。
- 🔄 会话持久化:通过与
tmux和zellij集成,保持 CLI 会话持续运行。 - 📂 自动文件监听:当 AI 工具修改文件时,Neovim 会自动重新加载该文件。
🔌 可扩展且可定制
- ⚙️ 灵活配置:可根据个人喜好微调插件的各个方面。
- 🧩 插件友好的 API:丰富的 API 便于与其他插件集成及构建自定义工作流。
- 🎨 可自定义 UI:更改差异显示、标志等外观。
📋 要求
- Neovim
>= 0.11.2或更高版本 - 官方 copilot-language-server LSP 服务器,需启用
vim.lsp.enable。可通过以下方式安装:- 使用
npm或操作系统的包管理器安装 - 使用 mason-lspconfig.nvim 安装
- copilot.lua 和 copilot.vim 均在其插件中捆绑了 LSP 服务器。
- 使用
- 有效的
lsp/copilot.lua配置。- 提示:包含在 nvim-lspconfig 中。
- snacks.nvim 用于更好地选择提示/工具 (可选)
- nvim-treesitter-textobjects (
main分支) 用于{function}和{class}上下文变量 (可选) - AI 命令行工具,如 Codex、Claude、Copilot、Gemini 等 (可选) 详情请参阅 🤖 AI 命令行集成 部分。
- 在类 Unix 系统上,使用 lsof 和 ps 来检测正在运行的 AI 命令行工具会话。 (可选,但推荐)
🚀 快速入门
- 使用你的包管理器安装插件(见下文)
- 配置 Copilot LSP — 必须启用
vim.lsp.enable - 检查健康状况:
:checkhealth sidekick - 登录 Copilot:
:LspCopilotSignIn - 试用:
- 输入一些代码并暂停——观察下一次编辑建议是否出现
- 按
<Tab>键浏览或应用建议 - 使用
<leader>aa打开 AI 命令行工具
[!NOTE] 初次接触下一次编辑建议? 与内联补全不同,NES 会在文件中的任意位置建议完整的重构或多行更改——可以将其视为 Copilot 的“全局视角”建议。
📦 安装
使用您喜欢的包管理器进行安装。使用 lazy.nvim:
{
"folke/sidekick.nvim",
opts = {
-- 在这里添加任何选项
cli = {
mux = {
backend = "zellij",
enabled = true,
},
},
},
keys = {
{
"<tab>",
function()
-- 如果有下一个编辑建议,跳转到它;否则应用第一个建议(如果有)
if not require("sidekick").nes_jump_or_apply() then
return "<Tab>" -- 回退到正常的 Tab 键行为
end
end,
expr = true,
desc = "前往/应用下一个编辑建议",
},
{
"<c-.>",
function() require("sidekick.cli").focus() end,
desc = "聚焦 Sidekick CLI",
mode = { "n", "t", "i", "x" },
},
{
"<leader>aa",
function() require("sidekick.cli").toggle() end,
desc = "切换 Sidekick CLI 界面",
},
{
"<leader>as",
function() require("sidekick.cli").select() end,
-- 或者仅选择已安装的工具:
-- require("sidekick.cli").select({ filter = { installed = true } })
desc = "选择 CLI 工具",
},
{
"<leader>ad",
function() require("sidekick.cli").close() end,
desc = "断开当前 CLI 会话连接",
},
{
"<leader>at",
function() require("sidekick.cli").send({ msg = "{this}" }) end,
mode = { "x", "n" },
desc = "发送当前内容",
},
{
"<leader>af",
function() require("sidekick.cli").send({ msg = "{file}" }) end,
desc = "发送当前文件",
},
{
"<leader>av",
function() require("sidekick.cli").send({ msg = "{selection}" }) end,
mode = { "x" },
desc = "发送可视选区内容",
},
{
"<leader>ap",
function() require("sidekick.cli").prompt() end,
mode = { "n", "x" },
desc = "Sidekick 选择提示界面",
},
-- 示例:直接打开 Claude 的快捷键
{
"<leader>ac",
function() require("sidekick.cli").toggle({ name = "claude", focus = true }) end,
desc = "切换 Claude CLI 界面",
},
},
}
[!TIP] 安装完成后,建议运行
:checkhealth sidekick检查健康状态。
在插入模式中集成 <Tab> 键与 blink.cmp
{
"saghen/blink.cmp",
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
keymap = {
["<Tab>"] = {
"snippet_forward",
function() -- Sidekick 下一个编辑建议
return require("sidekick").nes_jump_or_apply()
end,
function() -- 如果您正在使用 Neovim 原生内联补全
return vim.lsp.inline_completion.get()
end,
"fallback",
},
},
},
}
自定义 <Tab> 集成用于插入模式
{
"folke/sidekick.nvim",
opts = {
-- 在这里添加任何选项
},
keys = {
{
"<tab>",
function()
-- 如果有下一个编辑建议,跳转到它;否则应用第一个建议(如果有)
if require("sidekick").nes_jump_or_apply() then
return -- 跳转或应用成功
end
-- 如果您正在使用 Neovim 原生内联补全
if vim.lsp.inline_completion.get() then
return
end
-- 您希望在按下 Tab 键时执行的其他操作(例如代码片段)可以放在这里。
-- 最后回退到正常的 Tab 键行为
return "<tab>"
end,
mode = { "i", "n" },
expr = true,
desc = "前往/应用下一个编辑建议",
},
},
}
安装完成后,如果提示,请使用 :LspCopilotSignIn 登录。
⚙️ 配置
该模块提供了安全的默认配置,并通过 require("sidekick").setup({ ... }) 暴露所有可配置项。
默认设置
---@class sidekick.Config
local defaults = {
nes = {
---@type boolean|fun(buf:integer):boolean?
enabled = function(buf)
return vim.g.sidekick_nes ~= false and vim.b.sidekick_nes ~= false
end,
debounce = 100,
trigger = {
-- 触发侧边栏下一个编辑建议的事件
events = { "ModeChanged i:n", "TextChanged", "User SidekickNesDone" },
},
clear = {
-- 清除当前下一个编辑建议的事件
events = { "TextChangedI", "InsertEnter" },
esc = true, -- 按下 <Esc> 键时清除下一个编辑建议
},
---@class sidekick.diff.Opts
---@field inline? "words"|"chars"|false 启用内联差异
---@field show? "always"|"cursor" `cursor` 只有当光标位于编辑位置时才会显示差异。
diff = {
inline = "words",
show = "always",
},
signs = true, -- 为下一个编辑建议显示标志
jumplist = true, -- 将条目添加到跳转列表
},
-- 直接从 Neovim 内部使用 AI 命令行工具
cli = {
watch = true, -- 当 AI 命令行工具对文件进行更改时,通知 Neovim
---@class sidekick.win.Opts
win = {
--- 这会在创建新终端之前运行,在启动终端之前执行。
--- 在这里可以修改窗口选项 `terminal.opts`。
---@param terminal sidekick.cli.Terminal
config = function(terminal) end,
wo = {}, ---@type vim.wo
bo = {}, ---@type vim.bo
layout = "right", ---@type "float"|"left"|"bottom"|"top"|"right"
--- 当布局为 "float" 时使用的选项
---@type vim.api.keyset.win_config
float = {
width = 0.9,
height = 0.9,
},
-- 当布局为 "left"|"bottom"|"top"|"right" 时使用的选项
---@type vim.api.keyset.win_config
split = {
width = 80, -- 设置为 0 以使用默认的分割宽度
height = 20, -- 设置为 0 以使用默认的分割高度
},
--- CLI 工具快捷键(默认模式为 `t`)
---@type table<string, sidekick.cli.Keymap|false>
keys = {
buffers = { "<c-b>", "buffers" , mode = "nt", desc = "打开缓冲区选择器" },
files = { "<c-f>", "files" , mode = "nt", desc = "打开文件选择器" },
hide_n = { "q" , "hide" , mode = "n" , desc = "隐藏终端窗口" },
hide_ctrl_q = { "<c-q>", "hide" , mode = "n" , desc = "隐藏终端窗口" },
hide_ctrl_dot = { "<c-.>", "hide" , mode = "nt", desc = "隐藏终端窗口" },
hide_ctrl_z = { "<c-z>", "blur" , mode = "nt", desc = "返回上一个窗口而不隐藏终端" },
prompt = { "<c-p>", "prompt" , mode = "t" , desc = "插入提示或上下文" },
stopinsert = { "<c-q>", "stopinsert", mode = "t" , desc = "进入普通模式" },
-- 在终端模式下导航窗口。仅在以下情况下生效:
-- * 布局不是 "float"
-- * 方向上有另一个窗口
-- 使用默认的 "right" 布局时,只有 `<c-h>` 会被映射
nav_left = { "<c-h>", "nav_left" , expr = true, desc = "导航到左侧窗口" },
nav_down = { "<c-j>", "nav_down" , expr = true, desc = "导航到下方窗口" },
nav_up = { "<c-k>", "nav_up" , expr = true, desc = "导航到上方窗口" },
nav_right = { "<c-l>", "nav_right" , expr = true, desc = "导航到右侧窗口" },
},
---@type fun(dir:"h"|"j"|"k"|"l")?
--- 处理窗口之间导航的函数。
--- 默认为 `vim.cmd.wincmd`。由 `nav_*` 快捷键使用。
nav = nil,
},
---@class sidekick.cli.Mux
---@field backend? "tmux"|"zellij" 多路复用器后端,用于持久化 CLI 会话
mux = {
backend = vim.env.ZELLIJ and "zellij" or "tmux", -- 默认使用 tmux,除非检测到 zellij
enabled = false,
-- terminal: 为每个 CLI 工具创建新会话,并在 Neovim 终端中显示
-- window: 在终端多路复用器中运行时,新会话将在新标签页中创建
-- split: 在终端多路复用器中运行时,新会话将在新的分割窗口中创建
-- 注意:zellij 只支持 `terminal`
create = "terminal", ---@type "terminal"|"window"|"split"
split = {
vertical = true, -- 垂直或水平分割
size = 0.5, -- 分割大小(0-1 表示百分比)
},
},
--- 实际的 CLI 工具配置从运行时路径 `sk/cli/{tool}.lua` 加载,并与下面的配置合并。
--- 默认配置请参见 https://github.com/folke/sidekick.nvim/tree/main/sk/cli
---@type table<string, sidekick.cli.Config|{}>
tools = {
aider = {},
amazon_q = {},
claude = {},
codex = {},
copilot = {},
crush = {},
cursor = {},
gemini = {},
grok = {},
opencode = {},
pi = {},
qwen = {},
},
--- 添加自定义上下文。请参阅 `lua/sidekick/context/init.lua`
---@type table<string, sidekick.context.Fn>
context = {},
---@type table<string, sidekick.Prompt|string|fun(ctx:sidekick.context.ctx):(string?)>
prompts = {
changes = "你能审查我的更改吗?",
diagnostics = "你能帮我修复 {file} 中的诊断信息吗?\n{diagnostics}",
diagnostics_all = "你能帮我修复这些诊断信息吗?\n{diagnostics_all}",
document = "为 {function|line} 添加文档",
explain = "解释 {this}",
fix = "你能修复 {this} 吗?",
optimize = "如何优化 {this}?",
review = "你能审查 {file} 是否有任何问题或改进建议吗?",
tests = "你能为 {this} 编写测试吗?",
-- 简单的上下文提示
buffers = "{buffers}",
file = "{file}",
line = "{line}",
position = "{position}",
quickfix = "{quickfix}",
selection = "{selection}",
["function"] = "{function}",
class = "{class}",
},
-- 用于选择文件的首选选择器
---@alias sidekick.picker "snacks"|"telescope"|"fzf-lua"
picker = "snacks", ---@type sidekick.picker
},
copilot = {
-- 使用 `didChangeStatus` 跟踪 Copilot 的状态
status = {
enabled = true,
level = vim.log.levels.WARN,
-- 设置为 vim.log.levels.OFF 以禁用通知
-- level = vim.log.levels.OFF,
},
},
ui = {
icons = {
nes = " ",
attached = " ",
started = " ",
installed = " ",
missing = " ",
external_attached = " ",
external_started = " ",
terminal_attached = " ",
terminal_started = " ",
},
},
debug = false, -- 启用调试日志
}
✏️ 下一步编辑建议 (NES)
Copilot NES 请求会在您离开插入模式、在普通模式下修改文本或应用编辑后自动运行。
| 命令 | Lua |
|---|---|
:Sidekick nes apply 应用当前活动的文本编辑 |
|
:Sidekick nes clear 清除所有当前活动的编辑 |
|
:Sidekick nes disable |
|
:Sidekick nes enable |
|
| 检查当前缓冲区中是否有活动编辑 |
|
:Sidekick nes jump 跳转到当前活动编辑的起始位置 |
|
:Sidekick nes toggle |
|
:Sidekick nes update 向 LSP 服务器请求新的编辑(如果有的话) |
|
🤖 AI CLI 集成
Sidekick 自带一个轻量级的终端封装,让您无需离开 Neovim 即可与本地 AI CLI 工具交互。每个工具都在独立的临时终端窗口中运行,并共享辅助提示,这些提示会根据请求打包缓冲区上下文、当前光标位置以及诊断信息。
| 命令 | Lua |
|---|---|
:Sidekick cli close |
|
:Sidekick cli focus 如果终端窗口已打开,则切换其焦点 |
|
:Sidekick cli hide |
|
:Sidekick cli prompt 选择要发送的提示 |
|
| 渲染消息模板或提示 |
|
:Sidekick cli select 启动或附加到一个 CLI 工具 |
|
:Sidekick cli send 向 CLI 发送消息或提示 |
|
:Sidekick cli show |
|
:Sidekick cli toggle |
|
提示与上下文
Sidekick 自带一组预定义的提示,您可以将其与 AI 工具一起使用。此外,您还可以在提示中使用上下文变量,以包含有关当前文件、选区、诊断等信息。
可用提示
- changes:
你能 review 我的更改吗? - diagnostics:
你能帮我修复 {file} 中的诊断问题吗?\n{diagnostics} - diagnostics_all:
你能帮我修复这些诊断问题吗?\n{diagnostics_all} - document:
为 {position} 添加文档 - explain:
解释 {this} - fix:
你能修复 {this} 吗? - optimize:
如何优化 {this}? - review:
你能 review {file} 是否有任何问题或改进之处吗? - tests:
你能为 {this} 编写测试吗? - quickfix:
{quickfix}(当前 quickfix 条目)。
可用上下文变量
{buffers}: 所有打开的缓冲区列表。{file}: 当前文件路径。{position}: 当前文件中的光标位置。{line}: 当前行。{selection}: 可视化选区。{diagnostics}: 当前缓冲区的诊断信息。{diagnostics_all}: 工作区中的所有诊断信息。{quickfix}: 当前 quickfix 列表,包括标题和格式化后的条目。{function}: 光标处的函数(Tree-sitter)——返回类似function foo @file:10:5的位置。{class}: 光标处的类/结构体(Tree-sitter)——返回位置。{this}: 一个特殊的上下文变量。如果当前缓冲区是文件,则解析为{position};否则,解析为字面字符串“this”,并将当前{selection}追加到提示中。
Snacks.nvim 选取器集成
如果您正在使用 snacks.nvim,您可以将选取器中的选择直接发送到 Sidekick 的 AI CLI 工具中。这对于将搜索结果、grep 匹配项或文件选择作为上下文发送非常有用。
Snacks 选取器配置示例
{
"folke/snacks.nvim",
optional = true,
opts = {
picker = {
actions = {
sidekick_send = function(...)
return require("sidekick.cli.picker.snacks").send(...)
end,
},
win = {
input = {
keys = {
["<a-a>"] = {
"sidekick_send",
mode = { "n", "i" },
},
},
},
},
},
},
}
通过此配置,在任何 Snacks 选取器中按下 <a-a> 键,都会将所选内容发送到您当前的 AI CLI 会话中。该集成会自动处理:
- 带完整路径的文件选择
- 带行号和位置的 grep 结果
- 多重选择(发送所有选中的内容)
- 精确位置范围以提供更详细的上下文
CLI 键位映射
你可以通过设置 cli.win.keys 选项来自定义 CLI 窗口的键位映射。
默认的键位映射如下:
q(在普通模式下):隐藏终端窗口。<c-q>(在终端模式下):隐藏终端窗口。<c-z>:退出 CLI 窗口。<c-p>:插入提示或上下文。
如何覆盖默认键位映射的示例
{
"folke/sidekick.nvim",
opts = {
cli = {
win = {
keys = {
-- 覆盖默认的隐藏键位
hide_n = { "<leader>q", "hide", mode = "n" },
-- 添加一个新的键位用于打招呼
say_hi = {
"<c-h>",
function(t)
t:send("hi!")
end,
},
},
},
},
},
}
默认 CLI 工具
Sidekick 预配置了一些流行的 AI CLI 工具。运行 :checkhealth sidekick 可以查看哪些工具已安装。
| 工具 | 描述 | 安装方法 |
|---|---|---|
aider |
AI 配对程序员 | pip install aider-chat 或 pipx install aider-chat |
amazon_q |
Amazon Q 开发者 | 安装指南 |
claude |
Claude Code CLI | 参见 Claude Code 文档 |
codex |
OpenAI Codex CLI | 参见 OpenAI 文档 |
copilot |
GitHub Copilot CLI | npm install -g @githubnext/github-copilot-cli |
crush |
Charm 的 AI 助手 | 参见 安装说明 |
cursor |
Cursor CLI 代理 | 参见 Cursor 文档 |
gemini |
Google Gemini CLI | 参见 仓库 |
grok |
xAI Grok CLI | 参见 仓库 |
opencode |
OpenCode CLI | npm install -g opencode |
qwen |
Alibaba Qwen Code | 参见 仓库 |
[!TIP] 安装工具后,重启 Neovim 或运行
:Sidekick cli select即可看到可用的工具。
🚀 命令
Sidekick 提供了一个 :Sidekick 命令,允许你从命令行与插件交互。
该命令是 Lua API 的一个轻量级封装,因此你可以使用它来执行 Lua API 能够完成的任何操作。
命令结构
命令结构很简单:
:Sidekick <模块> <命令> [参数]
<模块>:你要使用的模块名称(例如nes、cli)。<命令>:你要执行的命令名称。[参数]:命令的可选参数。这些参数会被解析为一个 Lua 表。
例如,要显示 claude 工具的 CLI 窗口,可以使用以下命令:
:Sidekick cli show name=claude
这等同于以下 Lua 代码:
require("sidekick.cli").show({ name = "claude" })
可用命令
以下是可用命令的列表:
NES (nes)
enable: 启用下一步编辑建议。disable: 禁用下一步编辑建议。toggle: 切换下一步编辑建议的启用状态。update: 触发新的建议。clear: 清除当前建议。
CLI (cli)
show: 显示 CLI 窗口。toggle: 切换 CLI 窗口的显示状态。hide: 隐藏 CLI 窗口。close: 关闭 CLI 窗口。focus: 将焦点切换到 CLI 窗口。select: 选择要打开的 CLI 工具。send: 向当前 CLI 工具发送消息。prompt: 选择要发送给当前 CLI 工具的提示。
示例
以下是一些使用 :Sidekick 命令的示例:
切换 CLI 窗口的显示状态:
:Sidekick cli toggleLua 等价代码:
require("sidekick.cli").toggle()将可视选区发送到当前 CLI 工具:
:'<,'>Sidekick cli send msg="{selection}"Lua 等价代码:
require("sidekick.cli").send({ msg = "{selection}" })显示
grok工具的 CLI 窗口并将其置为焦点::Sidekick cli show name=grok focus=trueLua 等价代码:
require("sidekick.cli").show({ name = "grok", focus = true })
📟 状态栏集成
通过 require("sidekick.status") API,你可以轻松地将 Copilot LSP 和 CLI 会话 集成到你的状态栏中。
适用于 lualine.nvim 的示例
{
"nvim-lualine/lualine.nvim",
opts = function(_, opts)
opts.sections = opts.sections or {}
opts.sections.lualine_c = opts.sections.lualine_c or {}
-- Copilot 状态
table.insert(opts.sections.lualine_c, {
function()
return " "
end,
color = function()
local status = require("sidekick.status").get()
if status then
return status.kind == "Error" and "DiagnosticError" or status.busy and "DiagnosticWarn" or "Special"
end
end,
cond = function()
local status = require("sidekick.status")
return status.get() ~= nil
end,
})
-- CLI 会话状态
table.insert(opts.sections.lualine_x, 2, {
function()
local status = require("sidekick.status").cli()
return " " .. (#status > 1 and #status or "")
end,
cond = function()
return #require("sidekick.status").cli() > 0
end,
color = function()
return "Special"
end,
})
end,
}
❓ 常见问题解答
sidekick.nvim 会取代 Copilot 的内联建议吗?
不会!NES 是对内联建议的补充。它们服务于不同的目的:
- 内联补全:即时、边打字边提供的快速建议(使用 copilot.lua 或原生的
vim.lsp.inline_completion) - NES:在你暂停编辑后进行的大规模重构和多行更改
为了获得最佳体验,你可能需要同时使用两者。
这与 copilot.lua 或 copilot.vim 有何不同?
copilot.lua 和 copilot.vim 提供的是 内联补全(即边输入边提供建议)。而 sidekick.nvim 则增加了:
- Next Edit Suggestions (NES):跨文件的多行重构和上下文感知编辑
- AI CLI 集成:内置终端,支持 Claude、Gemini 等 AI 工具
将它们结合使用,可以获得完整的体验!
NES 没有显示建议怎么办?
- 运行
:checkhealth sidekick来验证你的配置是否正确。 - 确保 Copilot 已登录:
:LspCopilotSignIn。 - 检查 LSP 是否已连接:
:lua vim.print(require("sidekick.config").get_client())。 - 尝试手动触发:
:Sidekick nes update。
CLI 工具无法启动怎么办?
- 确认工具已安装:
which claude(或你使用的工具名称)。 - 使用
:checkhealth sidekick检查工具的安装状态。 - 先尝试在终端中直接运行该工具。
- 尝试启动后查看
:messages中是否有错误信息。
终端会话无法持久化怎么办?
确保你已安装 tmux 或 zellij,并启用多路复用器:
opts = {
cli = {
mux = {
enabled = true,
backend = "tmux", -- 或 "zellij"
},
},
}
我需要 GitHub Copilot 订阅吗?
是的,但仅限于 NES 功能(Next Edit Suggestions)。而 AI CLI 集成 可以独立使用任何 CLI 工具(如 Claude、Gemini 等),并不需要 Copilot。
如果我只想使用 CLI 工具,而不使用 NES,可以吗?
当然可以!只需禁用 NES 即可:
opts = {
nes = { enabled = false },
}
这个插件能在 Neovim 0.10 上运行吗?
不能。由于 sidekick.nvim 使用了 LSP 功能和 API,因此需要 Neovim >= 0.11.2。
如何添加我自己的 AI 工具?
将它添加到 cli.tools 配置中:
opts = {
cli = {
tools = {
my_tool = {
cmd = { "my-ai-cli", "--flag" },
-- 可选:为该工具自定义快捷键
keys = {
submit = { "<c-s>", function(t) t:send("\n") end },
},
},
},
},
}
如何创建自定义提示?
将其添加到你的配置中:
opts = {
cli = {
prompts = {
refactor = "请将 {this} 重构得更易于维护",
security = "检查 {file} 中是否存在安全漏洞",
custom = function(ctx)
return "当前文件:" .. ctx.buf .. " 在第 " .. ctx.row 行"
end,
},
},
}
然后可以通过 <leader>ap 或 :Sidekick cli prompt 来使用这些提示。
版本历史
v2.3.02026/03/20v2.2.02026/03/20v2.1.02025/10/23v2.0.02025/10/17v1.3.02025/10/08v1.2.02025/10/02v1.1.02025/09/29v1.0.02025/09/27常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。