Skip to content

Latest commit

 

History

49 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

skkelua.nvim

demo

Neovim 専用の SKK 日本語入力環境です。pure Lua で実装されており、 Neovim 組み込みの Lua ランタイムだけで動作します。

skkeleton (denops/Deno 製) を参考に 作られた独立のプラグインで、モードインジケータも内蔵しています。

Requirements

  • Neovim 0.10+
  • (任意) google_japanese_input ソースを使う場合は curl

denops.vim / Deno は不要です。

Installation

任意のプラグインマネージャで導入できます。

-- lazy.nvim
{
	"kjuq/skkelua.nvim",
	config = function()
		require("skkelua").config({
			globalDictionaries = { "~/.skk/SKK-JISYO.L" },
		})
		vim.keymap.set({ "i", "c" }, "<C-j>", "<Plug>(skkelua-toggle)")
	end,
}

Usage

<Plug>(skkelua-enable) / <Plug>(skkelua-disable) / <Plug>(skkelua-toggle) を insert / cmdline / terminal モードにマップして使います。

vim.keymap.set({ "i", "c", "t" }, "<C-j>", "<Plug>(skkelua-toggle)")

設定は Lua API で行います。

require("skkelua").config({
	globalDictionaries = {
		"~/.skk/SKK-JISYO.L",              -- エンコーディング自動判定
		{ "~/.skk/SKK-JISYO.geo", "euc-jp" }, -- 明示指定
	},
	eggLikeNewline = true,
	registerConvertResult = true,
})

ユーザー辞書はデフォルトで stdpath("data")/skkelua/jisyo (通常 ~/.local/share/nvim/skkelua/jisyo) に保存されます。

insert に入るたび自動で skkelua を有効化する persistent mode も使えます。 日本語を書き続ける間だけオンにしておく使い方です。

vim.keymap.set("n", "<Space>tj", "<Plug>(skkelua-persistent-toggle)")

現在の状態は Lua API で参照できます。

require("skkelua").is_enabled()         -- 有効かどうか
require("skkelua").mode()               -- "hira" / "kata" / "hankata" / "zenkaku" / "abbrev" / ""
require("skkelua").phase()              -- "input" / "input:okurinasi" / "input:okuriari" / "henkan" / ...
require("skkelua").is_persistent_mode() -- persistent mode が有効かどうか

詳細は doc/skkelua.txt を参照してください。

モードインジケータ

カーソル付近に現在の入力モード (ひら/カタ/英字など) をフローティング表示する インジケータを内蔵しています。デフォルトで有効です。

require("skkelua").config({
	indicator = {
		enabled = true,       -- false で無効化
		alwaysShown = false,  -- skkelua が有効な間だけ表示
		fadeOutMs = 0,        -- 0 で自動フェードアウトなし
		hiraText = "ひら",    -- 表示テキストのカスタマイズ
		border = "rounded",   -- 枠線 (nvim_open_win の border)
	},
})

デフォルト (border なし) はテキストの背景をモード色で塗り潰します。 border を設定すると塗り潰しをやめ、枠線と文字の色 (fg) がモード色になります。

ハイライトは SkkeluaIndicatorHira (塗り潰し) / SkkeluaIndicatorHiraBorder (border あり) などのグループで上書きできます。

変換候補の補完表示 (builtin LSP)

変換入力中 (▽かんじ) の候補を、Neovim 組み込みの補完メニューに自動表示できます。 in-process の LSP サーバーとして実装されており、外部プロセスは起動しません。

require("skkelua").config({
	completion = {
		enabled = true,
		insertOnSelect = true, -- 候補にフォーカスした時点で本文へ挿入する
		deferOkuri = true, -- 送り仮名確定でも自動変換せず、第一候補を自動選択する
	},
	pureSpace = true, -- Space を変換に使わず「変換中なら確定 + 空白」にする
})
  • ▽ に続けてかなを打つと、見出しを前方一致検索した変換候補が pum に出ます
  • 送りあり変換の入力中 (▽おく*r) も、送りのローマ字からありうる送り仮名を 展開した完成形 (送り/送る/送れ...) が候補に出ます
  • 候補選択中 (▼送る) も全候補が pum に出るので、pum から選び直せます
  • <C-n>/<C-p> で選択し、<C-y> で確定すると pre-edit 全体が候補に置き換わり、 選んだ候補はユーザー辞書へ登録されます (次回から優先されます)
  • 候補を未選択のまま <C-y> を押すと、変換せずかなのまま確定します
  • abbrev モード (/) の入力中は、辞書候補の後ろに入力したアルファベット そのものと、その前に半角スペースを足したものが並びます (▽overall なら overall overall)
  • 候補の末尾には常に「[辞書登録]」が並びます。確定するとフローティングの 登録プロンプトが開き、入力した単語がその読みで辞書に登録されます。 プロンプトの中でも skkelua のかな入力と補完メニューがそのまま使えるので、 漢字を含む単語も pum で変換しながら登録できます。辞書に無い読みでも この項目だけのメニューが開くので、変換キーを使わずに新しい単語を登録できます
  • skkelua の有効・無効に連動して補完も付いたり外れたりします

skkeleton との関係

skkelua は vim-skk/skkeleton の TypeScript 実装を参考に Lua で書かれた別のプラグインです。 変換エンジンの挙動・辞書形式・設定オプション名の多くは skkeleton を踏襲していますが、 API 互換はありません (skkeleton#* 関数や g:skkeleton#* 変数は提供しません)。

denops 版との主な違い:

項目 skkeleton skkelua
ランタイム Deno + denops.vim Neovim 組み込み Lua のみ
対応エディタ Vim / Neovim Neovim 0.10+ のみ
設定 API skkeleton#config() require("skkelua").config()
モードインジケータ 別プラグイン (skkeleton_indicator.nvim) 内蔵
ユーザー辞書デフォルト ~/.skkeleton stdpath("data")/skkelua/jisyo
辞書ロード 非同期 同期 (SKK-JISYO.L 規模で数百 ms、初回のみ)
辞書形式 SKK/JSON/YAML/msgpack/Deno KV SKK/JSON/msgpack
SKK サーバー 非同期 TCP 同期 TCP (タイムアウト 1 秒)
Google 日本語入力 fetch curl
ddc.vim ソース 同梱 非同梱 (補完用 Lua API を提供)

Development

# テスト実行
nvim --clean --headless -l tests/run.lua

# 特定の spec のみ
nvim --clean --headless -l tests/run.lua henkan

# 普段の設定と切り離して手元で試す
nvim -u tests/minimal_init.lua

License

zlib license

Credits

  • 変換エンジンは vim-skk/skkeleton (Copyright (c) 2021 kuuote, zlib license) の TypeScript 実装を Lua に移植したものです
  • モードインジケータは delphinus/skkeleton_indicator.nvim (Copyright (c) 2021 Yasushi Jinnouchi, zlib license) を基に内蔵化したものです

About

Yet another SKK implemention for Neovim in pure Lua

Topics

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages