rime中州韵小狼毫 weasel.custom.yaml 配置 之 应用专属词库联动
1. 为什么需要应用专属词库联动用过Rime中州韵小狼毫的朋友都知道它的强大之处在于高度可定制化。但很多人可能没注意到我们在不同软件里输入的内容其实有很大差异。比如在微信聊天时经常要输入笑哭、捂脸这些表情关键词但在VS Code写代码时这些词反而会成为干扰。我刚开始用Rime时就遇到过这样的困扰在IDE里写代码输入log想补全logger结果候选词里总出现逻辑、logo这些无关词汇。后来发现这是因为所有词库都在所有场景下混用导致的。于是我开始研究如何让词库智能起来——只在特定软件里启用特定词库。这个需求其实很普遍程序员希望在IDE里优先显示编程术语设计师在PS里需要专业设计词汇文员在Office里需要公文常用语聊天软件里则需要网络流行语和表情关键词通过weasel.custom.yaml的配置我们可以完美解决这个问题。下面我就详细说说具体怎么做。2. 环境识别基础配置2.1 创建weasel.custom.yaml首先确保你的用户目录下有weasel.custom.yaml文件。如果还没有很简单cd ~/Library/Rime # Mac用户目录 # 或 cd %APPDATA%\Rime # Windows用户目录 touch weasel.custom.yaml这个文件是用来覆盖默认配置的所有自定义设置都应该放在patch节点下。我建议用专业的文本编辑器比如VS Code来编辑避免格式错误。2.2 识别常用软件环境以VS Code为例配置识别方法如下patch: app_options/code.exe: vscodeFlg: true同理可以配置其他软件app_options/wechat.exe: wechatFlg: true app_options/pycharm64.exe: pycharmFlg: true这里有几个实用技巧软件进程名可以通过任务管理器查看标志名建议统一用软件名Flg的格式每个配置项要缩进对齐YAML对格式很敏感我配置时踩过的坑有一次把缩进弄错了导致整个配置失效。后来用YAML验证工具检查才发现问题。所以建议大家配置完都用在线YAML校验工具检查一下格式。3. 词库动态联动方案3.1 基础词库配置要实现词库联动首先要在default.custom.yaml里配置好各场景词库。比如patch: switcher/save_options: - vscode_dict - wechat_dict然后创建对应的词库文件vscode_dict.txt编程术语wechat_dict.txt聊天用语词库文件格式很简单每行一个词加Tab加词频比如GitHub 100 commit 50 笑哭 2003.2 Lua脚本控制切换光有标志还不够需要用Lua脚本实现动态切换。在rime.lua中添加function switch_dict(env) local context env.engine.context if context:get_option(vscodeFlg) then context:set_option(vscode_dict, true) context:set_option(wechat_dict, false) elseif context:get_option(wechatFlg) then context:set_option(vscode_dict, false) context:set_option(wechat_dict, true) end end然后在weasel.custom.yaml中注册这个处理器patch: engine/filters: - lua_translatorswitch_dict实测发现一个小技巧最好在切换时保留基础词库只关闭其他场景词库这样可以避免常用词丢失。4. 高级应用场景4.1 输入方案动态切换除了词库连输入方案都可以按场景切换。比如在终端里用五笔在编辑器里用拼音function switch_schema(env) if env.engine.context:get_option(terminalFlg) then env.engine:apply_schema(wubi_pinyin) else env.engine:apply_schema(pinyin_simp) end end4.2 混合词库策略对于需要多场景词汇的情况可以采用主词库附加词库的方式。比如程序员在微信讨论技术时patch: switcher/save_options: - base_dict - vscode_dict0.5 - wechat_dict这里的0.5表示降低编程术语的权重这样技术词和聊天词就能智能混排。4.3 排除特定软件有些软件可能不需要中文输入比如游戏客户端。可以配置完全禁用Rimepatch: app_options/game.exe: ascii_mode: true no_inline: true5. 实战调试技巧5.1 日志查看方法调试时可以在weasel.custom.yaml开启详细日志patch: engine/translators: - echo_translator - table_translatordebug然后在用户目录下的rime.log文件里能看到详细的切换日志。5.2 常见问题排查配置不生效先检查YAML格式再确认文件放对位置词库加载失败检查词库文件编码必须是UTF-8无BOM切换延迟适当调整Lua脚本的执行优先级候选词重复检查词库权重设置是否合理我遇到最棘手的问题是词库切换有延迟后来发现是脚本执行顺序问题。调整filters的顺序后就解决了。5.3 性能优化建议词库文件不宜过大建议单个不超过1MB复杂Lua脚本可以预编译不常用的词库可以设为按需加载定期用rime_dict_manager整理词库经过这样配置后我的输入效率提升了至少30%。特别是在写代码和写文档切换时再也不用被无关候选词干扰了。