Skip to content

Latest commit

 

History

History
157 lines (129 loc) · 4.56 KB

File metadata and controls

157 lines (129 loc) · 4.56 KB

vibecoding.vim 方案

目标

把 Vim 改造成一个面向 vibecoding 的 TUI 工作台。

核心体验参考 ChatGPT、豆包这类经典 web chat 界面,但交互方式保持 Vim 思路:

  • 以消息流为主
  • 以 buffer / split / normal mode / insert mode 组织操作
  • 保留高频编辑、搜索、复制、跳转、diff 的 Vim 习惯
  • 支持和 ACP 协议后端进行流式对话、工具调用、补丁应用

首版范围

首版只做“能稳定聊天、能看上下文、能接收流式回复、能应用补丁”的主链路。

先不做复杂炫技 UI,优先把下面几件事做实:

  • 会话管理
  • 聊天输入与输出
  • 上下文挂载
  • 流式回复
  • 工具调用展示
  • diff 预览与应用

产品形态

推荐做成一个主工作区,必要时拆成多个窗格:

  • 主区:聊天记录,按消息块展示 user / assistant / tool event
  • 侧区:上下文、文件列表、当前任务、会话信息
  • 底部:输入区和状态区
  • diff 区:补丁预览、逐块确认、应用结果

如果宿主支持更强的 UI 能力,可以增加浮窗预览;但必须保留纯 split 的兼容模式,保证经典 Vim 也能用。

交互原则

  • 输入时像 Vim 的插入模式,浏览时像普通文档
  • 对话区可用 normal mode 做导航、搜索、折叠、复制
  • 常用动作尽量变成固定命令,不强迫鼠标
  • 生成中允许中断、继续、重试、换上下文
  • 代码和 diff 以可读、可操作为第一目标

结构设计

1. 核心状态层

管理这些对象:

  • Session:会话
  • Turn:一次用户输入到模型输出的完整轮次
  • Message:消息实体
  • ToolCall / ToolResult:工具调用与返回
  • Artifact:文件、diff、补丁、日志等产物
  • ContextItem:当前挂载的文件、选区、路径、任务说明

2. ACP 适配层

把 ACP 协议抽象成独立 adapter,不让 UI 直接依赖协议细节。

适配层负责:

  • 建立连接
  • 发送会话与上下文
  • 接收流式 token / 事件
  • 接收工具调用请求
  • 接收补丁或结构化产物
  • 处理错误、超时、取消

这样后续如果 ACP 的消息格式、鉴权或流式事件有变化,只改协议层,不动 UI 主体。

3. 渲染层

负责把结构化事件渲染成可读的 Vim 文本:

  • 普通消息
  • 代码块
  • 工具调用记录
  • diff 预览
  • 状态提示
  • 错误与重试提示

4. 存储层

会话、历史、缓存和草稿统一落到本地数据目录。

要求:

  • 可恢复
  • 可清理
  • 不污染用户项目文件
  • 支持按会话保存上下文快照

Vim 操作模型

建议用下面这套思路:

  • normal mode:浏览聊天、切换上下文、跳转到 diff、复制内容
  • insert mode:写 prompt、写 follow-up
  • command line:执行会话级命令
  • mapping:把高频动作绑定到固定键位

命令可以先规划为:

  • 打开/关闭 vibecoding 面板
  • 发送当前输入
  • 追加文件到上下文
  • 重新生成
  • 中断生成
  • 打开 diff
  • 应用补丁
  • 切换会话

推荐实现顺序

Phase 1

搭基础骨架:

  • 插件入口
  • 会话状态
  • 本地存储
  • 命令与映射

Phase 2

做聊天 TUI:

  • 消息渲染
  • 输入区
  • 状态区
  • 基础导航

Phase 3

接 ACP:

  • 流式输出
  • tool call 展示
  • 错误处理
  • 中断与重试

Phase 4

做 vibecoding 核心:

  • 文件上下文注入
  • diff 预览
  • patch 应用
  • 结果回写

Phase 5

打磨体验:

  • 搜索
  • 折叠
  • 多会话
  • 快捷键整理
  • 兼容性修正

技术取舍

优先建议做成“核心逻辑与 UI 分离”的结构。

如果要兼容经典 Vim,核心层优先选 Vimscript 体系,异步通信走 Vim 自带的 job/channel 能力。 如果后续确认只面向 Neovim,再补 Lua 和更强的 UI 组件会更顺手。

风险点

  • ACP 具体规范如果未明确,协议适配会需要再收敛一次
  • Vim / Neovim 的能力差异会影响 UI 上限
  • 流式输出、补丁应用、任务中断需要做得足够稳
  • 代码改写必须有明确确认步骤,不能直接无脑落盘

待确认问题

  • ACP 的准确协议定义、消息格式、鉴权方式
  • 目标是只支持 Vim,还是 Vim + Neovim 一起支持
  • 后端模型接入方式是固定单服务,还是允许多个 provider
  • 是否需要本地/远端会话同步
  • 代码修改是否默认走“预览后确认”模式

预期结果

用户最终在 Vim 里看到的不是“一个聊天插件”,而是一个可以直接围绕代码工作、对话、预览、应用修改的 vibecoding 界面。

你确认这个方向后,我再开始按这个方案写第一版实现。