jieba.vim,做最好的 Vim 中文分词插件。

jieba.vim 正处于积极开发中,欢迎关注、Star ⭐️、下载试用最新进展,欢迎在 issue 讨论并提意见建议。

Vim/Nvim 中文编辑现状

Vim/Nvim 的中文文本编辑体验不足是广为人知的问题。由于中文不用空格分隔词语,Vim 的原生 word motion 功能无法有效发挥作用,因此用户只能依赖基本的 h/l 键位逐字移动光标。作为一名常用 Vim 写作的人,我对这方面的不便深有体会,经过调研确定没有已存在的完善项目后,我于一年多前开始在业余时间开发 jieba.vim,旨在解决这个问题。

jieba.vim 简介

jieba.vim 是一个基于 jieba 的 Vim/Nvim 中文分词插件,通过增强 w/W/e/E/b/B/ge/gE 键位,使 Vim 能够按中文词语移动光标。jieba.vim 的初版原型使用 python3 开发,初步解决了按词移动光标的问题。虽然(可能)由于其过于缓慢的词典加载速度并没有获得什么关注,但是基于该原型的 lua 移植版 neo451/jieba.nvim 在 Vim 中文编辑圈的小为人知还是证明了 jieba.vim 解决方案的有效性,给了我继续改进的动力。随后,我发布了 jieba.vim 的改进版,解决了其速度问题,并于近一个月开始重写 jieba.vim 的核心逻辑,更严谨地确立其发展方向。

jieba.vim 对自身的定位及路线图

Features 依重要性排序:

  1. jieba.vim 应保持其与 Vim 的兼容性。经过增强的 w/W/e/E/b/B/ge/gE 键位在无中文 ASCII 文本上应与 Vim 原生行为完全一致,其中包括各种特殊情况(例如 cw)。这需要通过大量测试(单元测试与 property-based tests),以及对单元测试的正确性验证(见 junegunn/vader.vim)予以保证。
  2. jieba.vim 应具有较快的速度(包括词典加载速度、键位反应速度、词典懒加载),以确保良好的用户体验。
  3. jieba.vim 应易于安装。目前 jieba.vim 的最新稳定版需要本地安装 Rust 并进行编译。未来将通过发布预编译链接库避免该情况;同时针对 neovim 将尝试直接从 lua 链接 Rust 核心 crate,从而免除 lua 调用 python、python 再调用 Rust 的额外调用关系。
  4. jieba.vim 应具有较广的功能覆盖,例如在 normal/visual/operator-pending 模式下对 {count}w/W/e/E/b/B/ge/gE 键位的映射支持、以及对自定义 Vim 选项 'iskeyword''virtualedit' 的支持。此外,对 word text object iw/iW/aw/aW 的支持也处于计划内。

jieba.vim 分支一览

分支 简介 开发语言 许可
初版原型 (main) normal 模式下按词移动光标完善,其余模式下有 bug。 python3 MIT
改进版 (7d03b0cc) normal 模式下按词移动光标完善,其余模式下有 bug,词典加载速度快 60%。 Rust + python3 MIT
最新稳定版 (v1.0.2) 目前已完成 normal/visual/operator-pending 模式下的 {count}w/W/e/E/b/B/ge/gE 键位,macOS/Linux 上未发现 bug,欢迎下载试用。 Rust + python3 Apache v2.0
最新进展 (rust) 基于稳定版完善了文档(感谢 Eric Wong),正在研究部署预编译链接库。 Rust + python3 Apache v2.0