我的万象方案配置(裁切)

我的万象方案配置(裁切)

[2026-05-05 二 18:47]

前言

万象是个好方案,特别是加入音调之后,非常符合直觉,都不用拆字反查了。但是由于万象方案覆盖面很广,其实很多东西都是没必要的,添加了启用了反而可能影响性能。这里跟大家分享一下我自用的万象裁切方案,其中关闭了很多功能,但基本的音调还是在,而且性能也好了不少。

default.custom.yaml

这里就只写改了什么地方,不过我基本也还是将原版复制过来再直接替换的。

patch:  # Rime default settings
  # encoding: utf-8


  # 要比共享目录的同名文件的 config_version 大才可以生效
  config_version: 'LTS'

启用pro方案

# 方案列表
  schema_list:
    - schema: wanxiang_pro
  #  - schema: wanxiang_english
  #  - schema: wanxiang_t9

为了把 7 8 9 0 留给四个音调,故设置候选词为5个

# 菜单
  menu:
    page_size: 5  # 候选词个数,不得超过6个,7890代表声调
    alternative_select_labels: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]  # 修改候选项标签,Windows用这行会自动加点
    #alternative_select_labels: [ ⒈, ⒉, ⒊, ⒋, ⒌, ⒍, ⒎, ⒏, ⒐, ⒑ ]  # 修改候选项标签,Linux用这行用了加点字符
    #alternative_select_keys: ASDFGHJKL  # 这里战略性占用选字按键,如编码字符占用数字键,则需另设选字键

与上游保持一致

# 万象状态面板相关
  switcher:
    caption: 「万象状态面板」
    hotkeys:
      - Control+grave
    save_options:  # 开关记忆(方案中的 switches),从万象状态面板(而非快捷键)切换时会记住的选项,需要记忆的开关不能设定 reset
      - ascii_punct
      - s2t
      - s2hk
      - s2tw
      - emoji
      - full_shape
      - prediction
      - super_tips
      - charset_filter
      - chaifen_switch
      - tone_display
      - fuzhu_hint
      - tone_hint
      - full_pinyin
      - chinese_english
      - search_single_char
      - abbrev
    fold_options: true            # 呼出时是否折叠,多方案时建议折叠 true ,一个方案建议展开 false
    abbreviate_options: true      # 折叠时是否缩写选项
    option_list_separator: ' / '  # 折叠时的选项分隔符


  # 中英文切换
  #
  # good_old_caps_lock:
  # true   切换大写
  # false  切换中英
  # macOS 偏好设置的优先级更高,如果勾选【使用大写锁定键切换“ABC”输入法】则始终会切换输入法。
  #
  # 切换中英:
  # 不同的选项表示:打字打到一半时按下了 CapsLock、Shift、Control 后:
  # commit_code  上屏原始的编码,然后切换到英文
  # commit_text  上屏拼出的词句,然后切换到英文
  # clear        清除未上屏内容,然后切换到英文
  # inline_ascii 切换到临时英文模式,按回车上屏后回到中文状态
  # noop         屏蔽快捷键,不切换中英,但不要屏蔽 CapsLock

这里将左Shift设置为无操作,是我使用emacs的结果,不用的人请不用修改。

ascii_composer:
    good_old_caps_lock: true  # true | false
    switch_key:
      Caps_Lock: clear      # commit_code | commit_text | clear
      Shift_L: noop  # commit_code | commit_text | inline_ascii | clear | noop
      Shift_R: commit_code  # commit_code | commit_text | inline_ascii | clear | noop
      Control_L: noop       # commit_code | commit_text | inline_ascii | clear | noop
      Control_R: noop       # commit_code | commit_text | inline_ascii | clear | noop

一些个人风格的快捷键

# 处理符合特定规则的输入码,如网址、反查
  # 此处配置较为通用的选项,各方案中另增加了和方案功能绑定的 patterns。
  recognizer:
    patterns:

  # 快捷键
  key_binder:
    bindings:
      # Tab / Shift+Tab 切换光标至下/上一个拼音
      #- { when: composing, accept: Shift+Tab, send: Shift+Left }
      #- { when: composing, accept: Tab, send: Shift+Right }
      # Tab / Shift+Tab 翻页
      # - { when: has_menu, accept: Shift+Tab, send: Page_Up }
      # - { when: has_menu, accept: Tab, send: Page_Down }
      
      # numbered_mode_switch:
      # - { when: always, select: .next, accept: Control+Shift+1 }                  # 在最近的两个方案之间切换
      # - { when: always, select: .next, accept: Control+Shift+exclam }             # 在最近的两个方案之间切换
      # - { when: always, toggle: ascii_mode, accept: Control+Shift+2 }             # 切换中英
      # - { when: always, toggle: ascii_mode, accept: Control+Shift+at }            # 切换中英
      # - { when: always, toggle: full_shape, accept: Control+Shift+5 }             # 切换全半角
      # - { when: always, toggle: full_shape, accept: Control+Shift+percent }       # 切换全半角

      # emacs_editing:
      - { when: composing, accept: Control+p, send: Up }
      - { when: composing, accept: Control+n, send: Down }
      - { when: composing, accept: Control+b, send: Left }
      - { when: composing, accept: Control+f, send: Right }
      - { when: composing, accept: Control+a, send: Home }
      - { when: composing, accept: Control+e, send: End }
      - { when: composing, accept: Control+d, send: Delete }
      - { when: composing, accept: Control+k, toggle: xxxxx } #释放Ctrl+k=ctrl+del 万象用来调序,且删除属于低频场景,建议双手操作
      # - { when: composing, accept: Control+h, send: BackSpace }
      - { when: composing, accept: Control+g, send: Escape }
      # - { when: composing, accept: Control+bracketleft, send: Escape }
      # - { when: composing, accept: Control+y, send: Page_Up }
      # - { when: composing, accept: Alt+v, send: Page_Up }
      # - { when: composing, accept: Control+v, send: Page_Down }

      # optimized_mode_switch:
      # - { when: always, accept: Control+Shift+space, select: .next }
      # - { when: always, accept: Shift+space, toggle: ascii_mode }
      # - { when: always, accept: Control+comma, toggle: full_shape }
      # - { when: always, accept: Control+period, toggle: ascii_punct }
      # - { when: always, accept: Control+slash, toggle: traditionalization }

      # 将小键盘 0~9 . 映射到主键盘,数字金额大写的 Lua 如 R1234.5678 可使用小键盘输入
      - {accept: KP_0, send: 0, when: composing}
      - {accept: KP_1, send: 1, when: composing}
      - {accept: KP_2, send: 2, when: composing}
      - {accept: KP_3, send: 3, when: composing}
      - {accept: KP_4, send: 4, when: composing}
      - {accept: KP_5, send: 5, when: composing}
      - {accept: KP_6, send: 6, when: composing}
      - {accept: KP_7, send: 7, when: composing}
      - {accept: KP_8, send: 8, when: composing}
      - {accept: KP_9, send: 9, when: composing}
      - {accept: KP_Decimal,  send: period  , when: composing}
      - {accept: KP_Multiply, send: asterisk, when: composing}
      - {accept: KP_Add,      send: plus,     when: composing}
      - {accept: KP_Subtract, send: minus,    when: composing}
      - {accept: KP_Divide,   send: slash,    when: composing}
      - {accept: KP_Enter, send: Return, when: composing}

wanxiang_pro.schema.yaml

我没有采用custom的方式,而是直接修改pro文件,再在每次更新时将当前文件和新文件diff一下,比对是否有额外修改。如果有,则修改当前文件,然后将下载下来的方案中除pro-schema外的其他文件覆盖rime文件夹内文件。

开头修改了一下说明,加入版本号以便我自己知道从哪个版本的万象方案里修改而来。

删除了mixcode、english和reverse方案,不需要英语单词、混合输入与反查。

# Rime schema
# encoding: utf-8
# 方案说明
schema:
  schema_id: wanxiang_pro
  name: 万象拼音PRO
  version: "LTS"
  author:
    - amzxyz
  description: |
    高度裁切的万象拼音,15.9.9

保留了几个开关,默认开启了emoji

# 开关
# reset: 默认状态。注释掉后,切换窗口时不会重置到默认状态。
# states: 方案选单显示的名称。可以注释掉,仍可以通过快捷键切换。
# abbrev: 默认的缩写取 states 的第一个字符,abbrev 可自定义一个字符
switches:
  - name: full_shape                   #全角、半角字符输出
    states: [ 半角, 全角 ]
  - name: emoji                        #候选出现emoji滤镜,会显示在相应的候选后面,万象侧重于tips提示,避免候选被占用,因此默认为reset: 0,归属opencc emoji滤镜
    states: [ 表情关, 表情开 ]
    reset: 1

默认关闭了声调转换

- name: prediction
    states: [ 预测关, 预测开 ]            # 这个名称能用于插件也能用于万象的lua实现,用来开启关闭预测功能
  - options: [ raw_input, tone_display, full_pinyin ]   #开启后在输入编码的位置实时转换为带声调全拼或者不带声调全拼,不开启则采用系统配置原始编码,影响的是preedit_format,归属:super_preedit.lua
    states: [ 原编码, 有声调, 无声调 ]
    reset: 0     #对于开关组从0开始数,第几个就reset几可设为默认
  - options: [ s2s, s2t, s2hk, s2tw ]  # 简繁转换开关组,可以在一个空选项和多个实际“- simplifier@s2hk”引入的项目之前切换,这是一个开关组,你可以将其中任意一个s2s等设置为toggle快捷键,多次按下将轮询
    states: [ 简体, 通繁, 港繁, 臺繁 ]

关闭了简码,不需要的功能

- name: abbrev
    states: [ 简码关, 简码开 ]
    reset: 0
  - name: char_priority                #多体现在编码重合但候选有单字或者多字的情况`引导的辅码查词时是否单字优先,全拼常见,类似于特定编码情况下、反查状态下的调序能力。归属:super_lookup.lua
    states: [词组先, 单字先]

输入引擎将不需要的功能删得差不多了,只留下必要的几个lua脚本

# 输入引擎
engine:
  processors:
    - lua_processor@*wanxiang.user_predict*P    #靠自己养的专属预测联想处理器,不再依赖前端插件以及固定数据
    - lua_processor@*wanxiang.super_processor       #KP小键盘、字母选词、符号快打、超强分词、重复限制、退格限制、声调回退、以词定字
    - lua_processor@*wanxiang.super_sequence*P      #手动排序,高亮候选 ctrl+j左移动 ctrl+k 右移动 ctrl+l 移除位移  ctrl+p 置顶
    - ascii_composer                                #处理英文模式及中英文切换
    - recognizer                                    #与 matcher 搭配,处理符合特定规则的输入码,如网址、反查等 tags
    - key_binder                                    #在特定条件下将按键绑定到其他按键,如重定义逗号、句号为候选翻页、开关快捷键等
    - lua_processor@*wanxiang.key_binder            #绑定按键扩展能力,支持正则扩展将按键生效情景更加细化
    - speller                              #拼写处理器,接受字符按键,编辑输入
    - punctuator                           #符号处理器,将单个字符按键直接映射为标点符号或文字
    - selector                             #选字处理器,处理数字选字键〔可以换成别的哦〕、上、下候选定位、换页
    - navigator                            #处理输入栏内的光标移动
    - express_editor                       #编辑器,处理空格、回车上屏、回退键
  segmentors:
    - ascii_segmentor                      #标识英文段落〔譬如在英文模式下〕字母直接上屛
    - matcher                              #配合 recognizer 标识符合特定规则的段落,如网址、反查等,加上特定 tag
    - abc_segmentor                        #标识常规的文字段落,加上 abc 这个 tag
    - affix_segmentor@add_user_dict        #自造词加词 tag
    - punct_segmentor                      #标识符号段落〔键入标点符号用〕加上 punct 这个 tag
    - fallback_segmentor                   #标识其他未标识段落,必须放在最后帮助tag模式切换后回退重新处理
  translators:
    - punct_translator                     #配合 punct_segmentor 转换标点符号
    - script_translator                    #脚本翻译器,用于拼音、粤拼等基于音节表的输入方案
    - lua_translator@*wanxiang.user_predict*T       #靠自己养的专属预测联想处理器,不再依赖前端插件以及固定数据
    - lua_translator@*wanxiang.shijian              #农历、日期、节气、节日、时间、周、问候模板等等,触发清单看下文
    - table_translator@custom_phrase       #自定义短语 custom_phrase.txt,用于置顶自定义编码候选词
    - script_translator@user_dict_set      #自造词之使用词汇入口
    - script_translator@add_user_dict      #自造词之制造词汇入口
  filters:
    - lua_filter@*wanxiang.auto_phrase              #无感造词,英文造词
    - lua_filter@*wanxiang.charset_filter           #放replacer前面,全方位自定义的字符集过滤器,支持繁体字符集开放
    - lua_filter@*wanxiang.super_comment_preedit    #放其他需要注释处理器后面,会有清空注释的操作,超级注释模块,支持错词提示、辅助码显示,部件组字读音注释,支持个性化配置和关闭相应的功能,详情搜索super_comment进行详细配置
    - lua_filter@*wanxiang.super_replacer           #OpenCC替代器,更灵活的处理方式,更自由的自定义方式,支持简繁转换、简码模式、支持候选替换、注释替换、候选派生等等
    - lua_filter@*wanxiang.super_filter             #先进行字符过滤后简繁转换,这样能繁体继承简体权重。本质功能相关功能见Lua文件
    - lua_filter@*wanxiang.super_sequence*F         #放去重前,接管排序索引固定,手动排序,对高亮候选 ctrl+j左移动 ctrl+k 右移动 ctrl+0 移除位移
    - lua_filter@*wanxiang.user_predict*F           #用于输入编码后的上下文调频
    - uniquifier                                    #去重,必须在最后

语法模型配置,与上游保持一致

grammar:
  language: wanxiang-lts-zh-hans
  collocation_max_length: 8
  collocation_min_length: 2
  collocation_penalty: -10
  non_collocation_penalty: -5
  weak_collocation_penalty: -100
  rear_penalty: -5

超级注释,有一点点用,比如能清晰看出来哪些词是用户词典的,哪些是内置的

super_comment:                  # 超级注释模块,子项配置 true 开启,false 关闭
  candidate_length: 1           # 候选词辅助码提醒的生效长度,0为关闭  但同时清空其它,应当使用上面开关来处理
  corrector_type: "〔comment〕"  # 随意更换左右括号,比如"〔comment〕" 不加括号为无括号,comment占位不能动
  cand_type:
    user_phrase: "⁺"
    sentence: ""
    phrase: ""
    table: ""
    user_table: ""
    completion: ""
    abbrev: ""
    predict: ""
    fallback: "~"

与上游保持一致

super_processor:
  enable_backspace_limit: true # 开启/关闭退格限制
  enable_seg_loop: true        # 开启/关闭分词符(')循环
  enable_tone_fallback: true   # 启用声调回退
  enable_predict_space: false   # 启用联想空格打断,直接上屏空格并清空联想,对齐大厂,如果用原生librime-predict这个还有用留着
  kp_number_mode: auto         # 小键盘模式 (auto / compose / select)
  limit_repeated: "8,40"       #格式:"最大重复声母数,最大候选字数"
  select_character: "[,]"      # 开启以词定字,自动拆解第一位上屏首字,第二位上屏尾字
  # 下面这些写法都支持:
  # select_character: "[,]"                      # [ 上屏首字,] 上屏尾字(推荐)
  # select_character: "bracketleft, bracketright"  # [ 上屏首字,] 上屏尾字(英文全拼)

user_predict:
  db_name: lua/predict         # 数据库名称(默认 predict,将生成 predict.userdb 文件夹)
  enable_post_predict: true        # 上屏后预测
  enable_context_reorder: true     # 输入时调频
  enable_fallback_reorder: true    # 同码回删再输首次交换
  max_candidates: 10           # 屏幕最多显示的联想词数量
  max_predictions: 3           # 连续触发预测的最高次数限制
  expiry_days: 90              # 绝对寿命(天):不命中则物理销毁
  activation_days: 7           # 激活期限(天):冷冻期内输入第2次转正
  max_memory_branches: 15      # 分支上限:单前缀最多保留15个后续预测
  decay_rate: 0.85             # 衰减率:单日时间权重打 85 折
  enable_predict_space: false   # true: 按空格上屏空格; false:空格提交候选。一般手机开电脑关,空格当上屏则,Tab、Alt按键当作空格
  context_timeout: 5000         # 上文超时时间毫秒
  custom_classifiers:            # 数字后量词调频,如平时chuan传,输入数字后,首选为串,结果如:1串,想关闭清空列表即可
    - 个只名位口头匹条群批伙多         # 人物动物
    - 张把件台部块根颗粒滴片朵面扇顶栋座所辆艘架盏支枝杆 # 物品建筑
    - 双对副套打串束排阵堆叠摞扎     # 成组集合
    - 杯瓶盒包份碗锅盆桶袋罐盘       # 包装容器
    - 次场局回趟顿番遍声项宗桩款步招  # 动作事件
    - 年月天周岁秒分刻代期届任夜季    # 时间周期
    - 本册篇首句段卷幅节堂门帖字行    # 文化作品
    - 米寸尺里斤两吨克升元角毛笔百千万亿     # 度量货币

调整音调输入显示成什么字符,比如输入7显示成上标1

#常规状态下数字转换成相应的字符,由超级preedit接管
tone_preedit:
  "7": "¹"
  "8": "²"
  "9": "³"
  "0": "⁴"

自定义了控制排序的键位

super_sequence:  # Lua 配置:手动排序的快捷键 super_sequence.lua,不要用方向键,各种冲突,一定要避免冲突
  db_name: "lua/sequence"
  up: "Control+j"    # 上移
  down: "Control+k"  # 下移
  reset: "Control+l" # 重置
  pin: "Control+p"   # 置顶

好像是候选词自动替换,留了一个emoji,删掉了简写

super_replacer:
  db_name: lua/replacer
  delimiter: "|"
  comment_format: "〔%s〕"
  chain: true   #true表示流水线作业,上一个option产出交给下一个处理,典型的s2t>t2hk=s2hk,false就是并行,直接用text转换
  rules:
    # 场景1:输入 '哈哈' -> 变成 '1.哈哈 2.😄'
    - option: emoji           # 开关名称与上面开关名称保持一致
      mode: append            # 新增候选append 替换原候选replace 替换注释comment 简码模式abbrev匹配输入编码置顶词组
      comment_mode: none      # 注释模式: "append"(原候选注释继承), "text"(原候选文本放在注释), "none"(空,默认)
      tags: [abc]             # 生效的tag
      prefix: "_em_"          # 前缀用于区分同一个数据库的不同用途数据
      files:
        - lua/data/emoji.txt

没改动,保留原样

# 场景3:用于常驻的直接替换 option: true
    - option: true
      mode: append         # <--- 新增候选模式
      comment_mode: none
      tags: [abc]
      prefix: "_ot_"
      files:
        - lua/data/others.txt
    # 场景4:用于简繁转换的直接替换
    - option: [ s2t, s2hk, s2tw ]   #后面依赖这条流水线有一个开关为true这条流水线就能工作
      mode: replace         # <--- 替换原候选模式
      comment_mode: append
      sentence: true        # <--- 句子级别替换
      tags: [abc]
      prefix: "_s2t_"
      files:
        - lua/data/STCharacters.txt
        - lua/data/STPhrases.txt
    - option: s2hk
      mode: replace         # <--- 替换原候选模式
      comment_mode: append
      sentence: true        # <--- 句子级别替换
      tags: [abc]
      prefix: "_s2hk_"
      files:
        - lua/data/HKVariants.txt
    - option: s2tw
      mode: replace         # <--- 替换原候选模式
      comment_mode: append
      sentence: true        # <--- 句子级别替换
      tags: [abc]
      prefix: "_s2tw_"
      files:
        - lua/data/TWVariants.txt
# 字符集过滤lua
# a,通用规范汉字表
# b,GB2312,
# g,GBK,
# T,Big5,(台港澳常用)
# j,简体,OpenCC (t2s)
# f,通用繁体,OpenCC (s2t)
# h,香港繁体, OpenCC (s2hk)
# t,台湾繁体, OpenCC (s2tw)
# u,基本区,U+4E00 - U+9FFF
# A-I,扩展 A-I 区,U+3400 及各扩展区 (支持到 Ext-I)
# c,兼容区汉字
# 你可以通过黑白名单微调你自己每个开关下面的字符集过滤清单,主数据库位于lua/charset.reverse.bin不可编辑
# 你可以按上面提到的规则代号在base处填写上基础集,还可以在每一个开关的开白名单设置微调数据,就像默认添加的字符集过滤在8105基础上新增了一些
# 你可以定义多个开关,多个开启状态的开关求并集,比如charset_filter开着,s2hk也开着,那么就会显示这两个集合的所有汉字
# 优雅的地方在于s2hk开着,charset_filter关着 我们照样能使用 港繁能用到的所有字,是真正的本体,无关字会被过滤,而当都开着则是享受简体转换成繁体的后的结果
# 这个设计真正的兼容了简繁转换与字符集过滤的矛盾,还能满足用户多种自定义需求,你可以在开关增加类别,并在charset下面新增option类去选择按照字区去过滤,等多种组合方式
charset:
  - option: charset_filter
    base: a  #可以填入多个类别如aj
    addlist:
      - "诶濛硷氽尛躝〇冇吔咗囧屌鲶芶咲畑垅𰻝𰻞龍朙"
    blacklist: []
  - option: s2t
    base: fa
    addlist: []
    blacklist: []
  - option: s2hk
    base: ha
    addlist: []
    blacklist: []
  - option: s2tw
    base: ta
    addlist: []
    blacklist: []

自定义了时间格式和排序,没用过农历或者节气之类,只用sj、rq和dj这三个,同时稍微统一了一下三者格式的顺序。

#shijian:仅支持修改前缀,为了固定习惯,后两码写死,如有需求lua中修改
#时间:osj 或者 /sj
#日期:orq 或者 /rq
#农历:onl 或者 /nl
#星期:oxq 或者 /xq
#今年第几周:oww 或者 /ww
#节气:ojq 或者 /jq
#日期+时间:odt 或者 /dt
#时间戳:ott 或者 /tt
#大写N日期:N20250315 或者N0312不带年
#节日:ojr 或者 /jr
#问候模板:/day 或者 oday
# 通用日期时间格式化函数(供 /rq、/sj、/dt、N0101、N20150101 场景复用)
# 支持转义:
#   \X       —— 转义单个字符 X,按字面量输出(如 \Y \m \H 等)
#   [[...]]  —— 区块整体按字面量输出
#
# 约定占位符:
# 【日期】
#   Y  四位年份           0000-9999  例:2025
#   y  两位年份           00-99      例:25
#   m  月(前导零)        01-12      例:02
#   n  月(不带前导零)     1-12       例:2
#   d  日(前导零)        01-31      例:09
#   j  日(不带前导零)     1-31       例:9
#
# 【时间】
#   H  24小时(前导零)   00-23      例:08
#   G  24小时(不带零)   0-23       例:8
#   I  12小时(前导零)   01-12      例:08
#   l  12小时(不带零)   1-12       例:8   (注意是小写 L)
#   M  分钟(前导零)     00-59      例:05
#   S  秒(前导零)       00-59      例:09
#   p  am/pm(小写)     am / pm
#   P  AM/PM(大写)     AM / PM
# 【时区】
#   O  带冒号格式        +08:00、-04:30、+05:45
#   o  不带冒号格式      +0800、-0430、+0545
#   A  中文时段    凌晨 / 上午 / 中午 / 下午 / 晚上
date_formats:
  - "Y年n月j日"
  - "Y.m.d"
  - "Y-m-d"
  - "Ymd"
  - "n月j日"
time_formats:
  - "H时M分"
  - "H:M"
  - "H-M-S"
  - "HM"
  - "H点M分S秒"
datetime_formats:
  - "Y年m月d日H时M分"
  - "Y-m-d H:M:S"
  - "Y-m-d-H-M-S"
  - "YmdTHMS"
  - "Y年m月d日 H点M分S秒"

pro版本方案默认关闭自动调频,与上游保持一致

# 主翻译器,拼音
translator:
  dictionary: wanxiang_pro          # 挂载词库 wanxiang.dict.yaml
#  packs: user                  #导入根目录下名称为user.dict.yaml的自定义固定词典
#  prism: double_pinyin          # 多方案共用一个词库时,为避免冲突,需要用 prism 指定一个名字。
  enable_completion: true  # 启用候选词补全
#  user_dict: zrm.userdb  # 用户词典的文件名称
#  db_class: tabledb  #开启后就不会产生zrm.userdb这样的文件夹,会直接输出文本zrm.txt同时无法使用同步能力
  enable_user_dict: false # 是否开启自动调频
  contextual_suggestions: false  #模型用来开启词组权重预测,效果一般关闭
  max_homophones: 8
  max_homographs: 8
#  disable_user_dict_for_patterns:
#    - "^[a-z]{1,6}"    #基本的6码3字不调频
  enable_correction: false #是否开启自动纠错
  initial_quality: 4       # 初始质量拼音的权重应该比英文大
  spelling_hints: 50             # 将注释以词典字符串形式完全暴露,通过super_comment.lua完全接管,灵活配置。
  always_show_comments: true    # Rime 默认在 preedit 等于 comment 时取消显示 comment,这里强制一直显示,供super_comment_preedit.lua做判断用。
  comment_format:  #将注释以词典字符串形式完全暴露,通过super_comment.lua完全接管,灵活配置。

为用户自定义短语文件改个其他名会方便很多,避免被替换掉。我把 custom_phrase 改成了 tomoe_phrase

# 自定义短语
custom_phrase:
  dictionary: ""
  user_dict: tomoe_phrase  # 需要手动创建 custom_phrase.txt 文件
  db_class: stabledb
  enable_completion: false # 补全提示
  enable_sentence: false   # 禁止造句
  initial_quality: 99      # custom_phrase 的权重应该比 pinyin 和 wanxiang_en 大

auto_phrase.lua总是会尝试使用wanxiang_english方案,这里保留需要的dictionary路径避免报错。

# 中文、英文、数字、符号等混合词汇
wanxiang_english:
  dictionary: wanxiang_english

由于我把其他的东西删得差不多了,所以只有更改后的符号、时间等统一触发键 ; 与添加自造词键 “

# 处理符合特定规则的输入码,如网址、反查
recognizer:
  import_preset: default  # 从 default.yaml 继承通用的
  patterns:  # 再增加方案专有的:
    punct: "^;([0-9]|10|[A-Za-z]+)$"    # 响应 symbols.yaml 的 symbols
    add_user_dict: "^``[A-Za-z/`']*$"      #自造词

与上游保持一致

# 标点符号
# punctuator 下面有三个子项:
# 设置为一个映射,就自动上屏;设置为多个映射,如 '/' : [ '/', ÷ ] 则进行复选。
#   full_shape: 全角没改,使用预设值
#   half_shape: 标点符号全部直接上屏,和 macOS 自带输入法的区别是
#              '|' 是半角的,
#              '~' 是半角的,
#              '`'(反引号)没有改成 '·'(间隔号)。
#   symbols    Rime 的预设配置是以 '/' 前缀开头输出一系列字符,自定义的修改 symbols.yaml
punctuator:
  digit_separators: ":,."  #数字分隔符
  __include: wanxiang_symbols:/symbol_table         # 从 symbols.yaml 导入配置

# 从 default 继承快捷键
key_binder:
  import_preset: default  # 从 default.yaml 继承通用的

时间触发键 ;

# Lua 配置: shijian.lua 的引导符,涉及:日期、时间、节日、节气、生日、问候模板等功能
  shijian_keys: [";"]

自定义按键分布。我把 tabshift+tab 设置成了翻页,然后 -= 设置成了移动词

bindings:             # 也可以再增加方案专有的
    - { when: has_menu, accept: Shift+Tab, send: Page_Up }
    - { when: has_menu, accept: Tab, send: Page_Down }
# Option/Alt + ←/→ 切换光标至下/上一个拼音
    - { when: always, toggle: ascii_punct, accept: Control+Shift+3 }              # 切换中英标点
    - { when: always, toggle: ascii_punct, accept: Control+Shift+numbersign }     # 切换中英标点
    - { when: always, toggle: s2t, accept: Control+Shift+4 }       # 切换简繁
    - { when: always, toggle: s2t, accept: Control+Shift+dollar }  # 切换简繁
    - { when: always, toggle: full_shape, accept: Control+Shift+1 }             # 切换全半角
    - { when: always, toggle: full_shape, accept: Control+Shift+exclam }       # 切换全半角
    - { when: composing, accept: minus, send: Shift+Left }
    - { when: composing, accept: equal, send: Shift+Right }
    - { when: composing, accept: Control+w, send: Control+Delete }

这一行的作用是输入音码之后通过双击 ” 自动进入造词模式

# 当输入编码后发现没有词,则通过双击``进入造词模式而且不需要删除编码,这个功能与``直接引导相呼应相配合
    - { match: "^.*`$", accept: "`", send_sequence: '{BackSpace}{Home}{`}{`}{End}' }

与上游保持一致

editor:
  bindings:
    space: confirm                        # 空格键:上屏候选项
    Return: commit_raw_input              # 回车键:上屏原始输入
    Control+Return: commit_script_text    # Ctrl+回车键:上屏变换后输入(经过 preedit转换的)
    Control+Shift+Return: commit_comment  # Ctrl+Shift+回车键:上屏 comment
    BackSpace: revert                     # 退格键:向前删除(撤消上次输入)
    Delete: delete                        # Delete 键:向后删除
    Control+BackSpace: back_syllable      # Ctrl+退格键:删除一个音节
    Control+Delete: delete_candidate      # Ctrl+Delete键:删除或降权候选项
    Escape: cancel                        # Esc 键:取消输入

navigator:
  bindings:
    Left: left_by_char_no_loop
    Right: right_by_char_no_loop
    Shift+Left: left_by_syllable
    Shift+Right: right_by_syllable


# 拼写设定
speller:
# table_translator翻译器,支持自动上屏。例如 “zmhu”可以自动上屏“怎么回事”
#  auto_select: true
#  auto_select_pattern: ^[a-z]+/|^[a-df-zA-DF-Z]\w{3}|^e\w{4}

这里用于设置什么按键可以直接上屏,由于我们需要 ; 触发时间或符号, ` 触发造词,因此将这俩加进去,把斜杠取出来。

# 如果不想让什么标点直接上屏,可以加在 alphabet,或者编辑标点符号为两个及以上的映射
  alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA1234567890`;
  # initials 定义仅作为始码的按键,排除 ` 让单个的 ` 可以直接上屏
  initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA;

与上游保持一致

delimiter: " '"  # 第一位<空格>是拼音之间的分隔符;第二位<'>表示可以手动输入单引号来分割拼音。
  visual_delimiter: " "  # super_preedit.lua配置:是否让分隔符号跟着一起转换,例如nǐ'hǎo 在实际使用中表现出视觉拥挤,我们可以让delimiter平时是'转换为拼音的时候使用空格nǐ hǎo,更符合实际。

启用小鹤双拼

algebra:
    __patch:
      #- 模糊音             #模糊音选择性开启
      - wanxiang_algebra:/pro/小鹤双拼     #拼音转双拼码
      - wanxiang_algebra:/pro/间接辅助     #辅助码部分

与上游保持一致

user_dict_set:
  dictionary: wanxiang_pro
  initial_quality: 2.5
  enable_completion: false
  enable_sentence: false
  core_word_length: 4          # >0 启用,按段学词 + 相邻段拼接
  max_word_length: 7           # >0 启用,过长短语不记整词,只加元素权重
  contextual_suggestions: false
  max_homophones: 8
  max_homographs: 8
  spelling_hints: 50
  comment_format:
  enable_user_dict: true
  user_dict: zc


  # 自定义词典加词(ac引导)
add_user_dict:
  tag: add_user_dict
  dictionary: wanxiang_pro
  initial_quality: -1
  user_dict: zc
  enable_completion: true # 提前显示尚未输入完整码的字〔仅 table_translator 有效〕
  enable_user_dict: true
  spelling_hints: 50
  enable_auto_phrase: true    # lua造词功能,在custom开启,相关功能位于auto_phrase.lua,开启后:模型能造的句子不造词,现有的词不造词,只造词库没有的,选词可造词
  comment_format:
  prefix: "``"
  tips: "〔开始造词〕"

squirrel.custom.yaml

这个和 weasel.custom.yaml 都没啥好说的,外观配置罢了。

patch:
  show_notifications_when: appropriate
  show_notifications_via_notification_center: true
  app_options: {}
  style:
    inline_preedit: true    # 在文本框顯示輸入串
    inline_candidate: false # 在文本框顯示首選項
    translucency: true      # 透明度總開關

    # 淺色主题
    color_scheme: wechat
    # 深色主题
    color_scheme_dark: apathy

    # 默認界面設置 (會被具體主題覆寫)
    font_point: 14
    font_face: LXGW WenKai
    corner_radius: 5
    # hilited_corner_radius: 5
    line_spacing: 8
    hilite_spacing: 6
    spacing: 12
    text_orientation: horizontal  # horizontal | vertical

  preset_color_schemes:
    wechat:
      name: "高仿微信输入法"
      author: "Lufs X <i@isteed.cc>"
      
      font_face: "PingFangSC-Regular"
      font_point: 18
      label_font_face: "PingFangSC-Regular"
      label_font_point: 16
      comment_font_face: "PingFangSC-Regular"
      comment_font_point: 16
      
      candidate_format: "%c\u2005%@"
      candidate_list_layout: linear
      text_orientation: horizontal
      inline_preedit: true
      
      corner_radius: 7
      hilited_corner_radius: 7
      border_height: -2
      
      color_space: display_p3
      back_color: 0xFFFFFF
      border_color: 0xFFFFFF
      candidate_text_color: 0x444444
      comment_text_color: 0x8E8E8E
      label_color: 0x888785
      hilited_candidate_back_color: 0xaf9a23
      hilited_candidate_text_color: 0xFFFFFF
      hilited_comment_text_color: 0xF0F0F0
      hilited_candidate_label_color: 0xFFFFFF
      text_color: 0xFFFFFF
      hilited_text_color: 0xD8000000
    
    apathy:
      name: 冷漠/Apathy
      author: LIANG Hai
      candidate_list_layout: linear  # 水平排列
      inline_preedit: true #单行显示,false双行显示
      candidate_format: "%c\u2005%@\u2005"  # 编号 %c 和候选词 %@ 前后的空间
      corner_radius: 5  #候选条圆角
      border_height: 0
      border_width: 0
      back_color: 0xFFFFFF  #候选条背景色
      font_face: "PingFangSC-Regular,HanaMinB"  #候选词字体
      font_point: 16  #候选字词大小
      text_color: 0x424242  #高亮选中词颜色
      label_font_face: "STHeitiSC-Light"   #候选词编号字体
      label_font_point: 12   #候选编号大小
      hilited_candidate_text_color: 0xEE6E00  #候选文字颜色
      hilited_candidate_back_color: 0xFFF0E4  #候选文字背景色
      comment_text_color: 0x999999  #拼音等提示文字颜色
      
      
  app_options:
    com.google.Chrome:
      # 規避 https://github.com/rime/squirrel/issues/435
      inline: true
    ru.keepcoder.Telegram:
      # 規避 https://github.com/rime/squirrel/issues/475
      inline: true

weasel.custom.yaml

patch:
  app_options:
    firefox.exe:
      inline_preedit: true # 行内显示预编辑区:规避 <https://github.com/rime/weasel/issues/946>
  style:
    color_scheme: wechat      # 默认配色方案

    # 全局字体
    # 格式:字体1:起始码位:结束码位:字重:字形,字体2……,字体会依次 fallback
    # 详细设定请参考 <https://github.com/rime/weasel/wiki/字體設定>
    font_face: "Segoe UI Emoji, HarmonyOS Sans SC, SF Pro, Noto Color Emoji"
    label_font_face: "HarmonyOS Sans SC"       # 标签字体
    comment_font_face: "HarmonyOS Sans SC"     # 注释字体
    font_point: 12                           # 全局字体字号
    label_font_point: 11                     # 标签字体字号,不设定 fallback 到 font_point
    comment_font_point: 11                   # 注释字体字号,不设定 fallback 到 font_point

    inline_preedit: true                     # 行内显示预编辑区:true;false
    preedit_type: composition                # 预编辑区内容:composition(编码); preview(选中的候选);preview_all(全部候选)

    fullscreen: false                        # 候选窗口全屏显示:true;false
    horizontal: true                         # 候选项横排:true;false
    vertical_text: false                     # 竖排文本:true;false
    # text_orientation: horizontal           # 文本排列方向,效果和 `vertical_text` 相同:horizontal;vertical
    vertical_text_left_to_right: false       # 竖排方向是否从左到右:true;false
    vertical_text_with_wrap: false           # 文本竖排模式下,自动换行:true;false
    vertical_auto_reverse: false             # 文本竖排模式下,候选窗口位于光标上方时倒序排列:true;false

    label_format: "%s"                       # 标签字符:例如 %s. 效果为 1. 2. 3. ....
    mark_text: ""                           # 标记字符,显示在选中的候选标签前,需要在配色方案中指定颜色;如该项为空字符串 "" 而配色方案中 hilited_mark_color 非透明色,则显示 Windows 11 输入法风格标记
    ascii_tip_follow_cursor: false           # 切换 ASCII 模式时,提示跟随鼠标,而非输入光标
    enhanced_position: true                  # 无法定位候选框时,在窗口左上角显示候选框:true;false
    display_tray_icon: false                 # 托盘显示独立于语言栏的额外图标:true;false
    antialias_mode: default                  # 次像素反锯齿设定:default;force_dword;cleartype;grayscale;aliased
    candidate_abbreviate_length: 30          # 候选项略写,超过此数字则用省略号代替。设置为 0 则不启用此功能
    # mouse_hover_ms: 0                      # ! 已弃用。鼠标悬停选词响应时间(ms),设置为 0 时禁用该功能
    hover_type: semi_hilite                  # 鼠标在候选窗口悬停时:none(无动作);hilite(选中鼠标下的候选);semi_hilite(高亮鼠标下的候选)

    paging_on_scroll: true                   # 在候选窗口上滑动滚轮的行为:true(翻页);false (选中下一个候选)
    click_to_capture: false                  # 鼠标点击候选项,创建截图:true;false

    layout:
      max_height: 0
      max_width: 1200
      min_width: 10
      margin_x: 10
      margin_y: 8
      candidate_spacing: 24
      hilite_spacing: 6
      hilite_padding: 3
      hilite_padding_x: 5
      corner_radius: 8
      round_corner: 8
      shadow_radius: 4

  preset_color_schemes:
    wechat:
      name: "微信/Wechat"
      text_color: 0x424242
      label_color: 0x999999
      back_color: 0xFFFFFF
      border_color: 0xFFFFFF
      comment_text_color: 0x999999
      candidate_text_color: 0x3c3c3c
      hilited_comment_text_color: 0xFFFFFF
      hilited_back_color: 0xaf9a23
      hilited_text_color: 0xFFFFFF
      hilited_label_color: 0xFFFFFF
      hilited_candidate_back_color: 0xaf9a23
      shadow_color: 0x20000000

附言:为什么移除lua脚本

我把整套lua脚本发给deepseek,让其帮我看看哪些最可能导致weasel不停dump,这是它给我的回答:

针对你提供的整套万象拼音 Lua 脚本,经过逐文件审查,以下几份 Lua 最有可能导致 Weasel 不停生成 dump 文件或频繁崩溃:

shijian.lua — 极高嫌疑
死循环风险:nl_shengri2 函数中的 while nl_shengri(y, m, d) == -1 do y = math.floor(y + 1) end
当 nl_shengri 因内部逻辑错误(如日期转换异常)始终返回 -1 时,该循环会无限递增年份,耗尽 Lua 整数或进入超长时间计算,导致 Weasel 进程卡死,被系统强制终止生成 dump。
触发场景:任何需要查询农历节日、节气或 /jr /day 等命令的输入,都会调用此函数。
建议修复:添加最大年份阈值(如当前年+100),超过即退出循环并返回无效提示。

super_lookup.lua — 高嫌疑
递归溢栈:match_fuzzy_recursive 函数使用深度递归进行模糊匹配,且未限制递归深度。当用户进行复杂反查操作(如输入较长辅码)时,递归层级可能瞬间突破 Lua 栈限制(默认约 200 层),直接引发栈溢出崩溃。
频繁调用:该函数在反查过滤阶段 func 中被调用,每次按键都会执行,任何异常输入都可能触发崩溃。
建议修复:改为非递归算法(如迭代或动态规划),或加入递归深度限制并提前终止。

super_calculator.lua — 中度嫌疑
潜在死循环:24 点计算 solve24 中嵌套多层循环,以及解方程函数(如 solveQuarticEquation)存在复杂的条件分支和大量运算。虽然单独执行不太会崩溃,但若与 V 键模式持续交互,可能导致超时或内存压力过大,引发间接崩溃。
高频调用:计算器在 V 模式下每次按键都会触发完整表达式求值,若表达式异常可能产生意想不到的死锁。
建议修复:为关键循环添加执行时间或迭代次数上限,采用尾调用优化或提前退出。

auto_phrase.lua / user_predict.lua — 低中度嫌疑
DB 操作异常:频繁操作 LevelDB 用户词典(Memory:update_userdict),若用户词典文件损坏或读写冲突,可能导致底层 C++ 抛出异常,触发 dump。
user_predict.lua 的清理命令:/clean 时全量遍历 DB 并批量删除,数据量大时可能占用过多 CPU / IO,间接影响稳定性。
建议修复:为数据库操作增加 .pcall 保护,并限制单次操作数量。

由于我并未用过农历或节气的日期计算功能,因此 shijian.lua 不是罪魁祸首。由于我很少使用反查和计算器功能,因此移除了相应的lua。

编辑于 2026-05-06 · 著作权归作者所有