blink-rime-public(简称 blink-rime )是专为 Neovim blink.cmp 高性能补全插件打造的 Rime 集成方案,仅支持 macOS 系统,依托本地鼠须管 (Squirrel) Rime 引擎实现编辑器内原生中文拼音补全,区别传统 rime-ls 等 LSP 输入法方案,不走语言服务通道,采用独立 Rust 后台助手 + Unix 套接字通信,输入延迟极低,完美适配 Markdown 、纯文本写作场景。
传统 Neov 中文输入普遍痛点:切系统输入法频繁中断编辑、 rime-ls 启动开销大、高速打字卡顿、代码块误弹出中文候选;本插件针对性解决以上问题,在编辑器内部直接输入拼音唤出汉字候选,代码区域自动屏蔽中文补全,无需频繁切换系统中英文输入法。
核心架构拆分
插件分为两大模块:
- Lua 前端插件:对接 blink.cmp 补全管线,捕获缓冲区拼音、渲染候选菜单,提供命令与按键绑定;
- Rust 独立助手进程( blink-rime-helper ):加载本地 Rime 内核,隔离编辑器主线程,通过套接字异步返回汉字候选,避免打字阻塞。
工作流程
- 在 Neovim 插入模式直接输入拼音字母;
- Lua 前端截取拼音串,通过本地 Socket 发送给 Rust 助手;
- 助手调用本机 Squirrel 内置 librime 引擎计算汉字候选;
- 候选回传给 blink.cmp 补全弹窗展示;
- 选中汉字仅替换拼音前缀,后方字母保留可继续连续输入;
- 代码块、代码围栏自动阻断中文候选,仅在文本 / Markdown 区域生效。
核心功能
1. 编辑器原生拼音输入,无需切换系统输入法
写 Markdown 、随笔全程不用切系统中英文,编码代码时自动屏蔽中文,文档写作自动开启,大幅减少来回切换输入法的操作损耗。
2. 智能上下文阻断机制
自动识别 Markdown 行内代码、“` 代码围栏,代码区域完全不弹出中文候选,不会干扰变量、命令、代码输入。
3. 分段接续输入( Partial Commit )
选中汉字后,未输入完的拼音保留在光标后方,可继续追加字母连续组词,不用重新输入完整拼音。
4. 删除恢复、分页选词完整支持
退格删除拼音后自动重新计算候选;提供上下翻页快捷键,最多展示多栏汉字候选,适配长文本高频词汇输入。
5. 缓冲区独立开关
支持全局 / 单文件临时启用、禁用 Rime 中文补全, Lua API 可搭配 autocmd 自动区分文件类型(仅 md/txt 开启,代码文件自动关闭)。
6. 隔离 Rime 用户目录,避免锁冲突
关键设计:助手使用独立隔离 Rime 用户文件夹,不和系统鼠须管共用userdb数据库,杜绝 LevelDB 文件锁导致鼠须管崩溃、词库损坏问题;启动前自动同步系统 Rime 基础配置,保留个人词频习惯。
7. 配套完整 Neovim 命令集
插件内置管理命令,一键查看状态、重启助手、切换开关:
:BlinkRimeEnable/:BlinkRimeDisable:全局开关:BlinkRimeStatus:查看助手进程、 Socket 、 Rime 运行状态:BlinkRimePing:连通性测试:BlinkRimePage prev/next:候选翻页:BlinkRimeReset:重启 Rust 助手进程
系统与前置依赖
- 操作系统:仅 macOS,暂不支持 Windows/Linux ;
- Neovim +
blink.cmp 1.10.2固定适配版本; - 本地安装鼠须管 Squirrel 输入法,拥有标准 Rime 共享资源目录;
- Rust 编译工具链( cargo )用于构建后台助手二进制;
- 推荐文件类型: Markdown 、 Quarto 、纯文本 txt ,代码文件自动屏蔽。
目录说明
shared_data_dir:鼠须管系统公共 Rime 内核、基础词库路径(固定/Library/Input Methods/Squirrel.app/Contents/SharedSupport);user_data_dir:插件独立隔离 Rime 目录(默认~/Library/Application Support/blink-rime-helper/rime-user),不和系统输入法争抢锁文件。
部署教程
1. 克隆仓库至本地插件目录
git clone https://github.com/xXxGeorge/blink-rime-public ~/.config/nvim/local-plugins/blink-rime
2. 编译 Rust 助手程序
cd ~/.config/nvim/local-plugins/blink-rime/helper
cargo build
3. 插件配置( lua/plugins/blink-rime.lua )
return {
dir = vim.fn.expand("~/.config/nvim/local-plugins/blink-rime"),
ft = { "markdown", "quarto", "text" },
config = function()
require("blink-rime").setup({
helper = {
executable = vim.fn.expand("~/.config/nvim/local-plugins/blink-rime/helper/target/debug/blink-rime-helper"),
socket_path = vim.env.TMPDIR .. "blink-rime-helper.sock",
shared_data_dir = "/Library/Input Methods/Squirrel.app/Contents/SharedSupport",
},
context = {
markdown_inline_code = true,
markdown_fenced_code = true,
},
})
end,
}
4. 接入 blink.cmp 补全源
在 blink.cmp 配置中添加blink_rime源,仅 Markdown 启用:
sources = {
default = function()
if vim.bo.filetype == "markdown" then
return { "blink_rime" }
end
return { "lsp", "path", "snippets", "buffer" }
end,
providers = {
blink_rime = { name = "blink_rime", module = "blink-rime" }
}
}
推荐快捷键
| 按键 | 功能 |
|---|---|
| Tab | 首选汉字上屏 |
| Ctrl+; | 第二候选 |
| Ctrl+’ | 第三候选 |
| Ctrl+/ | 第四候选 |
| Ctrl+, | 上一页候选 |
| Ctrl+. | 下一页候选 |
使用校验方法
- 新建
.md文件进入插入模式; - 输入
nihao拼音,自动弹出中文候选; - 执行
:BlinkRimeStatus查看助手进程、 Rime 版本是否正常; 4 输入```代码块,测试中文候选自动消失。
开机冷启动问题说明
电脑重启后 Socket 文件销毁,首次打开 Markdown 会短暂连接拒绝,等待 1 秒执行:BlinkRimeStatus自动拉起助手即可,属于时序正常现象,非配置错误。
对比同类 Neovim Rime 方案
- 基于高性能 blink.cmp ,远快于传统 nvim-cmp+rime-ls 组合,高速打字无卡顿;
- Rust 独立进程隔离,不阻塞 Neovim 主线程; 3 隔离 Rime 用户库,不会损坏鼠须管个人词频;
- Markdown 代码智能屏蔽,写代码零干扰;
- 无需长期运行 LSP 服务,闲置自动释放资源;
- 原生适配 mac 鼠须管,完整复用本地所有 Rime 自定义方案、词库。
