输入法全半角的讨论

最近借助AI在折腾fcitx5-rime的配置,迁移到了雾凇拼音rime-ice,总体非常智能,体验很好,但是关于全半角问题似乎在所有rime配置的默认配置中,都有一些让我不太好理解、用起来不顺手的地方。

默认的全半角设定:

  • 全角模式下,所有英语字母及标点都是全角
  • 半角模式下,所有英语字母及标点都是半角

这带来的问题是,在输入中文西文混排的内容时,西文字母会变成全角,如:

deepseek大语言模型

以及在输入英语+标点时,会出现西文字母+中文标点的情况。

我的想法则是:

  • 中文输入模式下,所有标点符号都是全角(部分特殊符号如@、#、/、*等除外)
  • 西文输入模式下,所有标点符号都是半角

然而在rime的框架下,输入模式全角/半角字符 以及 全角/半角标点 似乎是各自独立的?

对此,我的解决方案是,始终使用半角模式,这样可以确保在西文输入状态下,总是能够输出正确的字母与符号;在中文输入模式中,则通过配置文件进行映射,把需要的西文半角标点映射为我需要的全角标点符号。

不知道论坛内大佬们还有没有什么更好的解决方案分享一下?

另附,我自己的double_pinyin_flypy.custom.yaml

patch:
  translator/preedit_format: []
  switches:
    - name: ascii_mode
      states: [ 中, A ]
    - name: ascii_punct
      states: [ 半角标点, 全角标点 ]
      reset: 0
    - name: traditionalization
      states: [ 简, 繁 ]
    - name: emoji
      states: [ 💀, 😄 ]
      reset: 1
    - name: full_shape
      states: [ 半角, 全角 ]
      reset: 1
    - name: search_single_char
      states: [ 正常, 单字 ]
      abbrev: [ 词, 单 ]

  punctuator:
    full_shape:
      ' ' : { commit: ' ' }
      ',' : { commit: , }
      '.' : { commit: 。 }
      '<' : [ 《, 〈, «, ‹ ]
      '>' : [ 》, 〉, », › ]
      '/' : [ /, ÷ ]
      '?' : { commit: ? }
      ';' : { commit: ; }
      ':' : { commit: : }
      '''' : { pair: [ '‘', '’' ] }
      '"' : { pair: [ '“', '”' ] }
      '\' : [ 、, \ ]
      '|' : [ ·, |, '§', '¦' ]
      '`' : `
      '~' : ~
      '!' : { commit: ! }
      '@' : [ @, ☯ ]
      '#' : [ #, ⌘ ]
      '%' : [ %, '°', '℃' ]
      '$' : [ ¥, '$', '€', '£', '¥', '¢', '¤', ₩ ]
      '^' : { commit: …… }
      '&' : &
      '*' : [ *, ·, ・, ×, ※, ❂ ]
      '(' : (
      ')' : )
      '-' : -
      '_' : ——
      '+' : +
      '=' : [ =, 々, 〃 ]
      '[' : [ 「, 【, 〔, [ ]
      ']' : [ 」, 】, 〕, ] ]
      '{' : [ 『, 〖, { ]
      '}' : [ 』, 〗, } ]
    half_shape:
      ',' : { commit: , }
      '.' : { commit: 。 }
      # '<' : [ 《, 〈, «, ‹ ]
      # '>' : [ 》, 〉, », › ]
      '<' : { commit: 《 }
      '>' : { commit: 》 }
      # '/' : [ 、, 、, '/', /, ÷ ]
      '/' : { commit: '/' }
      '?' : { commit: ? }
      ';' : { commit: ; }
      ':' : { commit: : }
      "'" : { pair: [ '「', '」' ] }
      '"' : { pair: [ '『', '』' ] }
      # '\' : [ 、, '\', \ ]
      '\' : { commit: 、 }
      # '|' : [ ·, ・, '|', |, '§', '¦', '‖' ]
      '|' : { commit: '|' }
      # '`' : [ '`', ‵, ‶, ‷, ′, ″, ‴, ⁗ ]
      '`' : { commit: '`' }
      # '~' : [ '~', ~, ˜, ≈, ≋, ≃, ≅, ≇, ∽, ⋍, ≌, ﹏, ﹋, ﹌ ]
      '~' : { commit: '~' }
      '!' : { commit: ! }
      # '@' : [ '@', ©, ®, ℗ ]
      '@' : { commit: '@' }
      # '#' : [ '#', № ]
      '#' : { commit: '#' }
      # '%' : [ '%', %, '°', '℃', ‰, ‱, ℉ ]
      '%' : { commit: '%' }
      # '$' : [ ¥, '$', '€', '£', '¥', '¢', '¤', ₩ ]
      '$' : { commit: ¥ }
      '^' : { commit: …… }
      '&' : '&'
      # '*' : [ '*', *, ·, ・, ×, ※, ❂, ⁂, ☮, ☯, ☣ ]
      '*' : { commit: '*' }
      '(' : (
      ')' : )
      '-' : '-'
      '_' : ——
      '+' : '+'
      # '=' : [ '=', 々, 〃 ]
      '=' : '='
      # '[' : [ 「, 【, 〔, [ ]
      # ']' : [ 」, 】, 〕, ] ]
      # '{' : [ 『, 〖, { ]
      # '}' : [ 』, 〗, } ]
      '[' : { commit: 〔 }
      ']' : { commit: 〕 }
      '{' : { commit: { }
      '}' : { commit: } }

懵逼,我咋感觉默认就是这样,难道你从中文模式切到西文之后,再输入英文 abc,. 会变成 abc,.

是的,rime的默认行为好像就是这样的。

我小狼毫用的魔然方案,不是这个效果哇

做中文输入方案的应该没人忍得了默认全角英文

我除了打全角空格,其他时候不会切换到全角模式。不知楼主用全角模式是为了什么?

中文的句号、逗号、问号、引号等等应该都是全角才对呀?

EDIT:

我去,你是对的,其实只要开半角模式就是了,中文下半角模式的感叹号问号句号逗号也是全角的