Skip to content

pi314/ime-phonetic.vim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ime-phonetic.vim

ime-phonetic.vim 是 ime.vim 的 standalone 套件。

安裝及啟用

此 plugin 可同時做為注音及拼音輸入法使用。

安裝此 plugin 以後,請在 g:ime_plugins 裡面加上 'zhuyin'

let g:ime_plugins = ['zhuyin']

或是 pinyin

let g:ime_plugins = ['pinyin']

兩個 plugin 可以同時啟用,詞庫是共用的,記憶體使用量不會變成兩倍

使用

  • 關閉系統的輸入法,直接輸入注音/拼音,注音/拼音會直接出現在編輯區中
  • 選字
    • 若使用方向鍵( <Up> / <Down> )選詞,按下 Enter( <CR> )即可選字
    • 若使用 <C-n> / <C-p> 選詞則不需要再按其他按鍵
  • 按下 ' 可以只從第一個字開始選字,不會做任何的詞語搜尋
    • 再次按下 ' 可以重新使用詞語搜尋
  • 支援基本的模糊輸入
    • ㄏㄉ 可以產生 活動
    • hd 可以產生 活動
      • 註:同樣的詞,拼音的模糊搜尋會比注音慢一些
  • [注音] 按下 ;; 以後,可進入標點符號模式
    • 按下 , 可輸入
    • 按下 . 可輸入
    • 按下 : 可輸入
    • 輸出標點符號以後會自動回到注音中文模式
  • [拼音] 由於拼音只使用英文字母,故標點符號可以直接輸入,並會轉換成全型標點符號
  • [拼音] 若輸入後選單右方有數字出現,可以按下對應的數字來選字

設定

  • 設定快取的大小:

    let g:ime_phonetic_cache_size = 2000
    
    • ime-phonetic.vim 會對先前搜尋過的詞句做快取,以加速詞句搜尋
    • 快取並不會寫入檔案,關閉 Vim 以後就會消失
  • 自訂詞庫:

    let g:ime_phonetic_custom_table = '~/.phonetic.table'
    
    • 此設定沒有預設值,請在需要時自行設定

    • 加入的新詞會被排在第一順位

    • 詞庫檔案的格式為「詞 拼音」或是「詞 注音」:

      #這是註解
      妹紙 meizhi
      面癱 ㄇㄧㄢˋㄊㄢ_
      
      • 由於詞庫是共用的,所以用注音加入的詞,在拼音也可以輸入
      • 底線 (_) 可以用來代表空白字元
      • 若用拼音來定義新詞,聲調的資訊將會遺失

本套件仍然在開發中,有一些已知的問題,若發現問題或是有開發想法,歡迎開 issue。

詞庫

ime-phonetic.vim 的詞庫是由為 MIT License 授權的 小麥注音 轉換而來

轉換的 Makefile/script 在 這裡

實作細節

在 ime-phonetic.vim 之中,最關鍵的幾個演算法是符號切割、選字選詞與快取。

符號切割

使用者輸入了一串注音/拼音符號以後,這些符號需要先分組,每組的符號才能形成文字。

ime-phonetic.vim 把 所有的注音組合 以及 所有的拼音組合 以 VimScript 紀錄成一個 dict。

輸入的符號串依序被取出,並一個個接上 acc ; 若在加入新符號以後,仍有任意一個組合以 acc 開頭,則 acc 可以繼續累積。 反之,不包含新符號的 acc 被視為一個獨立的字組。

選字選詞與快取

在注音符號被分組成讀音以後,這些讀音需要選字選詞才能形成句字。

ime-phonetic.vim 使用了 Dynamic Programming,搭配詞庫中的詞頻來選詞。

這個方式類似 木條切割問題

不同之處在於,ime-phonetic 使用了 dict 而不是 2D array 來儲存 DP 的過程。

即使選詞已經完成,這個 DP 過程不會也被丟棄;它會被保留以加速下次的選字選詞。

根據 g:ime_phonetic_cache_size 的設定,超出大小以後,最舊的項目會被優先刪除

特別感謝

感謝 iblis 以及 Pellaeon 提供拼音輸入的使用者體驗。

授權

本軟體使用 2-clause BSD license 發佈,請參考 LICENSE.txt

Releases

No releases published

Packages

No packages published