Created
July 12, 2021 14:04
-
-
Save kuuote/46e5596b8c89db90d1ed993949e92156 to your computer and use it in GitHub Desktop.
Vimでかな入力するやつ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function! kana#init() abort | |
let s:state = {} | |
let s:state.preedit = "" | |
let s:state.preedit_next = "" | |
let s:state.kakutei = v:false | |
let s:state.feed = "" | |
let s:table = json_decode(join(readfile("table.json"), "")) | |
call kana#map() | |
endfunction | |
function! kana#map() abort | |
for i in range(26) | |
let c = nr2char(i + 0x61) | |
execute printf("lnoremap <expr> %s kana#input('%s')", c, c) | |
endfor | |
lnoremap <expr> ' kana#input("'") | |
lnoremap <expr> - kana#input("-") | |
endfunction | |
function! kana#preedit() abort | |
let ret = repeat("\<C-h>", strchars(s:state.preedit)) .. s:state.preedit_next | |
if s:state.kakutei | |
let s:state.preedit = "" | |
let s:state.kakutei = v:false | |
else | |
let s:state.preedit = s:state.preedit_next | |
endif | |
let s:state.preedit_next = "" | |
return ret | |
endfunction | |
function! kana#kakutei(result, feed) abort | |
let s:state.kakutei = v:true | |
let s:state.preedit_next = a:result | |
let s:state.feed = a:feed | |
endfunction | |
function! kana#input(char) abort | |
" んじゃ等を処理するために確保 | |
let current = get(s:table, s:state.feed, v:false) | |
let s:state.feed ..= a:char | |
let found = filter(items(s:table), "stridx(v:val[0], s:state.feed) == 0") | |
if empty(found) | |
if current isnot v:false | |
call kana#kakutei(current[2], a:char) | |
else | |
let s:state.feed = a:char | |
let s:state.preedit_next = a:char | |
endif | |
elseif len(found) == 1 && found[0][0] ==# s:state.feed | |
echo found | |
call kana#kakutei(found[0][1][2], found[0][1][0]) | |
else | |
let s:state.preedit_next = s:state.feed | |
endif | |
return kana#preedit() | |
endfunction | |
augroup kana | |
autocmd! | |
autocmd InsertEnter * call kana#init() | |
augroup END |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"a": ["", "ア", "あ"], | |
"-": ["", "", "ー"], | |
"bb": ["b", "ッ", "っ"], | |
"ba": ["", "バ", "ば"], | |
"be": ["", "ベ", "べ"], | |
"bi": ["", "ビ", "び"], | |
"bo": ["", "ボ", "ぼ"], | |
"bu": ["", "ブ", "ぶ"], | |
"bya": ["", "ビャ", "びゃ"], | |
"bye": ["", "ビェ", "びぇ"], | |
"byi": ["", "ビィ", "びぃ"], | |
"byo": ["", "ビョ", "びょ"], | |
"byu": ["", "ビュ", "びゅ"], | |
"cc": ["c", "ッ", "っ"], | |
"cha": ["", "チャ", "ちゃ"], | |
"che": ["", "チェ", "ちぇ"], | |
"chi": ["", "チ", "ち"], | |
"cho": ["", "チョ", "ちょ"], | |
"chu": ["", "チュ", "ちゅ"], | |
"cya": ["", "チャ", "ちゃ"], | |
"cye": ["", "チェ", "ちぇ"], | |
"cyi": ["", "チィ", "ちぃ"], | |
"cyo": ["", "チョ", "ちょ"], | |
"cyu": ["", "チュ", "ちゅ"], | |
"dd": ["d", "ッ", "っ"], | |
"da": ["", "ダ", "だ"], | |
"de": ["", "デ", "で"], | |
"dha": ["", "デャ", "でゃ"], | |
"dhe": ["", "デェ", "でぇ"], | |
"dhi": ["", "ディ", "でぃ"], | |
"dho": ["", "デョ", "でょ"], | |
"dhu": ["", "デュ", "でゅ"], | |
"di": ["", "ヂ", "ぢ"], | |
"do": ["", "ド", "ど"], | |
"du": ["", "ヅ", "づ"], | |
"dya": ["", "ヂャ", "ぢゃ"], | |
"dye": ["", "ヂェ", "ぢぇ"], | |
"dyi": ["", "ヂィ", "ぢぃ"], | |
"dyo": ["", "ヂョ", "ぢょ"], | |
"dyu": ["", "ヂュ", "ぢゅ"], | |
"e": ["", "エ", "え"], | |
"ff": ["f", "ッ", "っ"], | |
"fa": ["", "ファ", "ふぁ"], | |
"fe": ["", "フェ", "ふぇ"], | |
"fi": ["", "フィ", "ふぃ"], | |
"fo": ["", "フォ", "ふぉ"], | |
"fu": ["", "フ", "ふ"], | |
"fya": ["", "フャ", "ふゃ"], | |
"fye": ["", "フェ", "ふぇ"], | |
"fyi": ["", "フィ", "ふぃ"], | |
"fyo": ["", "フョ", "ふょ"], | |
"fyu": ["", "フュ", "ふゅ"], | |
"gg": ["g", "ッ", "っ"], | |
"ga": ["", "ガ", "が"], | |
"ge": ["", "ゲ", "げ"], | |
"gi": ["", "ギ", "ぎ"], | |
"go": ["", "ゴ", "ご"], | |
"gu": ["", "グ", "ぐ"], | |
"gya": ["", "ギャ", "ぎゃ"], | |
"gye": ["", "ギェ", "ぎぇ"], | |
"gyi": ["", "ギィ", "ぎぃ"], | |
"gyo": ["", "ギョ", "ぎょ"], | |
"gyu": ["", "ギュ", "ぎゅ"], | |
"ha": ["", "ハ", "は"], | |
"he": ["", "ヘ", "へ"], | |
"hi": ["", "ヒ", "ひ"], | |
"ho": ["", "ホ", "ほ"], | |
"hu": ["", "フ", "ふ"], | |
"hya": ["", "ヒャ", "ひゃ"], | |
"hye": ["", "ヒェ", "ひぇ"], | |
"hyi": ["", "ヒィ", "ひぃ"], | |
"hyo": ["", "ヒョ", "ひょ"], | |
"hyu": ["", "ヒュ", "ひゅ"], | |
"i": ["", "イ", "い"], | |
"jj": ["j", "ッ", "っ"], | |
"ja": ["", "ジャ", "じゃ"], | |
"je": ["", "ジェ", "じぇ"], | |
"ji": ["", "ジ", "じ"], | |
"jo": ["", "ジョ", "じょ"], | |
"ju": ["", "ジュ", "じゅ"], | |
"jya": ["", "ジャ", "じゃ"], | |
"jye": ["", "ジェ", "じぇ"], | |
"jyi": ["", "ジィ", "じぃ"], | |
"jyo": ["", "ジョ", "じょ"], | |
"jyu": ["", "ジュ", "じゅ"], | |
"kk": ["k", "ッ", "っ"], | |
"ka": ["", "カ", "か"], | |
"ke": ["", "ケ", "け"], | |
"ki": ["", "キ", "き"], | |
"ko": ["", "コ", "こ"], | |
"ku": ["", "ク", "く"], | |
"kya": ["", "キャ", "きゃ"], | |
"kye": ["", "キェ", "きぇ"], | |
"kyi": ["", "キィ", "きぃ"], | |
"kyo": ["", "キョ", "きょ"], | |
"kyu": ["", "キュ", "きゅ"], | |
"ma": ["", "マ", "ま"], | |
"me": ["", "メ", "め"], | |
"mi": ["", "ミ", "み"], | |
"mo": ["", "モ", "も"], | |
"mu": ["", "ム", "む"], | |
"mya": ["", "ミャ", "みゃ"], | |
"mye": ["", "ミェ", "みぇ"], | |
"myi": ["", "ミィ", "みぃ"], | |
"myo": ["", "ミョ", "みょ"], | |
"myu": ["", "ミュ", "みゅ"], | |
"n": ["", "ン", "ん"], | |
"n'": ["", "ン", "ん"], | |
"na": ["", "ナ", "な"], | |
"ne": ["", "ネ", "ね"], | |
"ni": ["", "ニ", "に"], | |
"nn": ["", "ン", "ん"], | |
"no": ["", "ノ", "の"], | |
"nu": ["", "ヌ", "ぬ"], | |
"nya": ["", "ニャ", "にゃ"], | |
"nye": ["", "ニェ", "にぇ"], | |
"nyi": ["", "ニィ", "にぃ"], | |
"nyo": ["", "ニョ", "にょ"], | |
"nyu": ["", "ニュ", "にゅ"], | |
"o": ["", "オ", "お"], | |
"pp": ["p", "ッ", "っ"], | |
"pa": ["", "パ", "ぱ"], | |
"pe": ["", "ペ", "ぺ"], | |
"pi": ["", "ピ", "ぴ"], | |
"po": ["", "ポ", "ぽ"], | |
"pu": ["", "プ", "ぷ"], | |
"pya": ["", "ピャ", "ぴゃ"], | |
"pye": ["", "ピェ", "ぴぇ"], | |
"pyi": ["", "ピィ", "ぴぃ"], | |
"pyo": ["", "ピョ", "ぴょ"], | |
"pyu": ["", "ピュ", "ぴゅ"], | |
"rr": ["r", "ッ", "っ"], | |
"ra": ["", "ラ", "ら"], | |
"re": ["", "レ", "れ"], | |
"ri": ["", "リ", "り"], | |
"ro": ["", "ロ", "ろ"], | |
"ru": ["", "ル", "る"], | |
"rya": ["", "リャ", "りゃ"], | |
"rye": ["", "リェ", "りぇ"], | |
"ryi": ["", "リィ", "りぃ"], | |
"ryo": ["", "リョ", "りょ"], | |
"ryu": ["", "リュ", "りゅ"], | |
"ss": ["s", "ッ", "っ"], | |
"sa": ["", "サ", "さ"], | |
"se": ["", "セ", "せ"], | |
"sha": ["", "シャ", "しゃ"], | |
"she": ["", "シェ", "しぇ"], | |
"shi": ["", "シ", "し"], | |
"sho": ["", "ショ", "しょ"], | |
"shu": ["", "シュ", "しゅ"], | |
"si": ["", "シ", "し"], | |
"so": ["", "ソ", "そ"], | |
"su": ["", "ス", "す"], | |
"sya": ["", "シャ", "しゃ"], | |
"sye": ["", "シェ", "しぇ"], | |
"syi": ["", "シィ", "しぃ"], | |
"syo": ["", "ショ", "しょ"], | |
"syu": ["", "シュ", "しゅ"], | |
"tt": ["t", "ッ", "っ"], | |
"ta": ["", "タ", "た"], | |
"te": ["", "テ", "て"], | |
"tha": ["", "テァ", "てぁ"], | |
"the": ["", "テェ", "てぇ"], | |
"thi": ["", "ティ", "てぃ"], | |
"tho": ["", "テョ", "てょ"], | |
"thu": ["", "テュ", "てゅ"], | |
"ti": ["", "チ", "ち"], | |
"to": ["", "ト", "と"], | |
"tsu": ["", "ツ", "つ"], | |
"tu": ["", "ツ", "つ"], | |
"tya": ["", "チャ", "ちゃ"], | |
"tye": ["", "チェ", "ちぇ"], | |
"tyi": ["", "チィ", "ちぃ"], | |
"tyo": ["", "チョ", "ちょ"], | |
"tyu": ["", "チュ", "ちゅ"], | |
"u": ["", "ウ", "う"], | |
"vv": ["v", "ッ", "っ"], | |
"va": ["", "ヴァ", "う゛ぁ"], | |
"ve": ["", "ヴェ", "う゛ぇ"], | |
"vi": ["", "ヴィ", "う゛ぃ"], | |
"vo": ["", "ヴォ", "う゛ぉ"], | |
"vu": ["", "ヴ", "う゛"], | |
"ww": ["w", "ッ", "っ"], | |
"wa": ["", "ワ", "わ"], | |
"we": ["", "ウェ", "うぇ"], | |
"wi": ["", "ウィ", "うぃ"], | |
"wo": ["", "ヲ", "を"], | |
"wu": ["", "ウ", "う"], | |
"xx": ["x", "ッ", "っ"], | |
"xa": ["", "ァ", "ぁ"], | |
"xe": ["", "ェ", "ぇ"], | |
"xi": ["", "ィ", "ぃ"], | |
"xka": ["", "ヵ", "か"], | |
"xke": ["", "ヶ", "け"], | |
"xo": ["", "ォ", "ぉ"], | |
"xtsu": ["", "ッ", "っ"], | |
"xtu": ["", "ッ", "っ"], | |
"xu": ["", "ゥ", "ぅ"], | |
"xwa": ["", "ヮ", "ゎ"], | |
"xwe": ["", "ヱ", "ゑ"], | |
"xwi": ["", "ヰ", "ゐ"], | |
"xya": ["", "ャ", "ゃ"], | |
"xyo": ["", "ョ", "ょ"], | |
"xyu": ["", "ュ", "ゅ"], | |
"yy": ["y", "ッ", "っ"], | |
"ya": ["", "ヤ", "や"], | |
"ye": ["", "イェ", "いぇ"], | |
"yo": ["", "ヨ", "よ"], | |
"yu": ["", "ユ", "ゆ"], | |
"zz": ["z", "ッ", "っ"], | |
"z ": ["", "", " "], | |
"z*": ["", "", "※"], | |
"z,": ["", "", "‥"], | |
"z-": ["", "", "〜"], | |
"z.": ["", "", "…"], | |
"z/": ["", "", "・"], | |
"z0": ["", "", "○"], | |
"z@": ["", "", "◎"], | |
"z[": ["", "", "『"], | |
"z]": ["", "", "』"], | |
"z{": ["", "", "【"], | |
"z}": ["", "", "】"], | |
"z(": ["", "", "("], | |
"z)": ["", "", ")"], | |
"za": ["", "ザ", "ざ"], | |
"ze": ["", "ゼ", "ぜ"], | |
"zh": ["", "", "←"], | |
"zi": ["", "ジ", "じ"], | |
"zj": ["", "", "↓"], | |
"zk": ["", "", "↑"], | |
"zl": ["", "", "→"], | |
"zL": ["", "", "⇒"], | |
"zn": ["", "", "ー"], | |
"zo": ["", "ゾ", "ぞ"], | |
"zu": ["", "ズ", "ず"], | |
"zya": ["", "ジャ", "じゃ"], | |
"zye": ["", "ジェ", "じぇ"], | |
"zyi": ["", "ジィ", "じぃ"], | |
"zyo": ["", "ジョ", "じょ"], | |
"zyu": ["", "ジュ", "じゅ"], | |
":": ["", "", ":"], | |
";": ["", "", ";"], | |
"?": ["", "", "?"], | |
"[": ["", "", "「"], | |
"]": ["", "", "」"] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment