An open API service indexing awesome lists of open source software.

https://github.com/kjuq/skkelua.nvim

Yet another SKK implemention for Neovim in pure Lua
https://github.com/kjuq/skkelua.nvim

ime lua neovim neovim-lua neovim-plugin nvim nvim-lua nvim-plugin nvim-plugins skk

Last synced: 4 days ago
JSON representation

Yet another SKK implemention for Neovim in pure Lua

Awesome Lists containing this project

README

          

# skkelua.nvim

demo

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

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

## Requirements

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

denops.vim / Deno は不要です。

## Installation

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

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

## Usage

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

```lua
vim.keymap.set({ "i", "c", "t" }, "", "(skkelua-toggle)")
```

設定は Lua API で行います。

```lua
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 も使えます。
日本語を書き続ける間だけオンにしておく使い方です。

```lua
vim.keymap.set("n", "tj", "(skkelua-persistent-toggle)")
```

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

```lua
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](doc/skkelua.txt) を参照してください。

## モードインジケータ

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

```lua
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 サーバーとして実装されており、外部プロセスは起動しません。

```lua
require("skkelua").config({
completion = {
enabled = true,
insertOnSelect = true, -- 候補にフォーカスした時点で本文へ挿入する
deferOkuri = true, -- 送り仮名確定でも自動変換せず、第一候補を自動選択する
},
pureSpace = true, -- Space を変換に使わず「変換中なら確定 + 空白」にする
})
```

- ▽ に続けてかなを打つと、見出しを前方一致検索した変換候補が pum に出ます
- 送りあり変換の入力中 (▽おく*r) も、送りのローマ字からありうる送り仮名を
展開した完成形 (送り/送る/送れ...) が候補に出ます
- 候補選択中 (▼送る) も全候補が pum に出るので、pum から選び直せます
- ``/`` で選択し、`` で確定すると pre-edit 全体が候補に置き換わり、
選んだ候補はユーザー辞書へ登録されます (次回から優先されます)
- 候補を未選択のまま `` を押すと、変換せずかなのまま確定します
- 候補の末尾には常に「[辞書登録]」が並びます。確定するとフローティングの
登録プロンプトが開き、入力した単語がその読みで辞書に登録されます。
プロンプトの中でも skkelua のかな入力と補完メニューがそのまま使えるので、
漢字を含む単語も pum で変換しながら登録できます。辞書に無い読みでも
この項目だけのメニューが開くので、変換キーを使わずに新しい単語を登録できます
- skkelua の有効・無効に連動して補完も付いたり外れたりします

## skkeleton との関係

skkelua は [vim-skk/skkeleton](https://github.com/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

```sh
# テスト実行
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](https://github.com/vim-skk/skkeleton)
(Copyright (c) 2021 kuuote, zlib license) の TypeScript 実装を Lua に移植したものです
- モードインジケータは
[delphinus/skkeleton_indicator.nvim](https://github.com/delphinus/skkeleton_indicator.nvim)
(Copyright (c) 2021 Yasushi Jinnouchi, zlib license) を基に内蔵化したものです