Eric's Blog 时光荏苒,岁月如梭

Neovim 智能对话伙伴 chat.nvim

2026-02-03
2026-03-09
Eric Wong

很长一段时间,AI 一直是一个非常热门的话题。衍生出来的工具也非常的多,从我接触的顺序来看, 从最早的 tabline 补全到后来的 GitHub Copilot 补全。再到后来的 ChatGPT 以及之后来的各自类似的 Chat 工具。

前面我使用最多的还是网页版的 ChatGPT,使用过程中最大的一个问题就是请求结果渲染展示一直是有问题的。 尤其是让他展示 markdown 源码时。比如:

markdown display error

上述图片 Usage 实际上也在代码块里面是,但是由于 markdown 内还有代码块,导致解析展示出问题。 正是由于这个原因,我制作了 Neovim AI 聊天插件 chat.nvim, 我需要以纯文本展示请求结果的完整内容。

安装及配置 chat.nvim

使用任意插件管理器,比如 nvim-plug:

local deepseek_api_key = 'xxxxxxxxxxx'
local free_chatgpt_api_key = 'xxxxxxxxxxxxxxx'
require('plug').add({
  {
    'wsdjeg/chat.nvim',
    depends = {
      {
        'wsdjeg/job.nvim', -- Required
        'wsdjeg/picker.nvim', -- Optional but recommended
      },
    },
  },
})

使用操作界面

chat.nvim 默认是上下分屏两个浮窗,分别为输入窗口和结果展示窗口。如图:

chat.nvim

多 AI 提供商支持

chat.nvim 内置支持多种 AI 服务提供商:

同时还支持自定义提供商,你可以创建 ~/.config/nvim/lua/chat/providers/<provider_name>.lua 来添加新的 AI 服务。

picker.nvim 集成

chat.nvim 自带了一些 picker.nvim 插件的拓展,目前支持的拓展有:

  1. :Picker chat - 搜索历史对话 picker-chat
  2. :Picker chat_provider - 搜索并切换 provider picker-chat
  3. :Picker chat_model - 搜索并切换当前 provider 提供的模型 picker-chat

内置工具支持

chat.nvim 支持丰富的内置工具,让 AI 可以直接与编辑器交互:

文件操作工具

  • @read_file - 读取文件内容(支持指定行范围)
  • @find_files - 搜索文件
  • @search_text - 搜索文件内容(支持正则表达式、文件类型过滤等)
  • @git_diff - 查看 git diff 信息

网页工具

  • @web_search - 网络搜索(支持 Firecrawl、Google、SerpAPI)
  • @fetch_web - 获取网页内容

记忆系统

chat.nvim 实现了三层记忆系统,灵感来自认知心理学:

  • 工作记忆 (Working Memory) ⚡ - 当前会话的任务和决策(最高优先级)
  • 日常记忆 (Daily Memory) 📅 - 临时任务和短期目标(7-30天后自动过期)
  • 长期记忆 (Long-term Memory) 💾 - 永久知识存储(事实、偏好、技能)

相关工具:

  • @extract_memory - 提取并存储记忆
  • @recall_memory - 回忆相关信息

其他工具

  • @set_prompt - 设置系统提示词
  • @plan - 任务计划管理
  • @zettelkasten_create - 创建笔记(需要 zettelkasten.nvim)
  • @zettelkasten_get - 获取笔记(需要 zettelkasten.nvim)

会话管理

chat.nvim 提供了完整的会话管理功能:

  • :Chat - 打开当前会话
  • :Chat new - 创建新会话
  • :Chat prev / :Chat next - 切换会话
  • :Chat clear - 清空当前会话
  • :Chat delete - 删除当前会话
  • :Chat save <path> - 保存会话到文件
  • :Chat load <path> - 从文件或 URL 加载会话
  • :Chat share - 分享会话到 pastebin
  • :Chat preview - 在浏览器中预览会话

chat preview

并行会话

chat.nvim 支持同时运行多个独立的聊天会话:

  • 每个会话可以使用不同的 AI 模型
  • 会话之间保持独立的对话历史和设置
  • 使用 :Chat prev:Chat next 快速切换

IM 集成

chat.nvim 支持多种第三方聊天平台集成,可以将 Neovim 的 AI 对话能力扩展到各个平台:

平台 图标 双向通信 特点
Discord 💬 ✅ 是 完整的机器人功能,会话绑定
飞书 🐦 ✅ 是 飞书机器人,消息轮询
钉钉 📱 ✅ 是* Webhook(单向)或 API(双向)
企业微信 💼 ✅ 是* 企业微信 Webhook 或 API
Telegram ✈️ ✅ 是 Bot API,支持群组和私聊

Discord 集成

chat-nvim-discord

通过 Discord 集成,你可以:

  • 在 Discord 频道中与 AI 助手交互
  • 使用 :Chat bridge discord 绑定当前会话
  • 使用 /session 命令确认绑定
  • 通过提及机器人或回复消息来触发对话

飞书集成

chat-nvim-lark

飞书集成支持:

  • 双向消息通信
  • 自动轮询新消息
  • 长消息支持(最多 30,720 字符)

消息同步

通过这些集成,可以实现 Neovim 与各平台的消息同步:

chat-nvim-integration-sync

这些集成功能让 chat.nvim 成为一个多平台的 AI 对话中心,不仅可以在 Neovim 内使用,还可以作为各种聊天平台的智能助手。

HTTP API

chat.nvim 内置了 HTTP 服务器功能,提供 RESTful API 接口:

http = {
  host = '127.0.0.1',
  port = 7777,
  api_key = 'your-secret-key',
}

API 端点

  • POST / - 发送消息到指定会话
  • GET /sessions - 获取所有活跃会话列表
  • GET /session - 获取会话的 HTML 预览(需要 id 参数)

使用示例

# 发送消息
curl -X POST http://127.0.0.1:7777/ \
  -H "X-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"session": "my-session", "content": "Hello from curl!"}'

# 获取会话列表
curl -H "X-API-Key: your-secret-key" http://127.0.0.1:7777/sessions

这使得外部应用可以轻松集成 chat.nvim 的对话能力,比如 CI/CD 流水线、监控系统等。

快捷键

在输入窗口中:

  • <Enter> - 发送消息
  • q - 关闭聊天窗口
  • <Tab> - 切换输入和结果窗口
  • Ctrl-C - 取消当前请求
  • Ctrl-N - 新建会话
  • r - 重试上次取消的请求
  • alt-h / alt-l - 上一个/下一个会话

在结果窗口中:

  • q - 关闭聊天窗口
  • <Tab> - 切换输入和结果窗口

总结

从最初为了解决 markdown 渲染问题而开发的聊天插件,到现在支持多种 AI 提供商、内置工具系统、三层记忆架构、多平台集成、HTTP API 等功能,chat.nvim 已经发展成为一个功能强大的 Neovim AI 助手。它不仅能帮助你在编辑器内高效地与 AI 对话,还能通过各种工具直接操作文件、搜索网络、管理记忆,真正成为了开发者的智能伙伴。

更多详细信息,请访问 chat.nvim GitHub 仓库


版权声明:本文为原创文章,遵循 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)版权协议,转载请附上原文出处链接和本声明。


延生阅读

分享到:

评论