blink-rime-public(简称 blink-rime )是专为 Neovim blink.cmp 高性能补全插件打造的 Rime 集成方案,仅支持 macOS 系统,依托本地鼠须管 (Squirrel) Rime 引擎实现编辑器内原生中文拼音补全,区别传统 rime-ls 等 LSP 输入法方案,不走语言服务通道,采用独立 Rust 后台助手 + Unix 套接字通信,输入延迟极低,完美适配 Markdown 、纯文本写作场景。

传统 Neov 中文输入普遍痛点:切系统输入法频繁中断编辑、 rime-ls 启动开销大、高速打字卡顿、代码块误弹出中文候选;本插件针对性解决以上问题,在编辑器内部直接输入拼音唤出汉字候选,代码区域自动屏蔽中文补全,无需频繁切换系统中英文输入法。

核心架构拆分

插件分为两大模块:

  1. Lua 前端插件:对接 blink.cmp 补全管线,捕获缓冲区拼音、渲染候选菜单,提供命令与按键绑定;
  2. Rust 独立助手进程( blink-rime-helper ):加载本地 Rime 内核,隔离编辑器主线程,通过套接字异步返回汉字候选,避免打字阻塞。

工作流程

  1. 在 Neovim 插入模式直接输入拼音字母;
  2. Lua 前端截取拼音串,通过本地 Socket 发送给 Rust 助手;
  3. 助手调用本机 Squirrel 内置 librime 引擎计算汉字候选;
  4. 候选回传给 blink.cmp 补全弹窗展示;
  5. 选中汉字仅替换拼音前缀,后方字母保留可继续连续输入;
  6. 代码块、代码围栏自动阻断中文候选,仅在文本 / 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 助手进程

系统与前置依赖

  1. 操作系统:仅 macOS,暂不支持 Windows/Linux ;
  2. Neovim + blink.cmp 1.10.2 固定适配版本;
  3. 本地安装鼠须管 Squirrel 输入法,拥有标准 Rime 共享资源目录;
  4. Rust 编译工具链( cargo )用于构建后台助手二进制;
  5. 推荐文件类型: 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+.下一页候选

使用校验方法

  1. 新建.md文件进入插入模式;
  2. 输入nihao拼音,自动弹出中文候选;
  3. 执行:BlinkRimeStatus查看助手进程、 Rime 版本是否正常; 4 输入```代码块,测试中文候选自动消失。

开机冷启动问题说明

电脑重启后 Socket 文件销毁,首次打开 Markdown 会短暂连接拒绝,等待 1 秒执行:BlinkRimeStatus自动拉起助手即可,属于时序正常现象,非配置错误。

对比同类 Neovim Rime 方案

  1. 基于高性能 blink.cmp ,远快于传统 nvim-cmp+rime-ls 组合,高速打字无卡顿;
  2. Rust 独立进程隔离,不阻塞 Neovim 主线程; 3 隔离 Rime 用户库,不会损坏鼠须管个人词频;
  3. Markdown 代码智能屏蔽,写代码零干扰;
  4. 无需长期运行 LSP 服务,闲置自动释放资源;
  5. 原生适配 mac 鼠须管,完整复用本地所有 Rime 自定义方案、词库。