換了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_USER\Software\Rime\Weasel", "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_MACHINE\SOFTWARE\WOW6432Node\Rime\Weasel", "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 ~= "(\w\W|\W\w)") ;【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) }