换了win10后,极点就不好用了,看上了自定义更强的小狼毫,太难掌控了,只能先用点皮毛。
目前的理解,感觉很有特色的就是能根据候选项自定义提示内容,并且还能用Ctrl-Shift-Enter上屏提示内容
比如我自定义了个词组indirect,并设置了其提示内容为Excel公式:indirect("$A$2:$E$"&COUNTA($A:$A))
当我想输入公式时,先按↓移到第2条,再按Ctrl-Shift-Enter即可(不知道能否设置为Ctrl-Shift-2直接上屏)
回到正题:五笔词库需慢慢完善,所以用AutoHotkey写了脚本一键添加选中内容。
本人把小狼毫词库分为:
- 单字:常用字,可能会添加用到的生僻字,因为临时生僻字暂时还不会
- 自带词组(不动)
- 用户词组(大部分修改的就是这个文件)
- 英语:(常用英语和【U盘】这样的词组)
在主dict.yaml里通过以下设置可导入wubi86.ci.dict.yaml等3个词库文件
import_tables: #导入的词典只导入词汇,会忽略YAML定义内容 - wubi86.ci - wubi86.eng - wubi86.user
下面放上ahk(v2)代码:
#SingleInstance Force ;添加选中内容到词库 F9:: add2Rime() return ;添加选中单词到词库 ;我词库分为单字fpSingle(常用字,可能会添加生僻字)、自带词组(不动)、用户词组fpUser(大部分修改)、英语fpEng(常用英语和【U盘】这样的词组) add2Rime() { ;用户目录 dirUser if !DirExist(dirUser := RegRead("HKEY_CURRENT_USERSoftwareRimeWeasel", "RimeUserDir")) { msgbox("用户目录不存在") return } fpSingle := dirUser . "wubi86.hy.dict.yaml" ;单字词库 fpUser := dirUser . "wubi86.user.dict.yaml" ;用户词库 fpEng := dirUser . "wubi86.eng.dict.yaml" ;英语词库 ;软件安装目录 dirSoft(里面有 WeaselServer.exe 和 WeaselDeployer.exe) if !DirExist(dirSoft := RegRead("HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeRimeWeasel", "WeaselRoot")) { msgbox("软件安装目录不存在") return } ;复制选中内容 clipSave := ClipboardAll clipboard := "" send("{ctrl down}c{ctrl up}") if !ClipWait(0.5) { msgbox("没复制到内容",,262144) clipboard := clipSave return } ;过滤无效内容 if !strlen(word := trim(clipboard, "`t`r`n ")) ;空白内容 return if (word ~= "(wW|Ww)") ;【U盘】这种词不处理 return ;开始处理 if (word ~= "^w+$" && FileExist(fpEng)) ;全字母(【U盘】这种手动添加) FileAppend(format("{1}`t{2}`r`n", word,StrLower(substr(word,1,4))), fpEng, "utf-8") else ;中文 { bm := this.getCode(word) ;若有问题 getCode 会直接退出 if (strlen(word) > 1) ;多字 { if !FileExist(fpUser) { msgbox(format("词库不存在`n{1}", fpUser)) return } if (FileRead(fpUser, "utf-8") ~= "`n" . word . "`t") { msgbox("已存在词组") return } FileAppend(format("{1}`t{2}`t9`r`n", word,bm), fpUser, "utf-8") } else { if !FileExist(fpSingle) { msgbox(format("单字词库不存在`n{1}", fpSingle)) return } if (FileRead(fpSingle, "utf-8") ~= "`n" . word . "`t") { msgbox("已存在单字") return } FileAppend(format("{1}`t{2}`r`n", word,bm), fpSingle, "utf-8") } } if !ProcessExist("WeaselServer.exe") run(dirSoft . "WeaselServer.exe") run(format("{1}WeaselDeployer.exe /deploy", dirSoft)) } getCode(word) ;获取中文词组的86五笔编码 { if !(word ~= "^[x{4E00}-x{9FA5}]") _Debug.msgExit(word . "`n要求全中文", A_LineFile, A_LineNumber) ;修改4字以上的词组 if (strlen(word) >4) word := substr(word,1,3) . substr(word,-1) SplitPath(A_LineFile, , dir) strAll := FileRead(dir . "86五笔单字码表.txt") arr := [] loop parse, word { RegExMatch(strAll, "i)w+(?= " . A_LoopField . ")", m) arr.push(m[0]) } if (strlen(word) == 1) return arr[1] if (strlen(word) == 2) return substr(arr[1], 1, 2) . substr(arr[2], 1, 2) else if (strlen(word) == 3) return substr(arr[1], 1, 1) . substr(arr[2], 1, 1) . substr(arr[3], 1, 2) else return substr(arr[1], 1, 1) . substr(arr[2], 1, 1) . substr(arr[3], 1, 1) . substr(arr[4], 1, 1) }