{"id":52042223,"url":"https://github.com/kjuq/skkelua.nvim","last_synced_at":"2026-08-02T01:01:20.946Z","repository":{"id":370341561,"uuid":"1294308598","full_name":"kjuq/skkelua.nvim","owner":"kjuq","description":"Yet another SKK implemention for Neovim in pure Lua","archived":false,"fork":false,"pushed_at":"2026-07-16T07:20:55.000Z","size":241,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-16T09:15:13.165Z","etag":null,"topics":["ime","lua","neovim","neovim-lua","neovim-plugin","nvim","nvim-lua","nvim-plugin","nvim-plugins","skk"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kjuq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-08T22:03:43.000Z","updated_at":"2026-07-16T07:20:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kjuq/skkelua.nvim","commit_stats":null,"previous_names":["kjuq/skkelua.nvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kjuq/skkelua.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjuq%2Fskkelua.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjuq%2Fskkelua.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjuq%2Fskkelua.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjuq%2Fskkelua.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kjuq","download_url":"https://codeload.github.com/kjuq/skkelua.nvim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjuq%2Fskkelua.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36175203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-01T02:00:05.789Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ime","lua","neovim","neovim-lua","neovim-plugin","nvim","nvim-lua","nvim-plugin","nvim-plugins","skk"],"created_at":"2026-08-02T01:01:05.402Z","updated_at":"2026-08-02T01:01:20.940Z","avatar_url":"https://github.com/kjuq.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# skkelua.nvim\n\n\u003cimg width=\"640\" height=\"355\" alt=\"demo\" src=\"https://github.com/user-attachments/assets/03a07620-4db7-495a-a526-f8b9f406fef7\" /\u003e\n\nNeovim 専用の SKK 日本語入力環境です。pure Lua で実装されており、\nNeovim 組み込みの Lua ランタイムだけで動作します。\n\n[skkeleton](https://github.com/vim-skk/skkeleton) (denops/Deno 製) を参考に\n作られた独立のプラグインで、モードインジケータも内蔵しています。\n\n## Requirements\n\n- Neovim 0.10+\n- (任意) `google_japanese_input` ソースを使う場合は `curl`\n\ndenops.vim / Deno は不要です。\n\n## Installation\n\n任意のプラグインマネージャで導入できます。\n\n```lua\n-- lazy.nvim\n{\n\t\"kjuq/skkelua.nvim\",\n\tconfig = function()\n\t\trequire(\"skkelua\").config({\n\t\t\tglobalDictionaries = { \"~/.skk/SKK-JISYO.L\" },\n\t\t})\n\t\tvim.keymap.set({ \"i\", \"c\" }, \"\u003cC-j\u003e\", \"\u003cPlug\u003e(skkelua-toggle)\")\n\tend,\n}\n```\n\n## Usage\n\n`\u003cPlug\u003e(skkelua-enable)` / `\u003cPlug\u003e(skkelua-disable)` / `\u003cPlug\u003e(skkelua-toggle)` を\ninsert / cmdline / terminal モードにマップして使います。\n\n```lua\nvim.keymap.set({ \"i\", \"c\", \"t\" }, \"\u003cC-j\u003e\", \"\u003cPlug\u003e(skkelua-toggle)\")\n```\n\n設定は Lua API で行います。\n\n```lua\nrequire(\"skkelua\").config({\n\tglobalDictionaries = {\n\t\t\"~/.skk/SKK-JISYO.L\",              -- エンコーディング自動判定\n\t\t{ \"~/.skk/SKK-JISYO.geo\", \"euc-jp\" }, -- 明示指定\n\t},\n\teggLikeNewline = true,\n\tregisterConvertResult = true,\n})\n```\n\nユーザー辞書はデフォルトで `stdpath(\"data\")/skkelua/jisyo`\n(通常 `~/.local/share/nvim/skkelua/jisyo`) に保存されます。\n\ninsert に入るたび自動で skkelua を有効化する persistent mode も使えます。\n日本語を書き続ける間だけオンにしておく使い方です。\n\n```lua\nvim.keymap.set(\"n\", \"\u003cSpace\u003etj\", \"\u003cPlug\u003e(skkelua-persistent-toggle)\")\n```\n\n現在の状態は Lua API で参照できます。\n\n```lua\nrequire(\"skkelua\").is_enabled()         -- 有効かどうか\nrequire(\"skkelua\").mode()               -- \"hira\" / \"kata\" / \"hankata\" / \"zenkaku\" / \"abbrev\" / \"\"\nrequire(\"skkelua\").phase()              -- \"input\" / \"input:okurinasi\" / \"input:okuriari\" / \"henkan\" / ...\nrequire(\"skkelua\").is_persistent_mode() -- persistent mode が有効かどうか\n```\n\n詳細は [doc/skkelua.txt](doc/skkelua.txt) を参照してください。\n\n## モードインジケータ\n\nカーソル付近に現在の入力モード (ひら/カタ/英字など) をフローティング表示する\nインジケータを内蔵しています。デフォルトで有効です。\n\n```lua\nrequire(\"skkelua\").config({\n\tindicator = {\n\t\tenabled = true,       -- false で無効化\n\t\talwaysShown = false,  -- skkelua が有効な間だけ表示\n\t\tfadeOutMs = 0,        -- 0 で自動フェードアウトなし\n\t\thiraText = \"ひら\",    -- 表示テキストのカスタマイズ\n\t\tborder = \"rounded\",   -- 枠線 (nvim_open_win の border)\n\t},\n})\n```\n\nデフォルト (border なし) はテキストの背景をモード色で塗り潰します。\nborder を設定すると塗り潰しをやめ、枠線と文字の色 (fg) がモード色になります。\n\nハイライトは `SkkeluaIndicatorHira` (塗り潰し) /\n`SkkeluaIndicatorHiraBorder` (border あり) などのグループで上書きできます。\n\n## 変換候補の補完表示 (builtin LSP)\n\n変換入力中 (▽かんじ) の候補を、Neovim 組み込みの補完メニューに自動表示できます。\nin-process の LSP サーバーとして実装されており、外部プロセスは起動しません。\n\n```lua\nrequire(\"skkelua\").config({\n\tcompletion = {\n\t\tenabled = true,\n\t\tinsertOnSelect = true, -- 候補にフォーカスした時点で本文へ挿入する\n\t\tdeferOkuri = true, -- 送り仮名確定でも自動変換せず、第一候補を自動選択する\n\t},\n\tpureSpace = true, -- Space を変換に使わず「変換中なら確定 + 空白」にする\n})\n```\n\n- ▽ に続けてかなを打つと、見出しを前方一致検索した変換候補が pum に出ます\n- 送りあり変換の入力中 (▽おく*r) も、送りのローマ字からありうる送り仮名を\n  展開した完成形 (送り/送る/送れ...) が候補に出ます\n- 候補選択中 (▼送る) も全候補が pum に出るので、pum から選び直せます\n- `\u003cC-n\u003e`/`\u003cC-p\u003e` で選択し、`\u003cC-y\u003e` で確定すると pre-edit 全体が候補に置き換わり、\n  選んだ候補はユーザー辞書へ登録されます (次回から優先されます)\n- 候補を未選択のまま `\u003cC-y\u003e` を押すと、変換せずかなのまま確定します\n- 候補の末尾には常に「[辞書登録]」が並びます。確定するとフローティングの\n  登録プロンプトが開き、入力した単語がその読みで辞書に登録されます。\n  プロンプトの中でも skkelua のかな入力と補完メニューがそのまま使えるので、\n  漢字を含む単語も pum で変換しながら登録できます。辞書に無い読みでも\n  この項目だけのメニューが開くので、変換キーを使わずに新しい単語を登録できます\n- skkelua の有効・無効に連動して補完も付いたり外れたりします\n\n## skkeleton との関係\n\nskkelua は [vim-skk/skkeleton](https://github.com/vim-skk/skkeleton) の\nTypeScript 実装を参考に Lua で書かれた別のプラグインです。\n変換エンジンの挙動・辞書形式・設定オプション名の多くは skkeleton を踏襲していますが、\nAPI 互換はありません (`skkeleton#*` 関数や `g:skkeleton#*` 変数は提供しません)。\n\ndenops 版との主な違い:\n\n| 項目 | skkeleton | skkelua |\n|---|---|---|\n| ランタイム | Deno + denops.vim | Neovim 組み込み Lua のみ |\n| 対応エディタ | Vim / Neovim | Neovim 0.10+ のみ |\n| 設定 API | `skkeleton#config()` | `require(\"skkelua\").config()` |\n| モードインジケータ | 別プラグイン (skkeleton_indicator.nvim) | 内蔵 |\n| ユーザー辞書デフォルト | `~/.skkeleton` | `stdpath(\"data\")/skkelua/jisyo` |\n| 辞書ロード | 非同期 | 同期 (SKK-JISYO.L 規模で数百 ms、初回のみ) |\n| 辞書形式 | SKK/JSON/YAML/msgpack/Deno KV | SKK/JSON/msgpack |\n| SKK サーバー | 非同期 TCP | 同期 TCP (タイムアウト 1 秒) |\n| Google 日本語入力 | fetch | curl |\n| ddc.vim ソース | 同梱 | 非同梱 (補完用 Lua API を提供) |\n\n## Development\n\n```sh\n# テスト実行\nnvim --clean --headless -l tests/run.lua\n\n# 特定の spec のみ\nnvim --clean --headless -l tests/run.lua henkan\n\n# 普段の設定と切り離して手元で試す\nnvim -u tests/minimal_init.lua\n```\n\n## License\n\nzlib license\n\n## Credits\n\n- 変換エンジンは [vim-skk/skkeleton](https://github.com/vim-skk/skkeleton)\n  (Copyright (c) 2021 kuuote, zlib license) の TypeScript 実装を Lua に移植したものです\n- モードインジケータは\n  [delphinus/skkeleton_indicator.nvim](https://github.com/delphinus/skkeleton_indicator.nvim)\n  (Copyright (c) 2021 Yasushi Jinnouchi, zlib license) を基に内蔵化したものです\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkjuq%2Fskkelua.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkjuq%2Fskkelua.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkjuq%2Fskkelua.nvim/lists"}