Skip to content

变量算法:快速输入成句

tumuyan edited this page Sep 19, 2021 · 7 revisions

成句快速输入

我们往往需要输入一些固定的句子,可以称为“成句”,或者称为“全文背诵”、“xx圣经”、“刻进DNA里”的东西,或者叫做“定型文”、“小作文”、“发病”。

如何能快速输入这些内容呢?

  • 真正的强者:全文背诵,打字如飞,完全手打
  • 操作难度最低,人人都会的办法是:记住大概的内容,在有需求的时候直接在线搜索-复制-粘贴。
  • 稍微用心的话,把这些内容整理在一个文件中(可以是真实的文件,也可以是表格,笔记软件,或者其他什么东西),有需要的时候查找-复制-粘贴。
  • 更进一步的办法是,用剪贴板软件把复制的内容收藏起来,有需求的时候直接选择并粘贴。
  • 再进一步,就是对输入法的改造了。我们可以把大段的文本当作一个很长的词,在输入法的词库中添加进去,并且给他一个较短的编码,这样就可以快速输入了。

变量算法输入

但是这里仍然有些问题。有些成句只是固定的句式,其中部分内容是需要时常变更的。比如大家都很熟悉的营销号文案:

Github打不开是怎么回事呢?Github相信大家都很熟悉,但是Github打不开是怎么回事呢,下面就让小编带大家一起了解吧。 大家可能会很惊讶怎么会Github打不开呢?但事实就是这样,小编也感到非常惊讶。 这就是关于Github打不开的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

内容极其空洞,但是却不能使用上边的办法完成快速输入了,必须粘贴-修改-复制-粘贴。

操作不当还可能引发一些极其恶劣的影响,譬如给人发恋口上,却一不小心粘贴了别的女人的名字。

所以如何解决这个问题呢?在文本编辑器中逐次替换吗?不,我给出的解决方案是:为输入法引入变量算法。通过输入包含特定编码的文字,为输入法设置一个变量。当成句中包含变量的占位符时,自动替换占位符为设置的变量内容。

作为这个思路的创造者和实现者,我给这一解决办法的正式命名为“变量算法输入”,戏称”舔狗.lua“。

解决思路

那么使用什么作为变量占位符呢?我分析了一些中英文词条和语料,认为oo和xx是常见的指代某事物的符号,用来当作占位符有天然的合理性。另一方面交错大小写的形式,不会与英语编码冲突,故词条中使用了Oo和Xx作为变量占位符,得到了这样的词条编码:

OoXx是怎么回事呢?Oo相信大家都很熟悉,但是OoXx是怎么回事呢,下面就让小编带大家一起了解吧。
大家可能会很惊讶怎么会OoXx呢?但事实就是这样,小编也感到非常惊讶。
这就是关于OoXx的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦! _Oo shi zen mo hui shi ne

那又该如何设置变量呢?我又分析了拼音和常用英语,发现无论全拼还是简拼,或者英语输入,都不会连续输入oo和ii这两个码为开头的词,所以我把oo和ii当成输入变量的按键。

通过一系列讨论、编程、测试、使用的动作,最终得到了现有的代码,而设置变量的操作方式为:

输入内容编码=oo来设置变量oo的值,输入内容编码=ii来设置变量xx的值。 如果需要设置的变量值并非首选词,在输入第二个o之前选择候选词即可。如果需要设置的变量值包含英语,切换到英文输入状态即可。而在最终使用输入成句时,和普通输入长句方法一样,输入简拼oszmhsn,即可完成长句上屏。

似乎有个为渣男推脱的说法,大致意思是再花心的男人,也是一心一意面对当下的女性的——只要你没有同时在d几个人,使用变量算法发送长句,就绝不会翻车!

如果没有使用打包方案,如何增加这个功能呢?

  1. 词库增加用Oo和Xx作为变量占位符的词条编码,可以参考 https://github.com/tumuyan/rime-pinyin-simp/blob/master/others/pinyin_simp_custom.dict.yaml
  2. 下载文件并放到用户目录的lua文件夹内 https://github.com/tumuyan/rime-pinyin-simp/blob/master/lua/melt.lua
  3. 如果用户目录没有rime.lua文件,直接下载文件并放到用户目录下; 否则下载文件并复制文件内容,增加到rime.lua文件内 https://github.com/tumuyan/rime-pinyin-simp/blob/master/rime.lua
  4. 修改方案文件:

令输入方案对=生效
   speller/alphabet改为 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA=
     
   speller/algebra增加如下内容处理大小写和_
      derive/(.+)/\L/
      abbrev/_([a-zA-Z])(.*)//
      abbrev/_(.+)//

或者在custom中写:
  "speller/algebra/@next0": derive/(.+)/\L$1/
  "speller/algebra/@next1": abbrev/_([a-zA-Z])(.*)/$1/
  "speller/algebra/@next2": abbrev/_([a-zA-Z])(.*)/$\L1/
  "speller/algebra/@next3": abbrev/_(.+)/$1/
  "speller/algebra/@next4": abbrev/_(.+)/\L$1/

令等号不上屏
  "key_binder/bindings":增加
    - {accept: equal, send: "=", when: has_menu}
   
启用lua函数
   engine/filters/增加 lua_filter@oo_filter
   engine/processors/增加 lua_processor@oo_processor

致谢

  • 非常感谢 @shewer 在 https://github.com/hchunhui/librime-lua/issues/125 中的回复,在上述issue中我学到了非常多东西——在此之前,我只会懵懵懂懂地使用lua_filter,全然不可想象lua_processor能够做到什么样的事情。
  • 也非常感谢同文QQ群里的史莱姆,和我相互激励,分享bug,各自写出了属于自己的”舔狗lua“。也感谢其他群友的支持和帮助。
  • 最后再感谢开源小鹤https://github.com/amorphobia/openfly ,我一开始根本不知道有哪些lua API,小鹤的代码给了我非常多的参考。