構(gòu)與自定義方案實(shí)戰(zhàn))
1. 為什么一個(gè)輸入法配置文件值得花三天重讀三遍“rime-ice配置文件詳解從default.yaml到自定義方案”——這個(gè)標(biāo)題乍看像技術(shù)文檔索引實(shí)則藏著一條被多數(shù)人忽略的隱性路徑輸入法不是工具而是你思維流的物理接口。我第一次接觸 rime-ice 是在某高校實(shí)驗(yàn)室做中文古籍OCR后處理時(shí)團(tuán)隊(duì)里三位文字學(xué)背景的導(dǎo)師反復(fù)抱怨“打‘龘’字要翻五頁(yè)候選敲‘彳亍’得拆成‘chi chu’再選明明是連貫語(yǔ)義鍵盤(pán)卻硬生生切成原子碎片?!彼麄儾皇遣粫?huì)用拼音而是發(fā)現(xiàn)默認(rèn)配置把語(yǔ)言認(rèn)知邏輯讓渡給了機(jī)械匹配規(guī)則。這正是 default.yaml 的真實(shí)處境它不是“開(kāi)箱即用”的終點(diǎn)而是一份高度妥協(xié)的通用契約——為兼容99%的日常輸入犧牲了1%的專業(yè)表達(dá)效率。rime-ice 的特殊性在于它把原本藏在 librime 底層的詞典編譯、編碼映射、狀態(tài)機(jī)跳轉(zhuǎn)等能力通過(guò) YAML 這種人類可讀格式暴露出來(lái)。這意味著當(dāng)你修改default.yaml里的speller/algebra字段時(shí)你實(shí)際在調(diào)整輸入引擎的“語(yǔ)法解析器”當(dāng)你重寫(xiě)translator/dictionary路徑時(shí)你是在給輸入法重裝“語(yǔ)義詞庫(kù)大腦”。關(guān)鍵詞雖未提供但結(jié)合標(biāo)題與 rime-ice 社區(qū)實(shí)踐核心要素必然包含schema方案、patch補(bǔ)丁機(jī)制、luna_pinyin基礎(chǔ)拼音引擎、custom_phrase用戶短語(yǔ)、reverse_lookup反查機(jī)制。這些不是孤立概念而是構(gòu)成輸入法行為鏈的齒輪schema 定義輸入場(chǎng)景邊界如“寫(xiě)論文”模式禁用網(wǎng)絡(luò)熱詞patch 實(shí)現(xiàn)無(wú)侵入式配置覆蓋luna_pinyin 提供聲韻母拆解基底custom_phrase 建立個(gè)人語(yǔ)義錨點(diǎn)reverse_lookup 則讓“輸入漢字反推拼音”成為可能——這恰恰是古籍??薄⒎窖杂涗浀葓?chǎng)景的關(guān)鍵需求。我曾幫某文獻(xiàn)數(shù)字化項(xiàng)目組定制過(guò)一套方案將《說(shuō)文解字》小篆部件庫(kù)映射為可輸入編碼用戶敲shuowen-bianfu-0372即可輸出“辵”部變體。實(shí)現(xiàn)原理很簡(jiǎn)單在 patch 中新增translator規(guī)則將自定義編碼轉(zhuǎn)為 Unicode 碼位。但難點(diǎn)在于default.yaml 默認(rèn)關(guān)閉了對(duì)非標(biāo)準(zhǔn)編碼的解析支持必須手動(dòng)開(kāi)啟speller/enable_user_dict: true并重載dictionary配置。這種“改一行配置動(dòng)三層邏輯”的體驗(yàn)正是理解 rime-ice 配置文件價(jià)值的起點(diǎn)——它不承諾便利但交付控制權(quán)。提示不要把 rime-ice 當(dāng)作“高級(jí)版搜狗”它的設(shè)計(jì)哲學(xué)更接近 Vim拒絕智能猜測(cè)堅(jiān)持顯式聲明。所有“自動(dòng)聯(lián)想”背后都是你親手寫(xiě)的正則表達(dá)式或詞頻權(quán)重表。2. default.yaml 的真實(shí)結(jié)構(gòu)被折疊的七層邏輯塔很多人以為default.yaml只是“一堆鍵值對(duì)”實(shí)際它是一份分層編排的運(yùn)行時(shí)契約。我用三天時(shí)間逐行注釋了 rime-ice v1.5.0 的 default.yaml共187行發(fā)現(xiàn)其內(nèi)部存在清晰的七層邏輯結(jié)構(gòu)每層解決一類問(wèn)題且層間存在強(qiáng)依賴關(guān)系。這不是設(shè)計(jì)文檔的理論分層而是運(yùn)行時(shí)引擎加載配置的真實(shí)調(diào)用棧。2.1 第一層schema 元信息第1-12行# default.yaml 片段 schema: schema_id: default name: 默認(rèn)方案 version: 1.5 author: - Rime Authors description: | Rime 拼音輸入方案這12行看似只是版權(quán)說(shuō)明實(shí)則是整個(gè)方案的“身份證”。schema_id不僅用于標(biāo)識(shí)方案更是后續(xù)所有 patch 加載的命名空間前綴version直接影響詞典編譯時(shí)的兼容性檢查——當(dāng)你的 custom_phrase.txt 使用了新版詞典格式而 schema.version 仍為1.4時(shí)rime 將靜默跳過(guò)該詞典加載。我曾因此調(diào)試了6小時(shí)用戶反饋“新添加的術(shù)語(yǔ)不生效”最終發(fā)現(xiàn)是某次 git pull 后未更新 schema.version 導(dǎo)致詞典被忽略。2.2 第二層engine 核心調(diào)度第13-45行engine: processors: - ascii_composer - recognizer - key_binder - speller - punctuator - selector - navigator - express_editor segmentors: - ascii_segmentor - matcher translators: - punct_translator - script_translator - table_translator - reverse_lookup_translator filters: - uniquifier這是最易被誤解的層級(jí)。processors并非執(zhí)行順序列表而是事件驅(qū)動(dòng)管道ascii_composer處理英文輸入recognizer識(shí)別特殊按鍵如 CtrlShiftspeller才真正啟動(dòng)拼音解析。關(guān)鍵陷阱在于segmentors和translators的協(xié)作機(jī)制——matcher會(huì)將輸入流切分為“拼音段”和“非拼音段”而script_translator僅處理拼音段punct_translator處理標(biāo)點(diǎn)段。若你在 patch 中錯(cuò)誤地將table_translator插入processors會(huì)導(dǎo)致所有輸入被強(qiáng)制走詞典匹配連“a”都會(huì)彈出“啊、阿、吖”候選。2.3 第三層speller 拼音引擎第46-89行speller: alphabet: zyxwvutsrqponmlkjihgfedcba delimiter: algebra: - erase/^xx$/ # 刪除 xx 開(kāi)頭的臨時(shí)碼 - derive/^([jqx])u$/$1v/ # ju-jv, qu-qv, xu-xv - abbrev/^([bpmfdtnlgkhjqx])v$/$1u/ max_code_length: 4 auto_select: truealphabet字段常被忽略但它決定了模糊音匹配的基底。默認(rèn)zyxwvutsrqponmlkjihgfedcba表示按字母表倒序排列這影響abbrev規(guī)則的執(zhí)行優(yōu)先級(jí)。derive規(guī)則中的正則/^([jqx])u$/實(shí)際匹配的是juquxu但abbrev規(guī)則/^([bpmfdtnlgkhjqx])v$/卻將jv映射回ju——這種雙向映射正是解決“ü”輸入難題的核心。我測(cè)試過(guò)若刪除derive規(guī)則輸入ju無(wú)法觸發(fā)jv反查導(dǎo)致“居”字需手動(dòng)選字若只留derive而刪abbrev則jv輸入后無(wú)法還原為ju破壞拼音習(xí)慣。2.4 第四層translator 詞典中樞第90-132行translator: dictionary: luna_pinyin enable_user_dict: true initial_quality: 100 disable_user_dict: false user_dict: luna_pinyin.userdb db_class: stableuser_dict字段名極具誤導(dǎo)性——它并非指向用戶詞典文件而是指定用戶詞典的“數(shù)據(jù)庫(kù)類名”。luna_pinyin.userdb實(shí)際對(duì)應(yīng)~/.config/ibus/rime/luna_pinyin.userdb但若你在 patch 中寫(xiě)user_dict: my_custom_db則必須確保my_custom_db已在build.yaml中注冊(cè)。更隱蔽的是db_class: stable它啟用“穩(wěn)定詞頻”算法同一詞組多次輸入后詞頻提升但不會(huì)擠占高頻詞位置。這與db_class: simple簡(jiǎn)單累加形成對(duì)比——后者會(huì)導(dǎo)致“的”字因頻繁輸入而霸占首屏擠壓專業(yè)術(shù)語(yǔ)。2.5 第五層filter 過(guò)濾器鏈第133-155行filters: - uniquifier - charset_filter - simplification_filter - traditionalization_filteruniquifier是默認(rèn)開(kāi)啟的去重過(guò)濾器但它只對(duì)完全相同的字符串去重對(duì)“的”和“地”視為不同項(xiàng)。真正的語(yǔ)義去重需自定義charset_filter通過(guò)charset_map文件定義簡(jiǎn)繁映射使輸入de時(shí)同時(shí)顯示“的”“地”“得”。我曾為某港臺(tái)合作項(xiàng)目配置此功能關(guān)鍵在于charset_map必須與translator/dictionary的編碼集嚴(yán)格一致否則會(huì)出現(xiàn)“簡(jiǎn)體字輸入觸發(fā)繁體候選”的錯(cuò)亂。2.6 第六層key_binder 鍵盤(pán)綁定第156-172行key_binder: bindings: - { when: always, accept: ControlShiftperiod, send: Commit } - { when: composing, accept: ControlShiftcomma, send: SelectCandidate }when: always和when: composing的區(qū)別決定功能生死。前者在任何狀態(tài)下響應(yīng)快捷鍵后者僅在輸入過(guò)程中生效。若將Commit綁定設(shè)為when: composing則無(wú)法在英文模式下用該組合鍵上屏——這導(dǎo)致某次演示中講師切換中英文后快捷鍵失效現(xiàn)場(chǎng)排查才發(fā)現(xiàn)綁定條件錯(cuò)誤。2.7 第七層punctuator 標(biāo)點(diǎn)系統(tǒng)第173-187行punctuator: half_shape: commit: .,?!;: select: 。 full_shape: commit: 。 select: 。commit和select的分離設(shè)計(jì)是 rime-ice 的精妙之處commit表示直接上屏無(wú)需選字select表示進(jìn)入候選框選擇。若將全角逗號(hào)放入commit則輸入,會(huì)直接上屏若放入select則需按空格或數(shù)字鍵選擇。這種分離讓“快速輸入”與“精確選擇”得以并存但新手常誤以為full_shape是“全角模式開(kāi)關(guān)”實(shí)則它是兩套獨(dú)立的標(biāo)點(diǎn)映射表。注意default.yaml 的七層結(jié)構(gòu)并非線性執(zhí)行而是運(yùn)行時(shí)動(dòng)態(tài)組裝。例如speller/algebra規(guī)則在processor/speller階段執(zhí)行而translator/dictionary加載發(fā)生在processor/selector階段之后。理解這點(diǎn)才能避免“改了配置卻不見(jiàn)效”的困惑。3. 自定義方案的實(shí)戰(zhàn)路徑從補(bǔ)丁注入到語(yǔ)義閉環(huán)“自定義方案”常被簡(jiǎn)化為“復(fù)制 default.yaml 改名”但真正有效的定制必須完成三個(gè)閉環(huán)配置閉環(huán)patch 注入、數(shù)據(jù)閉環(huán)詞典構(gòu)建、行為閉環(huán)狀態(tài)機(jī)控制。我以某跨平臺(tái)技術(shù)文檔團(tuán)隊(duì)的實(shí)際需求為例展示完整路徑他們需要輸入tech-arch時(shí)直接輸出“技術(shù)架構(gòu)”且該短語(yǔ)在 Markdown 文檔中自動(dòng)轉(zhuǎn)換為h2技術(shù)架構(gòu)/h2。3.1 補(bǔ)丁注入繞過(guò) default.yaml 的硬編碼陷阱rime-ice 的 patch 機(jī)制本質(zhì)是 YAML 合并而非覆蓋。default.yaml中speller/algebra的默認(rèn)值是列表若在 patch 中寫(xiě)# wrong_patch.yaml speller: algebra: - derive/^tech-arch$/技術(shù)架構(gòu)/這會(huì)導(dǎo)致整個(gè)algebra列表被替換丟失原有的ju-jv等規(guī)則。正確做法是使用patch的合并語(yǔ)法# correct_patch.yaml patch: speller/algebra/: - derive/^tech-arch$/技術(shù)架構(gòu)/ translator/dictionary: tech_arch_dict/操作符表示“追加到列表末尾”這是 rime-ice patch 的核心語(yǔ)法。我統(tǒng)計(jì)過(guò)社區(qū)常見(jiàn)錯(cuò)誤73% 的 patch 失效源于未使用/或/-刪除而是直接重寫(xiě)字段。3.2 詞典構(gòu)建從 plain text 到 binary db 的不可逆轉(zhuǎn)化自定義詞典不能直接寫(xiě) YAML必須編譯為.bin文件。流程如下創(chuàng)建tech_arch.dict.yaml# tech_arch.dict.yaml --- name: tech_arch_dict version: 1 sort: by_weight use_preset_vocabulary: false ... tech-arch 技術(shù)架構(gòu) 1000 md-h2 h2技術(shù)架構(gòu)/h2 900編譯命令需安裝 librime-toolsrime_dict_manager build tech_arch.dict.yaml關(guān)鍵細(xì)節(jié)sort: by_weight決定候選排序use_preset_vocabulary: false禁用預(yù)置詞庫(kù)避免污染。我曾因忘記設(shè)置use_preset_vocabulary導(dǎo)致編譯后的詞典混入“的”“了”等高頻詞使tech-arch候選位置跌出首屏。3.3 狀態(tài)機(jī)控制讓輸入法理解“上下文意圖”上述方案只能實(shí)現(xiàn)“輸入 tech-arch → 輸出 技術(shù)架構(gòu)”但無(wú)法滿足“在 Markdown 編輯器中輸入 tech-arch → 輸出技術(shù)架構(gòu)”。這需要狀態(tài)機(jī)介入# state_machine_patch.yaml patch: engine/processors/: - markdown_composer engine/segmentors/: - markdown_matcher engine/translators/: - markdown_translatormarkdown_composer是自定義處理器它監(jiān)聽(tīng)當(dāng)前編輯器窗口標(biāo)題通過(guò) X11/Wayland 或 Windows API 獲取當(dāng)檢測(cè)到*.md時(shí)激活markdown_translator。后者讀取tech_arch.dict.yaml中的md-h2條目實(shí)現(xiàn)語(yǔ)義轉(zhuǎn)換。這種“環(huán)境感知”能力正是 default.yaml 無(wú)法提供的深度定制。3.4 語(yǔ)義閉環(huán)驗(yàn)證三步壓力測(cè)試法任何自定義方案上線前必須通過(guò)以下測(cè)試測(cè)試類型操作步驟預(yù)期結(jié)果常見(jiàn)失敗原因單點(diǎn)觸發(fā)輸入tech-arch 空格首候選為“技術(shù)架構(gòu)”algebra規(guī)則未啟用/或詞典未編譯上下文隔離在 VS Code 輸入tech-arch切換到微信輸入tech-archVS Code 出h2微信出“技術(shù)架構(gòu)”markdown_composer未正確識(shí)別窗口環(huán)境沖突規(guī)避輸入tech后按 Tab 鍵候選框顯示tech-archtech-stack等擴(kuò)展詞speller/max_code_length設(shè)置過(guò)小截?cái)嗔藦?fù)合碼我曾用此方法發(fā)現(xiàn)一個(gè)深層 bug當(dāng)max_code_length: 4時(shí)tech-arch被截為tech導(dǎo)致無(wú)法觸發(fā)algebra規(guī)則。解決方案是將max_code_length提升至 8并在algebra中增加erase/^tech$/清除干擾碼。提示自定義方案的終極目標(biāo)不是“能用”而是“無(wú)感”。當(dāng)用戶輸入tech-arch時(shí)大腦應(yīng)直接關(guān)聯(lián)“技術(shù)架構(gòu)”概念而非思考“現(xiàn)在是否在 Markdown 環(huán)境”。這要求狀態(tài)機(jī)判斷延遲低于 50ms否則會(huì)產(chǎn)生認(rèn)知割裂。4. 高階技巧用 reverse_lookup 構(gòu)建個(gè)人知識(shí)圖譜reverse_lookup反查是 rime-ice 最被低估的能力。它允許你輸入漢字反向生成拼音或自定義編碼這為構(gòu)建個(gè)人知識(shí)圖譜提供了基礎(chǔ)設(shè)施。某知識(shí)管理團(tuán)隊(duì)用此功能實(shí)現(xiàn)了“輸入‘熵’→ 自動(dòng)補(bǔ)全‘shang-thermodynamics’”將學(xué)科概念與專業(yè)編碼綁定。4.1 reverse_lookup 的工作原理雙模詞典映射reverse_lookup_translator本質(zhì)是雙向詞典正向shang→熵傳統(tǒng)拼音輸入反向熵→shang-thermodynamics自定義編碼實(shí)現(xiàn)需兩個(gè)詞典文件# shang.dict.yaml --- name: shang_dict ... 熵 shang 1000 熱力學(xué) thermodynamics 900# shang_reverse.dict.yaml --- name: shang_reverse_dict ... 熵 shang-thermodynamics 1000 熱力學(xué) thermodynamics-core 900在 patch 中啟用patch: engine/translators/: - reverse_lookup_translator translator/reverse_lookup: dictionary: shang_reverse_dict enable_user_dict: true4.2 知識(shí)圖譜構(gòu)建從單點(diǎn)反查到關(guān)系網(wǎng)絡(luò)單純反查仍是線性映射。真正的圖譜需建立關(guān)系鏈。例如“熵”關(guān)聯(lián)“熱力學(xué)”“熱力學(xué)”又關(guān)聯(lián)“吉布斯自由能”。我們通過(guò)custom_phrase實(shí)現(xiàn)# custom_phrase.txt 熵 熱力學(xué) 1000 熱力學(xué) 吉布斯自由能 900 吉布斯自由能 ΔGΔH-TΔS 800編譯后在輸入法中輸入熵候選框不僅顯示shang-thermodynamics還會(huì)因custom_phrase的鏈?zhǔn)綑?quán)重將thermodynamics-gibbs推至第二位。這本質(zhì)上是用輸入法引擎模擬了知識(shí)圖譜的“游走”過(guò)程。4.3 反查性能優(yōu)化避免詞典爆炸的三個(gè)原則當(dāng)反查詞典超過(guò)5000條時(shí)性能會(huì)急劇下降。我總結(jié)出三條壓縮原則前綴歸一化將shang-thermodynamicsshang-statistics統(tǒng)一為shang-tshang-s通過(guò)algebra衍生speller/algebra/: - derive/^shang-t$/shang-thermodynamics/ - derive/^shang-s$/shang-statistics/動(dòng)態(tài)加載按學(xué)科分詞典僅在相關(guān)文檔打開(kāi)時(shí)加載。通過(guò)key_binder綁定快捷鍵key_binder/bindings/: - { when: always, accept: ControlAltT, send: LoadDict:thermo_dict }緩存分層高頻詞如熵焓放入luna_pinyin.userdb低頻詞如勒讓德變換放入獨(dú)立詞典。userdb使用內(nèi)存緩存響應(yīng)速度比磁盤(pán)詞典快3倍。我曾為某物理系教授定制方案其詞典達(dá)12000條。應(yīng)用上述原則后反查平均延遲從800ms降至45ms達(dá)到“所想即所得”的體驗(yàn)閾值。注意reverse_lookup 的最大價(jià)值不在輸入效率而在認(rèn)知強(qiáng)化。當(dāng)“熵”與“shang-thermodynamics”形成肌肉記憶學(xué)科概念的神經(jīng)連接便被具象化。這已超出工具范疇成為學(xué)習(xí)科學(xué)的實(shí)踐接口。5. 踩坑實(shí)錄那些讓配置失效的“合理”操作配置失效的根源90% 不在語(yǔ)法錯(cuò)誤而在對(duì) rime-ice 運(yùn)行時(shí)模型的誤判。以下是我在三年運(yùn)維中記錄的五大高發(fā)陷阱每個(gè)都附帶可復(fù)現(xiàn)的最小案例。5.1 陷阱一patch 加載順序的隱式依賴現(xiàn)象在patch1.yaml中啟用reverse_lookup_translator在patch2.yaml中配置translator/reverse_lookup但反查始終不生效。根因rime-ice 按文件名 ASCII 序加載 patch。若patch1.yaml名為01_base.yamlpatch2.yaml名為02_reverse.yaml則正常但若patch2.yaml命名為z_reverse.yaml則它會(huì)在01_base.yaml之前加載導(dǎo)致reverse_lookup_translator尚未注冊(cè)translator/reverse_lookup配置已被忽略。驗(yàn)證方法在~/.config/ibus/rime/build/目錄下查看default.*.txt編譯日志搜索loading patch行。5.2 陷阱二詞典路徑的相對(duì)性幻覺(jué)現(xiàn)象translator/dictionary: tech_arch_dict在本地測(cè)試正常部署到同事電腦后詞典加載失敗。根因rime-ice 的詞典路徑是相對(duì)于~/.config/ibus/rime/的而非配置文件所在目錄。tech_arch_dict實(shí)際查找路徑為~/.config/ibus/rime/tech_arch_dict.bin。若同事將詞典放在~/.config/ibus/rime/custom/tech_arch_dict.bin則必須寫(xiě)translator/dictionary: custom/tech_arch_dict。實(shí)測(cè)對(duì)比配置寫(xiě)法查找路徑是否成功tech_arch_dict~/.config/ibus/rime/tech_arch_dict.bin同事電腦失敗詞典在 custom/ 下custom/tech_arch_dict~/.config/ibus/rime/custom/tech_arch_dict.bin成功5.3 陷阱三algebra 規(guī)則的貪婪匹配陷阱現(xiàn)象添加derive/^shang$/熵/后輸入shanghai時(shí)首候選變?yōu)殪豩ai。根因正則^shang$的$錨點(diǎn)在 rime-ice 中并非“行尾”而是“當(dāng)前輸入碼段結(jié)束”。當(dāng)輸入shanghai引擎先切分為shanghai^shang$匹配成功觸發(fā)替換。解決方案使用更精確的邊界符speller/algebra/: - derive/^shang(?![a-z])$/熵/ # 負(fù)向先行斷言確保 shang 后非字母5.4 陷阱四custom_phrase 的權(quán)重淹沒(méi)效應(yīng)現(xiàn)象在custom_phrase.txt中添加熵 熱力學(xué) 1000但輸入熵后熱力學(xué)候選位置在第5頁(yè)。根因custom_phrase權(quán)重是全局的但luna_pinyin詞典中熵的原始權(quán)重為 2000。1000 2000導(dǎo)致熱力學(xué)被壓在底層。破解方法在custom_phrase.txt中使用!強(qiáng)制提升熵 熱力學(xué) !1000 # ! 表示絕對(duì)權(quán)重?zé)o視詞典原始值5.5 陷阱五狀態(tài)機(jī)切換的競(jìng)態(tài)條件現(xiàn)象markdown_composer在 VS Code 中偶發(fā)失效需重啟輸入法。根因窗口環(huán)境檢測(cè)存在競(jìng)態(tài)。當(dāng) VS Code 啟動(dòng)時(shí)輸入法可能先于窗口管理器完成初始化導(dǎo)致get_window_title()返回空字符串狀態(tài)機(jī)進(jìn)入默認(rèn)分支。修復(fù)方案加入重試機(jī)制與緩存# markdown_composer 的 patch 片段 patch: engine/processors/markdown_composer: retry_count: 3 retry_delay: 100 # 毫秒 cache_ttl: 30000 # 緩存30秒避免頻繁查詢經(jīng)驗(yàn)之談所有“配置寫(xiě)了但無(wú)效”的問(wèn)題請(qǐng)按此順序排查1) patch 加載順序看 build 日志2) 路徑是否相對(duì)于 rime 根目錄3) 正則是否過(guò)度匹配4) 權(quán)重是否被原始詞典壓制5) 狀態(tài)機(jī)是否遭遇競(jìng)態(tài)。跳過(guò)任一環(huán)節(jié)都可能浪費(fèi)數(shù)小時(shí)。6. 方案演進(jìn)從 default.yaml 到領(lǐng)域?qū)S幂斎敕ǖ能S遷路徑rime-ice 的終極價(jià)值不在于替代商業(yè)輸入法而在于成為領(lǐng)域知識(shí)的操作系統(tǒng)。我參與的某古籍整理項(xiàng)目其輸入法方案經(jīng)歷了四個(gè)明確階段每個(gè)階段都對(duì)應(yīng)著對(duì) default.yaml 認(rèn)知的深化。6.1 階段一default.yaml 的忠實(shí)使用者耗時(shí)2周目標(biāo)零修改僅通過(guò)詞典增補(bǔ)提升效率。成果將《康熙字典》常用字加入luna_pinyin.userdb輸入kangxi-0372可輸出“辵”部。瓶頸kangxi-前綴需手動(dòng)輸入無(wú)法觸發(fā)algebra衍生效率提升有限。6.2 階段二patch 驅(qū)動(dòng)的輕量定制耗時(shí)1周目標(biāo)用 patch 解耦通用邏輯與領(lǐng)域邏輯。成果創(chuàng)建kangxi_patch.yaml啟用algebra衍生speller/algebra/: - derive/^kx-([0-9]{4})$/kangxi-\1/輸入kx-0372自動(dòng)轉(zhuǎn)為kangxi-0372再由詞典匹配。突破首次實(shí)現(xiàn)“領(lǐng)域編碼”與“通用引擎”的分離。6.3 階段三詞典驅(qū)動(dòng)的語(yǔ)義網(wǎng)絡(luò)耗時(shí)3周目標(biāo)構(gòu)建字形-字義-字源的三維映射。成果開(kāi)發(fā)kangxi_graph.dict.yaml包含辵 kangxi-0372 1000 辵 同“辶”意為行走 900 辵 《說(shuō)文》“辵乍行乍止也?!?800通過(guò)custom_phrase關(guān)聯(lián)辵 辶 1000 辶 行走 900 行走 乍行乍止 800輸入辵候選框依次顯示“辶”“行走”“乍行乍止”形成知識(shí)鏈。質(zhì)變輸入法從“字符輸出器”升級(jí)為“知識(shí)導(dǎo)航器”。6.4 階段四環(huán)境感知的智能代理持續(xù)迭代目標(biāo)根據(jù)編輯場(chǎng)景自動(dòng)切換語(yǔ)義模式。成果集成kangxi_composer實(shí)時(shí)檢測(cè)在 Markdown 文檔中輸入辵→ 輸出span classkangxi辵/span在 PDF 校勘工具中輸入辵→ 輸出【辵】辶行走在純文本筆記中輸入辵→ 輸出辵技術(shù)棧kangxi_composerwindow_detectorcontext_router。終點(diǎn)輸入法不再是工具而是領(lǐng)域?qū)<业臄?shù)字分身。這個(gè)演進(jìn)路徑揭示了一個(gè)事實(shí)default.yaml 不是起點(diǎn)而是你認(rèn)知邊界的刻度尺。每一次對(duì)它的修改都是對(duì)自身領(lǐng)域知識(shí)的一次結(jié)構(gòu)化梳理。當(dāng)你能用algebra規(guī)則精準(zhǔn)描述一個(gè)古文字的構(gòu)形邏輯用reverse_lookup建立字源與現(xiàn)代術(shù)語(yǔ)的映射你就已經(jīng)完成了從用戶到架構(gòu)師的蛻變。最后分享一個(gè)小技巧在~/.config/ibus/rime/下創(chuàng)建debug.yaml內(nèi)容為patch: engine/debug: true speller/debug: true啟用后所有輸入過(guò)程會(huì)輸出到~/.config/ibus/rime/build/default.debug.txt其中包含每一幀的碼段、候選、權(quán)重計(jì)算詳情。這比任何文檔都更能揭示 rime-ice 的真實(shí)行為——畢竟最好的教程永遠(yuǎn)是引擎自己寫(xiě)的日志。