vim-mcp服务器
嵌入Vim中的MCP(模型上下文协议)服务器。它暴露了工具 HTTP允许MCP兼容客户端(如AI编码代理)读取和 修改缓冲区、移动光标、检索视觉选择、管理快速修复 和位置列表,并排打开差异(包括计算的git差异 在Vim内部),读取消息历史记录,并运行Ex命令。
需求
- Vim编译使用
+python3
安装
使用您喜欢的插件管理器。
vim插头
Plug 'breggles/vim-mcp-server'Vundle
Plugin 'breggles/vim-mcp-server'手册
将存储库克隆到Vim包目录中:
git clone https://github.com/breggles/vim-mcp-server.git \
~/.vim/pack/plugins/start/vim-mcp-server用法
启动服务器
在Vim中,运行:
:McpServerStart在Vim启动时自动启动服务器,方法是将此添加到您的 vimrc:
let g:mcp_server_autostart = 1MCP客户端配置
将您的MCP客户端指向 http://127.0.0.1:8765/mcp (或您选择的任何港口) 选择)。
例如,对于opencode,将服务器添加到您的 opencode.jsonc:
"mcp": {
"vim": {
"type": "remote",
"url": "http://localhost:8765/mcp",
"enabled": true
}
}命令
| 命令 | 描述 |
|---|---|
:McpServerStart [port] | 启动服务器(默认端口8765) |
:McpServerStop | 停止服务器 |
:McpServerStatus | 打印服务器状态和URL |
选项
| 变量 | 默认值 | 描述 |
|---|---|---|
g:mcp_server_port | 8765 | 服务器监听的端口 |
g:mcp_server_autostart | 0 | 自动启动服务器 VimEnter |
g:mcp_server_allow_execute | 0 | 启用 execute_command 工具 |
g:mcp_server_allow_save | 0 | 启用 save_buffer 工具 |
g:mcp_server_allow_edit | 0 | 启用 edit_buffer 工具 |
工具
服务器向MCP客户端公开以下工具:
| 工具 | 说明 |
|---|---|
list_buffers | 列出所有打开的缓冲区 |
get_buffer | 读取缓冲区内容(可选行范围) |
edit_buffer | 替换、插入或删除缓冲区中的行 |
open_file | 通过打开文件 :edit |
save_buffer | 通过以下方式保存缓冲区 :write (选择加入,见上文) |
close_buffer | 通过以下方式关闭缓冲区 :bdelete |
get_cursor | 获取当前光标位置 |
set_cursor | 将光标移动到行和列 |
get_visual_selection | 获取当前视觉选择(如果有的话) |
execute_command | 运行任意Ex命令(选择加入,见上文) |
get_quickfix_list | 获取当前快速修复列表条目 |
set_quickfix_list | 设置快速修复列表 |
get_location_list | 获取当前窗口的位置列表 |
set_location_list | 设置当前窗口的位置列表 |
get_messages | 获取Vim的消息历史记录(:messages 输出) |
show_diff | 在新选项卡(文件或内容)中打开并排差异视图 |
show_git_diff | 在新选项卡中打开并排的git diff;git在Vim中计算两边 |
当工具接受缓冲区参数时,可以用数字指定 (buffer_id)或按文件路径(buffer_path).当两者都被省略时 使用电流缓冲器。
show_git_diff
在git跟踪文件的新选项卡中打开并排的diff视图。MCP 客户端只发送文件路径和(可选)两个引用;git获取 Vim中双方的内容。更喜欢这个 show_diff 每当 比较git修订版、索引或工作树——它避免了 客户端必须预取并发送完整的文件内容。
参数:
| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
path | string | yes | - | 文件的绝对路径。可以指重命名前或重命名后的名称。 |
ref_a | string | 否 | "HEAD" | 左侧修订。空字符串表示磁盘上的工作树。 |
ref_b | string | 否 | "" | 右侧修正。空字符串表示磁盘上的工作树。 |
staged | boolean | 否 | false | 便利性 HEAD vs指数。相互排斥,明确 ref_a / ref_b. |
行为说明:
- 回购根是从以下位置自动发现的
path;文件必须位于
git仓库。
- 每个缓冲区的文件类型由Vim自己检测
:filetype detect,使用
文件的名称在相应的一侧,因此重命名的文件是正确的 每侧独立突出显示。需要Vim的文件类型插件 待启用(:filetype on,这是默认设置)。
- 重命名检测(
git diff -M)已启用,因此在
双方都进行了两次修订。
- 如果一侧不包含文件(例如添加或删除的文件),则
缓冲区显示为空,其标签已标记 (missing).
- 每次调用都会打开自己的新选项卡。多次调用以获得多个差异。
对于非git diffs(比较任意缓冲区、文件或生成的内容) 使用 show_diff 相反。
OpenCode计划模式
默认情况下,OpenCode的计划模式禁用所有MCP工具。允许只读 vim工具在计划模式下,将以下内容添加到您的 opencode.jsonc:
{
"agent": {
"plan": {
"tools": {
"vim_*": false,
"vim_list_buffers": true,
"vim_get_buffer": true,
"vim_get_cursor": true,
"vim_get_visual_selection": true,
"vim_open_file": true,
"vim_set_cursor": true,
"vim_get_quickfix_list": true,
"vim_set_quickfix_list": true,
"vim_get_location_list": true,
"vim_set_location_list": true,
"vim_get_messages": true,
"vim_show_diff": true,
"vim_show_git_diff": true
}
}
}
}这将禁用所有 vim_* 首先使用工具,然后重新启用特定的工具。调整 该列表适合您的工作流程。
发展
要在不安装插件的情况下使用它,请克隆存储库并添加它 到Vim的运行时路径:
set rtp+=~/path/to/vim-mcp-server将此添加到您的 vimrc 或者手动运行它。更改将在下次生效 Vim启动了。
使用以下内容生成帮助标签:
:helptags ~/path/to/vim-mcp-server/doc许可证
麻省理工学院
