rime / home

Rime::Home is home to Rime users and developers
https://rime.im
4.28k stars 231 forks source link

【求助】自定义特殊符号无法输入 #458

Open YakshaChien opened 4 years ago

YakshaChien commented 4 years ago

新建wubi86_jidian.custom.yamlsymbols.custom.yaml的五笔以及符号(直接复制自wubi86_jidian.yaml、symbol.yaml)的配置文件。

全角半角符号似乎还是用的预设默认的;

输出/jq/dn这类特殊符号的预设,候选项没能出来,只是显示/jq/dn

求教问题可能出在哪里?

symbol.yaml不贴出来了,就是默认的,而且也太长了。

wubi86_jidian.custom代码粘贴如下:

# Rime schema settings
# encoding: utf-8

schema:
  schema_id: wubi86_jidian
  name: "极点五笔86"
  version: "1.0"
  author:
    - 创始人 王永民先生
  description: |
    五笔字形 86 极点极爽版
  dependencies:
    - pinyin_simp

switches:
  - name: ascii_mode
    reset: 0
    states: [ 中文, 西文 ]
  - name: full_shape
    states: [ 半角, 全角 ]
  - name: extended_charset
    states: [ 常用, 扩展 ]
  - name: ascii_punct
    states: [ 。,, ., ]

engine:
  processors:
    - ascii_composer
    - recognizer
    - key_binder
    - speller
    - punctuator
    - selector
    - navigator
    - express_editor
  segmentors:
    - ascii_segmentor
    - matcher
    - abc_segmentor
    - punct_segmentor
    - fallback_segmentor
  translators:
    - punct_translator
    - reverse_lookup_translator
    - table_translator
    - lua_translator@date_translator # 自定义系统变量输出
    - history_translator@history
  filters:
#    - lua_filter@single_char_first_filter # 单字优先方法
# Z键重复
history:
  input: z
  size: 3
  initial_quality: 10000

speller:

  max_code_length: 4                    # 四码上屏
  auto_select: true                     # 自动上屏
  auto_select_unique_candidate: true    # 无重码自动上屏

translator:
  dictionary: wubi86_jidian             # 翻译器将调取此字典文件
  enable_charset_filter: true
  enable_sentence: false                # 开关语句模式
  enable_user_dict: false               # 是否开启用户词典(用户词典记录动态字词频,用户词)
  enable_encoder: true                  # 自动造词
  encode_commit_history: false          # 是否对已上屏的词自动上屏
  max_phrase_length: 10                 # 单词最大词长
  db_class: tabledb                     # userdb - 二进制 / tabledb - 人类语言
  disable_user_dict_for_patterns:       # z开头的输入忽略,对应下面的拼音反查,
    - "^z.*$"

reverse_lookup:
  dictionary: pinyin_simp
  prefix: "z"
  suffix: "'"
  tips: 【 拼音 】
  preedit_format:
    - xform/([nl])v/$1ü/
    - xform/([nl])ue/$1üe/
    - xform/([jqxy])v/$1u/

punctuator:
  import_preset: default

key_binder:
  import_preset: default

recognizer:
  import_preset: default
  patterns:
    reverse_lookup: "^z[a-z]*'?$"

patch:
  # 标点及特殊表情,引入 symbols.custom.yaml 文件,设定触发条件
  'punctuator/import_preset': symbols.custom
  'recognizer/patterns/punct': "^/([A-Z|a-z]*|[0-9]|10)$"
Ace-Who commented 4 years ago

可点击右下角 M↓ 按钮学习 Markdown 语法,了解如何包裹代码块。

要导入的预设不应是 *.custom,而应是源文件。*.custom 具体内容不明,无法确定全部问题。

YakshaChien commented 4 years ago

可点击右下角 M↓ 按钮学习 Markdown 语法,了解如何包裹代码块。

要导入的预设不应是 *.custom,而应是源文件。*.custom 具体内容不明,无法确定全部问题。

感谢,代码块已修改,平时这个不常用到,一时没想起来。 *.custom.yaml是直接复制自预设源文件,因为要以后往里面加入自定义的东西,所以用的这种形式,这种形式是RIME所允许的。而且,用源文件也是如问题里描述的一样的情况。

Ace-Who commented 4 years ago
  1. 导入 *.custom 文件的预设,是合法,但不合理,完全可以另外命名这个文件,如 my_symbols.yaml,哪怕 symbols_custom.yaml 也好。

  2. symbols.yaml 中有一个 patch 节点,本身不直接起作用,因为它不是补丁文件,但是如果将它复制到 symbols.custom.yaml,就会为 symbols.yaml 打上补丁,其中的 punctuator/import_preset: symbols 会导致递归地导入自身 punctuator 节点的配置,产生不可预料的问题。就算问题不出在这里,也将问题复杂化了。当然这不能解释为什么导入 symbols.custompunctuator 是无效的。

  3. *.custom.yaml 的内容,只有 patch 节点会被解析,其余内容不起作用,除非通过 __include__patch 等指令被引用。所以 wubi86_jidian.custom.yaml 为何这样写?由于它也有 schema 节点,可能也被当做方案源文件来处理(不确定 rime 的部署逻辑是否会这样),现在就有两个方案文件的 schema_id 相同了,这个冲突可能导致部署失败。是否确实失败就要查看错误日志了。

  4. 综合起来,*.custom 文件只应作为补丁文件来使用,其他用法不受保证,并会导致复杂的问题。