Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IME in Vim
Search
NAKAI Tsuyoshi
April 04, 2024
0
150
IME in Vim
@Dena.vim#2
NAKAI Tsuyoshi
April 04, 2024
Tweet
Share
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
230
The Language of Interfaces
destraynor
162
26k
Six Lessons from altMBA
skipperchong
29
4.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
77
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Balancing Empowerment & Direction
lara
5
880
Odyssey Design
rkendrick25
PRO
1
490
Transcript
IME in Vim uga-rosa 2024/02/29 @ DeNA.vim#2
自己紹介 中井 剛志 (uga-rosa) https://github.com/uga-rosa https://zenn.dev/uga_rosa 24卒。専攻は化学系 Neovimユーザー3年目 自作プラグイン ccc.nvim
denippet.vim etc.
IMEとSKK
IME (Input Method Editor) キーボードから直接入力できない文字を入力するためのソフトウェア CJKV文字 (東アジア圏) MS-IME, 日本語IM (Mac),
Google日本語入力, ATOK 連文節変換 自動的に文節の区切りを判定し、複数の文節から成る文章をまとめて変換 こっきょうのながいとんねるをぬけるとゆきぐにであった。 ↓ 国境の長いトンネルを抜けると雪国であった。 無数にあるパターン 機械学習
SKK (Simple Kana to Kanji conversion program) オリジナルの実装はemacs 連文節変換なし ユーザーが区切り
(変換の開始、終了、送りがな) を明示 Kokkyou noNagaITonnneruqwoNuKerutoYukiguni deatta. 変換方法 ひらがなは全て確定済み 変換を開始するには大文字 スペースで漢字変換、qでカタカナ変換 変換中にさらに大文字 → 送りがな
SKKのメリット ユーザー エンターキーを押す回数が減る 誤変換が少ない 辞書登録がスムーズ 開発者 実装がシンプル 文節は全てユーザーが知っているので、辞書に問い合わせるだけ デメリット SKKのない環境がとても辛い
VimにおけるSKK実装 skkeleton denops.vim 最新の実装で開発もアクティブ eskk.vim Pure Vim script Vimの中でIME pluginを使うメリット
OSに依存しない エディタの他の機能と連携しやすい 自動補完 変換状態の表示
アルゴリズム
機能の整理 コア機能 ローマ字の入力をひらがなに変換する ひらがな → 漢字の変換 変換用の辞書を読み込み 送りがなの有無 UI バッファへの反映
ローマ字 → ひらがな 変換 入力は一文字ずつ渡される それまでの入力を覚えておく 変換ルール KanaTable Google日本語入力でいう「入力」「出力」 「次の入力」からなる
bb -> っb や bba -> っば が簡単に実現 type KanaRule = { input: string; output: string; next: string; }; type KanaTable = KanaRule[];
ひらがな変換の注意点 次の入力を見ないと変換候補が確定できないものには注意 nn -> ん と nm -> んm など。
以下のルールを同時に導入 { input: "nn", output: "ん", next: "" } { input: "n", output: "ん", next: "" } 入力に対する前方一致で変換ルールを絞り込む 候補が1つかつ完全一致になったら変換を確定 候補が0個になった場合は 直前までの入力に完全一致する候補があれば、それを確定し新しい入力を積む 無ければ誤入力
Flowchart 1つかつ完全一致 nextは残す 0個 それ以外 全部残す あり nextと新しいinputは残す なし 全部消す
Start ローマ字の入力 KanaTable KanaRuleのinputに対する 前方一致で絞り込み 候補の数 変換を確定 直前までの入力 に対して完全一致 する候補 未確定 それを確定し新しい入力を積む 誤入力 type KanaRule = { input: string; output: string; next: string; }; type KanaTable = KanaRule[];
まとめ
SKKはいいぞ skkeletonはいいぞ 宣伝 zennで「SKK実装入門」という連載を書いてます SKK実装入門 (1) ローマ字 -> ひらがな変換 SKK実装入門
(2) ひらがな入力 (3) の「辞書読み込みと変換」は3月中に更新予定 最近json形式かつ文字コードがutf-8の辞書がマージされました 🎉 https://github.com/skk-dev/dict/pull/39