为 rime 输入法核心库 librime (的部分功能) 实现 LSP 协议, 从而通过编辑器的代码补全功能输入汉字.
项目还处在早期阶段
目标是提供 rime + LSP 的通用解决方案, 在不同编辑器内实现与其他 rime 前端类似的输入体验。
主要使用场景是解决 vim 编辑模式下的输入法冲突以及输入法支持不完善的编辑器。
[!WARNING] 第一次启动时 rime 需要做大量工作, 可能会很慢
docker pull ghcr.io/wlh320/rime-ls:master
[!TIP] 容器中不包含 Rime 内置输入方案的数据。使用时可以根据需要映射到
/usr/share/rime-data
目录, 或者使用 rime-ice 等不依赖 Rime 内置输入方案的方案。
所有可配置项及其默认值(以 json 为例):
{
"initializationOptions": {
"enabled": true, // 是否启用
"shared_data_dir": "/usr/share/rime-data", // 指定 rime 共享文件夹
"user_data_dir": "~/.local/share/rime-ls", // 指定 rime 用户文件夹,最好别与其他 rime 前端共用
"log_dir": "~/.local/share/rime-ls", // 指定 rime 日志文件夹
"max_candidates": 9, // [v0.2.0 后不再有用] 与 rime 的候选数量配置最好保持一致
"trigger_characters": [], // 为空表示全局开启,否则列表内字符后面的内容才会触发补全
"schema_trigger_character": "&" // [since v0.2.0] 当输入此字符串时请求补全会触发 “方案选单”
"paging_characters": [",", ".", "-", "="], // [since v0.2.4] 输入这些符号会强制触发一次补全,可用于翻页 见 issue #13
"max_tokens": 0 // [since v0.2.0] 大于 0 表示会在删除到这个字符个数的时候,重建所有候选词,而不使用删除字符操作,见 pr #7
"always_incomplete": false // [since v0.2.0] true 强制补全永远刷新整个列表,而不是使用过滤,见 pr #7
"preselect_first": false // [since v0.2.3] 是否默认选择第一个候选项
"long_filter_text": false // [since v0.3.0] 使用更长的 filter_text,某些编辑器如 helix/zed 连续补全需要设置 true
"show_filter_text_in_label": false // [since v0.3.0] 在候选项的 label 中显示 filter_text,某些编辑器如 zed 需要设置 true
"show_order_in_label": true // [since v0.4.0] 在候选项的 label 中显示数字
}
}
clang
和 librime-dev
librime >= 1.6
=> cargo build --release
librime < 1.6
=> cargo build --release --features=no_log_dir
可以通过我在 AUR 上打的包 rime-ls 编译安装
手动从源码编译与上面类似,其他 linux 发行版也差不多
可以参考 NUR 打包 nur.repos.definfo.rime-ls
使用 home-manager 管理配置时,应将 shared_data_dir
路径替换为 ${pkgs.nur.repos.definfo.rime-ls}/share/rime-data
以 Helix 为例:
programs.helix = {
languages = {
language-server.rime-ls = {
command = "${pkgs.nur.repos.definfo.rime-ls}/bin/rime_ls";
config.shared_data_dir = "${pkgs.nur.repos.definfo.rime-ls}/share/rime-data";
config.user_data_dir = "${config.home.homeDirectory}/.local/share/rime-ls";
config.log_dir = "${config.home.homeDirectory}/.local/share/rime-ls";
config.max_candidates = 9;
config.trigger_characters = [ ];
config.schema_trigger_character = "&";
config.max_tokens = 4;
config.always_incomplete = true;
config.long_filter_text = true;
};
language = [
{
name = "markdown";
scope = "source.markdown";
file-types = [
"md"
"markdown"
];
language-servers = [ "rime-ls" ];
}
];
};
};
clang
和 librime
rime-xxxx-Windows-msvc-x64.7z
,解压至某个目录$env:LIBRIME_LIB_DIR="C:\解压出来的目录\dist\lib" # 找库文件
$env:LIBRIME_INCLUDE_DIR="C:\解压出来的目录\dist\include" # 找头文件
$env:LIB="C:\解压出来的目录\dist\lib" # 链接时找 lib 文件
cargo build --release
安装 鼠须管输入法
安装 librime
从此项目中的 Release
下载最新的 MacOS 相关的压缩包,解压缩后将 include 文件夹以及 lib 文件夹下的内容分别复制到 /usr/local/include
和 /usr/local/lib
;
设置环境变量以便编译时找到 librime 的相关文件(参考相关issue)
# 用于编译
export LIBRIME_LIB_DIR=/usr/local/lib
export LIBRIME_INCLUDE_DIR=/usr/local/include
# 用于运行
export DYLD_LIBRARY_PATH=/usr/local/lib # 最好放在~/.zshrc中,记得修改~/.zshrc 后,source ~/.zshrc
lib 库文件后面调用的时候应该还需要到 MacOS 的“安全性与隐私”中进行授权,所以建议调用解压后 bin 文件下的可执行文件来提前触发授权。
编译,参考 Ubuntu
配置,shared_data_dir
应该设置为 /Library/Input Methods/Squirrel.app/Contents/SharedSupport
Warning > 不推荐与系统中的已有 rime 输入法共用一个用户目录, 免得出什么问题
使用前备份自己的数据, 避免因作者对 rime API 理解不到位可能造成的数据损失
可以通过 rime 的 sync 功能将系统中已安装的 rime 输入法的词库同步过来。
如需同步词库, 可以在 rime-ls 自己的用户目录下的 installation.yaml
添加sync_dir: "/<existing user data dir>/sync"
配置项。
通过 LSP 的 workspace/executeCommand
手動調用 rime-ls.sync_user_data
的命令进行同步 (since v0.1.2)
为什么默认补全繁体中文?怎么修改候选个数?
答:这部分由 Rime 负责,参考 Rime 的帮助文档。推荐对 Rime 有初步了解后再使用本软件。
某个编辑器不能用/不好用
答:由于 LSP 客户端在补全上的实现都很不一致(影响用户体验的差异主要有:怎样寻找单词边界、怎样过滤候选项), 不能保证每个编辑器都有很好的使用体验。
欢迎为本项目贡献代码,你可以:
受到以下項目啓發