vim-skk / skkeleton Goto Github PK
View Code? Open in Web Editor NEWSKK implements for Vim/Neovim with denops.vim
License: zlib License
SKK implements for Vim/Neovim with denops.vim
License: zlib License
call skkeleton#register_kanatable('rom', {
\ 'jj': 'escape',
\ })
上記の設定をしているのですが、skkeletonをアップデートしたところ、jj
でエスケープする際にjjという文字列が残ってしまうようになりました。
4b317fe
こちらのコミットが原因のようです。これより前に戻したら直りました。
usePopup=false, showCandidatesCount = 0
でコマンドラインの変換候補欄から変換をすると、変換前のひらがなの間に変換結果が挿入されます。
#21 に類似しているかもしれませんが、ambiwidth=single
に設定していました。
markerもambiwidth
に影響されないものを指定しましたが挙動は変わりませんでした。
usePopup=true
の場合は変換候補欄から選択しても上記の問題は見られません。
OS : windows10
NVIM : v0.5.0
deno : 1.14.3
<Plug>(skkeleton-toggle)
で有効にするNIhongo
と入力する<Space>
で変換<CR>
で確定l
でskkeletonを無効にするset rtp+=~/tmp/skkeleton
set rtp+=~/tmp/denops.vim
imap <c-j> <Plug>(skkeleton-toggle)
call skkeleton#config({
\ 'globalJisyo': expand('~/.eskk/SKK-JISYO.L'),
\ })
function skkeleton#handle[1]..denops#request[1]..denops#server#request[4]..29_request の処理中にエラーが検出されま>した:
行 1:
Error invoking 'invoke' on channel 6:
Error: Failed to call 'toggle' with ["\n",{"mode":"i","completeStr":null}]: TypeError: Cannot read properties of undefined (reading 'eval')
at disable (file:///C:/Users/miyake.isana/AppData/Local/nvim-data/site/pack/packer/start/denops-skkeleton.vim/denops/skkeleton/function/disable.ts:10:20)
at disable (file:///C:/Users/miyake.isana/AppData/Local/nvim-data/site/pack/packer/start/denops-skkeleton.vim/denops/skkeleton/main.ts:121:9)
at Session.toggle (file:///C:/Users/miyake.isana/AppData/Local/nvim-data/site/pack/packer/start/denops-skkeleton.vim/denops/skkeleton/main.ts:215:16)
at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
at async https://deno.land/x/[email protected]/session.ts:108:18
at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:29)
at Session.call (https://deno.land/x/[email protected]/session.ts:207:13)
at async Service.dispatch (file:///C:/Users/miyake.isana/AppData/Local/nvim-data/site/pack/packer/start/denops.vim/denops/@denops-private/service.ts:112:14)
at async Session.invoke (file:///C:/Users/miyake.isana/AppData/Local/nvim-data/site/pack/packer/start/denops.vim/denops/@denops-private/host/nvim.ts:44:16)
at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
at async https://deno.land/x/[email protected]/session.ts:108:18
at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:29)
こんな感じで確定が解除?されてしまいます。
<CR>
)let s:plugins = [
\ 'vim-denops/denops.vim',
\ 'Shougo/ddc.vim',
\ 'Shougo/pum.vim',
\ 'Shougo/ddc-ui-pum',
\ 'vim-skk/skkeleton',
\ ]
for plug in s:plugins
execute 'set runtimepath+=~/.cache/dein/repos/github.com/' . plug
endfor
call skkeleton#config({
\ 'globalDictionaries': ['~/.local/share/SKK/dict/SKK-JISYO.L'],
\ 'eggLikeNewline': v:true,
\ })
imap <C-j> <Plug>(skkeleton-enable)
inoremap <expr> <C-n> pum#visible() ? pum#map#select_relative(+1) : '<Cmd>normal! gj<CR>'
inoremap <expr> <C-p> pum#visible() ? pum#map#select_relative(-1) : '<Cmd>normal! gk<CR>'
inoremap <expr> <CR> pum#visible() ? pum#map#confirm() : '<CR>'
inoremap <expr> <C-y> pum#map#confirm()
call ddc#custom#patch_global({
\ 'ui': 'pum',
\ 'sources': ['skkeleton'],
\ 'sourceOptions': {
\ 'skkeleton': {
\ 'mark': 'skkeleton',
\ 'matchers': ['skkeleton'],
\ 'sorters': [],
\ 'isVolatile': v:true
\ },
\ }
\ })
call ddc#enable()
モード変更のイベントは飛んでなさそうですが、入力がひらがなになってしまうようです。
送りあり周りだと思うけど、かなが複数あるケースを処理できてない?
translate.vimというプラグインで日本語から英語に変換している様子です。
詳しくは、上のGifの通りなのですが、
ターミナルから起動したneovimは問題が発生しますが、GUIを使用した際は、上記の問題は起きていません。
現状確認しているGUIはneovideとneovim-gtkです。
set rtp+=/tmp/denops-skkeleton
set rtp+=/tmp/denops.vim
imap <c-j> <Plug>(skkeleton-toggle)
#3 になかったので
カタカナとして確定させた時に不完全な n
を ン
にしてほしい。
ひらがなモードで <Space>n
と入力すると、 ん
が確定されてしまいます。
これにより例えば <Space>na
が な
にならず んあ
になります。
スペースの部分は +
や =
などでも起きるようです。
# syntax=docker/dockerfile:1.3-labs
FROM thinca/vim:v8.2.3455-ubuntu
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y curl unzip \
&& curl -sL 'https://github.com/denoland/deno/releases/download/v1.14.0/deno-x86_64-unknown-linux-gnu.zip' -o /tmp/deno.zip \
&& unzip -qd /usr/local/bin /tmp/deno.zip \
&& rm /tmp/deno.zip \
&& mkdir -p $HOME/.vim/pack/test/start/denops $HOME/.vim/pack/test/start/denops-skkeleton \
&& curl -sL \
"https://github.com/vim-denops/denops.vim/archive/v2.0.0.tar.gz" | \
tar xz --directory=$HOME/.vim/pack/test/start/denops --strip-components=1 \
&& curl -sL \
"https://github.com/kuuote/denops-skkeleton.vim/archive/main.tar.gz" | \
tar xz --directory=$HOME/.vim/pack/test/start/denops-skkeleton --strip-components=1 \
&& mkdir -p /usr/share/skk \
&& curl -sL http://openlab.jp/skk/dic/SKK-JISYO.L.gz | zcat > /usr/share/skk/SKK-JISYO.L
COPY <<VIMRC /root/.vim/vimrc
imap <C-j> <Plug>(skkeleton-toggle)
cmap <C-j> <Plug>(skkeleton-toggle)
VIMRC
$ DOCKER_BUILDKIT=1 docker build -t skkeleton .
$ docker run --rm -it --name skkeleton -e COLUMNS="$(tput cols)" -e LINES="$(tput lines)" skkeleton
LSP prints the warning.
I think it should be replaced.
import { iter } from "./deps/std/io.ts";
辞書登録時に <Esc>
を <C-c>
にマッピングしているのと 'cedit'
オプションが干渉してしまっている
正式なキャンセル方法がわかってないのですが、辞書登録時にキャンセルの意図で <C-c>
を入力するとエラーが出てしまいます。
Error detected while processing function denops#request[1]..denops#server#request[4]..<SNR>17_request[3]..function denops#request[1]..denops#server#request[4]..<SNR>17_request:
line 3:
E605: Exception not caught: Error: Failed to call 'handleKey' with [" ","i"]: Error: Failed to call 'call' with ["input","[辞書登録] あああ: ",""]: Error: Failed to call 'input([辞書登録] あああ: , )': Vim:Interrupt^@ at Vim.call (file:///root/.vim/pack/test/start/denops/denops/@denops-private/host/vim.ts:75:12)^@ at async Service.call (file:///root/.vim/pack/test/start/denops/denops/@denops-private/service.ts:96:33)^@ at async Session.call (file:///root/.vim/pack/test/start/denops/denops/@denops-private/service.ts:70:25)^@ at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:96:72)^@ at async https://deno.land/x/[email protected]/session.ts:108:15^@ at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:25)^@ at Session.call (https://deno.land/x/[email protected]/session.ts:206:72)^@ at async DenopsImpl.call (file:///root/.vim/pack/test/start/denops/denops/@denops/denops.ts:141:33)^@ at async jisyoTouroku (file:///root/.
キャンセル方法が別にあるとしても、エラーになるのはよくないと思うので Issue にしておきます。
とりあえず変換を開始して入力したものの、実際にはひらがなのままでよかった、というような場合にそのまま <C-j>
を押して確定できるようにしたいです。現状だと <C-j>
を入力すると変換マーカーが残ったまま改行され、その後の挙動も不安定になります。
Hiragana<C-j>
ひらがな|
▽ひらがな
|
私の環境では、次のような repro.vim で nvim -u repro.vim
として起動して再現します。<BS>
のマッピングは問題なく動くようです。
function! s:init_skkeleton() abort
call skkeleton#register_keymap('henkan', '<C-j>', 'kakutei')
call skkeleton#register_keymap('henkan', '<BS>', 'henkanBackward')
endfunction
imap <C-j> <Plug>(skkeleton-enable)
augroup rc__skkeleton_init
autocmd User skkeleton-initialize-pre call s:init_skkeleton()
augroup END
packadd denops.vim
packadd skkeleton
skkservを使うと変換ができませんでした。
「あ」の変換を行ったときにtcpdumpでパケットを見てみると
1okurinasi{space}
4okurinasi{space}{NL}
という通信をしていました。
環境はWIndows 10 Pro gvim 8.2.4843 eskkeleton (2022/4/30版)
skkservはWSL2のUbuntu 22.04 yaskkserv
です。
skkeletonを使ったのは初めてなので以前のバージョンでは動いたという情報はありません。
skkservを使わずに辞書を使った場合は変換できました。
vimrcは以下の通りです。
set nocompatible
set runtimepath=
set runtimepath^=~/vimfiles/plugged/skkeleton/
set runtimepath^=~/vimfiles/plugged/denops.vim/
imap <C-j> <Plug>(skkeleton-toggle)
cmap <C-j> <Plug>(skkeleton-toggle)
call skkeleton#config({
\'eggLikeNewline':v:true,
\'keepState':v:true,
\'useSkkServer':v:true,
\'skkServerHost':"127.0.0.1",
\'skkServerPort':1178,
\'skkServerResEnc':"euc-jp",
\'skkServerReqEnc':"euc-jp",
\})
g:eskk#statusline_mode_strings *g:eskk#statusline_mode_strings*
(Default: See below)
Current mode's strings at |'statusline'|.
Statusline string of modes.
This changes |eskk#statusline()|'s return value.
Default value is: >
let g:eskk#statusline_mode_strings = {
\ 'hira': 'あ',
\ 'kata': 'ア',
\ 'ascii': 'aA',
\ 'zenei': 'a',
\ 'hankata': 'ァア',
\ 'abbrev': 'aあ'
\}
STATUS LINE *eskk-status-line* {{{
eskk provides a helper function to display the current mode in the
status line. Given the default status line: >
set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
One can add the eskk indicator this way: >
set statusline=%<%f\ %h%m%r%{eskk#statusline()}%=%-14.(%l,%c%V%)\ %P
The function takes 2 parameters:
* A format string for the case where eskk is enabled
(default: '[eskk:%s]'). %s is replaced by the eskk mode.
* What to display when eskk is disabled (default: '').
To display [%s]/[-] instead: >
set statusline=%<%f\ %h%m%r%{eskk#statusline('[%s]','[-]')}%=%-14.(%l,%c%V%)\ %P
lightline <https://github.com/itchyny/lightline.vim>
----------------------------------------------------
To display the eskk mode in the mode component: >
let g:lightline = {
\ 'component_function': {
\ 'mode': 'LightlineMode',
\ }}
function! LightlineMode()
return lightline#mode()
\ . (exists('g:loaded_eskk') && eskk#is_enabled()
\ ? ' (' . eskk#get_mode() . ')'
\ : '')
endfunction
<
タイトル通りです
かなモードから l
で抜けた後でもう一度かなモードに入ろうとしたら <C-j>
を二回押さないといけない模様
thinca
これ へんk まで入れたら kanatable で k で始まるの引いて へん[かきくけこ] まで絞ってくれると便利そう (めちゃくちゃわがままを言っている自覚はあるw)
https://vim-jp.slack.com/archives/C023EFATA0H/p1632115311247400
Vimrc:
imap <C-j> <Plug>(skkeleton-toggle)
cmap <C-j> <Plug>(skkeleton-toggle)
function! s:skkeleton_init() abort
call skkeleton#config({
\ "markerHenkan": "💤",
\ "markerHenkanSelect": "💨"
\})
endfunction
autocmd User skkeleton-initialize-pre call s:skkeleton_init()
期待する結果:
日本語変換
実際の結果:
変換
備考:
どの範囲のコードポイントで再現するか詳しく確認できていません。
KanSuru
と入力した時に S
が n
に潰されて KaNnuru
の変換になってしまいます。
正確にはコマンドラインウィンドウを開いた後に何かしらの操作をする(エンターなど)とエラーで落ちます。
function skkeleton#handle[1]..denops#request[1]..denops#server#request[6]..<SNR>28_request の処理中にエラーが検出されました:
行 1:
Error invoking 'invoke' on channel 4:
Error: Failed to call 'handleKey' with ["<space>",{"completeInfo":{"pum_visible":0,"mode":"","selected":-1,"items":[]},"mode":"i","
isNativePum":0}]: BatchError: Vim(cunmap):E31: そのようなマッピングはありません
at DenopsImpl.batch (file:///home/fr/dotfiles/dotConfig/nvim/denops/@denops/impl.ts:43:13)
at async batch (https://deno.land/x/[email protected]/batch/batch.ts:89:3)
at async jisyoTouroku (file:///home/fr/.config/nvim/denops/skkeleton/function/jisyo.ts:49:5)
at async henkanForward (file:///home/fr/.config/nvim/denops/skkeleton/function/henkan.ts:54:9)
at async henkanFirst (file:///home/fr/.config/nvim/denops/skkeleton/function/henkan.ts:39:3)
at async acceptResult (file:///home/fr/.config/nvim/denops/skkeleton/function/input.ts:75:5)
at async kanaInput (file:///home/fr/.config/nvim/denops/skkeleton/function/input.ts:100:39)
at async handleKey (file:///home/fr/.config/nvim/denops/skkeleton/keymap.ts:64:3)
at async handle (file:///home/fr/.config/nvim/denops/skkeleton/main.ts:203:3)
at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
at Session.call (https://deno.land/x/[email protected]/session.ts:207:13)
at async Service.dispatch (file:///home/fr/dotfiles/dotConfig/nvim/denops/@denops-private/service.ts:101:14)
at async Session.invoke (file:///home/fr/dotfiles/dotConfig/nvim/denops/@denops-private/host/nvim.ts:48:16)
at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
at async https://deno.land/x/[email protected]/session.ts:108:18
at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:29)
Ctrl-F
でコマンドラインウィンドウに入るimap <C-j> <Plug>(skkeleton-enable)
<Plug>(skkeleton-toggle)
でskkeletonを有効にするq
でskkeletonの出力をカタカナにする<C-o>
で一時的に挿入モードから抜けるskkeleton#mode()
の返り値はkata
だが実際の出力はひらがなになっている.vimrc
set runtimepath+=~\src\denops.vim
set runtimepath+=~\src\skkeleton
imap <C-j> <Plug>(skkeleton-toggle)
かなテーブル以前の段階でlに機能を割り当ててしまっているため
<Plug>(skkeleton-toggle)
で有効にする → <Space>
で半角スペースを入力 → <Plug>(skkeleton-toggle)
で無効にする
上記の手順で、入力した半角スペースが消えます。
i<c-j>aiueo<c-[>l
期待: あいうえお
結果: あいうえおl
(最後のlはhjkl等なんでもよい)
<c-[>の後、しばらく待つと一瞬Insertモードになった後normalモードに戻る。
その後にlを押すと問題ない。
if &compatible
set nocompatible
endif
set runtimepath+=~/.vim/plugged/denops.vim
set runtimepath+=~/.vim/plugged/skkeleton
imap <C-j> <Plug>(skkeleton-enable)
cmap <C-j> <Plug>(skkeleton-enable)
このプラグインを遅延読み込みした状態で有効化するとフリーズし、
そのまま30秒放置するとエラーも出ず、denopsにタイムアウトとして殺されます。
(30秒の間にCtrl-Cで押すとエラーが見えました。後述)
{
{
'vim-skk/skkeleton,
event = { 'InsertEnter' },
dependencies = { 'vim-denops/denops.vim' },
config = function()
vim.keymap.set('i', '<C-j>', '<Plug>(skkeleton-toggle)', { remap = true })
vim.fn['skkeleton#config']({})
end
},
}
この設定ファイルの event = { 'InsertEnter' }
を削除する( = 遅延読み込みしないようにする )と、この問題は解消します
処理中に Ctrl-C で止めるとエラー文が見えて、こんな内容でした。(aspulse
はユーザー名になります)
line 1:
Error invoking 'invoke' on channel 5:
Error: No plugin 'skkeleton' is registered
at Service.dispatch (file:///C:/Users/aspulse/AppData/Local/nvim-data/lazy/denops.vim/denops/@denops-private/service.ts:115:15)
at Invoker.dispatch (file:///C:/Users/aspulse/AppData/Local/nvim-data/lazy/denops.vim/denops/@denops-private/host/invoker.ts:50:26)
at Session.invoke (file:///C:/Users/aspulse/AppData/Local/nvim-data/lazy/denops.vim/denops/@denops-private/host/nvim.ts:57:38)
at Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:42)
at https://deno.land/x/[email protected]/session.ts:108:29
at Session.handleRequest (https://deno.land/x/[email protected]/session.ts:114:6)
at Session.listen (https://deno.land/x/[email protected]/session.ts:148:16)
at async file:///C:/Users/aspulse/AppData/Local/nvim-data/lazy/denops.vim/denops/@denops-private/cli.ts:62:7
at async using (https://deno.land/x/[email protected]/using.ts:14:12)
at async file:///C:/Users/aspulse/AppData/Local/nvim-data/lazy/denops.vim/denops/@denops-private/cli.ts:61:5
Error detected while processing function skkeleton#handle[1]..skkeleton#request[4]..denops#request[1]..denops#server#request[4]..denops#_internal#server#chan#request[4]..denops#_internal#rpc#nvim#request:
Windows 11
● skkeleton 43.5ms start
dir C:/Users/aspulse/AppData/Local/nvim-data/lazy/skkeleton
url https://github.com/vim-skk/skkeleton
branch main
commit 6b41145
readme README.md
$ nvim --version
NVIM v0.9.0-dev-622+g08ebf8d3a
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az276-876
Features: -acl +iconv +tui
$ deno --version
deno 1.30.3 (release, x86_64-pc-windows-msvc)
v8 10.9.194.5
typescript 4.9.4
> :checkhealth denops
denops: health#denops#check
- Supported Deno version: `1.28.0`
- Detected Deno version: `1.30.3`
- OK Deno version check: passed
- Supported Neovim version: `0.8.0`
- Detected Neovim version: `0.9.0`
- OK Neovim version check: passed
- Denops status: `running`
- OK Denops status check: passed
(vim関連で初めてのissueなので、何か内容に間違っているところとか足りない情報あったら教えてください...!)
Windows でとても読み込みが遅いらしい
[denops] globalJisyo loading failed
[denops] at ~/SKK-JISYO.L
[denops] NotFound: No such file or directory (os error 2)
call skkeleton#config({
\ 'globalJisyo': '~/SKK-JISYO.L',
\})
Deno 1.28から作られるようになったlockfileと動的にスクリプトを生成するesm.shとの相性が悪いので別の手段を検討する
Note: vim-jpで聞いた所 g:denops#server#deno_args
に --no-lock
を追加するとlockfileを無効化できるらしい
ddcとskkeletonを使用しています。
ddc-uiはnativeとpumどちらも再現します。
function! s:skkeleton_init() abort
call skkeleton#config({
\ 'markerHenkan' : '',
\ 'markerHenkanSelect' : '',
\ })
endfunction
imap <C-j> <Plug>(skkeleton-enable)
cmap <C-j> <Plug>(skkeleton-enable)
autocmd User skkeleton-initialize-pre call s:skkeleton_init()
Henn<c-n>da
→変dあ
denops.vim のコミット vim-denops/denops.vim@8923103 から、なぜか単語登録時にエラーになってしまいます。
この状態で何でもいいのでキーを押すと (例えば a
キーを押してみます) 次のようになります。
error という文字列が挿入されていることも変ですが、それ以上に、この時点で状態が壊れてしまっているようで単語登録が機能しません。単語を入力して Enter キーを押しても登録されませんし、登録した単語に変換もされませんし、しかも、マーカーは残っているのにスペースキーを押しても変換できません。
以下、スペースキーを押したり a
キーを押したり改行したりした様子ですが、完全に変換前のテキストが (そういうテキストとして) 固定されています。
一応、最小構成は次の通りです。
let g:denops#deno = 'path/to/deno'
packadd denops.vim
packadd skkeleton
imap <C-j> <Plug>(skkeleton-enable)
831
[00:30](https://vim-jp.slack.com/archives/C023EFATA0H/p1674142205057419)
skkeleton 壊れたのですが私だけでしょうか?
!deno --version
deno 1.29.4 (release, x86_64-apple-darwin)
v8 10.9.194.5
typescript 4.9.4
:!nvim --version
NVIM v0.9.0-dev-1947+g0aae7f386-dirty
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by ---
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/local/Cellar/neovim/HEAD-0aae7f3/share/nvim"
Run :checkhealth for more info
Untitled
set rtp+=~/.local/share/nvim/lazy/denops.vim
set rtp+=~/.local/share/nvim/lazy/skkeleton
cmap <C-j> <Plug>(skkeleton-enable)
" 1. /
" 2. <C-j>
" 3. <Esc>
" 4. /
" 5. <C-j>
" Error detected while processing function skkeleton#handle[1]..skkeleton#request[4]..denops#request[1]..denops#server#request[4]..denops#_internal#server#chan#request[4]..denops#_internal#rpc#nvim#request:
" line 1:
" Error invoking 'invoke' on channel 4:
" Error: Failed to call 'enable' with [{},{"prevInput":"","completeInfo":{"pum_visible":0,"mode":"","selected":-1,"items":[]},"mode":"c","completeType":"native"}]: AssertError: value must be Opts
" at assertOpts (file:///Users/user-name/.local/share/nvim/lazy/skkeleton/denops/skkeleton/main.ts#126.429337:29:11)
" at handle (file:///Users/user-name/.local/share/nvim/lazy/skkeleton/denops/skkeleton/main.ts#126.429337:212:3)
" at enable (file:///Users/user-name/.local/share/nvim/lazy/skkeleton/denops/skkeleton/main.ts#126.429337:131:12)
" at async Session.enable (file:///Users/user-name/.local/share/nvim/lazy/skkeleton/denops/skkeleton/main.ts#126.429337:279:14)
" at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
" at async https://deno.land/x/[email protected]/session.ts:108:18
" at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:29)
" at Session.call (https://deno.land/x/[email protected]/session.ts:207:13)
" at async Service.dispatch (file:///Users/user-name/.local/share/nvim/lazy/denops.vim/denops/@denops-private/service.ts:117:14)
" at async Session.invoke (file:///Users/user-name/.local/share/nvim/lazy/denops.vim/denops/@denops-private/host/nvim.ts:57:16)
" at async Session.dispatch (https://deno.land/x/[email protected]/session.ts:99:12)
" at async https://deno.land/x/[email protected]/session.ts:108:18
" at async Session.handleRequest (https://deno.land/x/[email protected]/session.ts:104:29)
この手順の通りに操作すると再現する
Vim/Neovim双方で再現を確認しました。
if !has('nvim')
set nocompatible
endif
set runtimepath^=~/Repositories/github.com/vim-skk/skkeleton
set runtimepath^=~/Repositories/github.com/vim-denops/denops.vim
imap <C-j> <Plug>(skkeleton-toggle)
" このcmapを除けば再現しない
cmap <C-j> <Plug>(skkeleton-enable)
autocmd User skkeleton-initialize-pre call skkeleton#config({"keepState": v:true})
<C-j>
を押下してskkeletonを有効化する。<Esc>
でノーマルモードに戻り、再びインサートモードに入る。(この時点で keepState
によりskkeletonが再度有効化される)<C-j>
で無効化しようと試みるが無効化できない( l
での無効化は通常通り動作します)ddc.vim + pum.vim で補完をしている時、カーソルが行末にある状態で辞書登録モードに入るとカーソルがずれる
なお、この症状はvirtualeditが有効化されていると発生しない
denopsの立ち上がりが遅いケースがあるので、その状態で立ち上げようとすると入力をキューイングするモードに移行して立ち上がったら一気に変換とかしてみてもいいのかもしれない
現在、日本語入力という動作を実現するためにlanguage-mappingを使用しており、既存のマッピングのほぼ全域を上書きしている。この上書きされる範囲はeskk.vimの物をそのまま借用しており、その中には補完などの機能に関する制御文字も含まれている。
この問題を解決するため、マッピングの定義を必要最低限に絞る(か、あるいはユーザーが100%定義するようにする)ことを検討している。
そのためには、補完のハンドリングを一部していたと思うので、削除して問題ないかの検証を行う必要がある。
skkeleton.vim は ddc.vim と連携して変換候補の入力途中でも候補を補完で表示することができます。
現状ユーザー辞書はソートされて保存されていますが、これを使用順にして保存することで、候補を出す際に最近使用した候補を優先して出すことが可能になります。
skkeleton#mode()では以下の5つのどれか(または空文字)が返ってきますが、変換中などの情報も知りたいと思っています。入力モードとはまた別の話として新たな関数を追加するか、skkeleton#mode()に変更を入れるかは議論の余地があると思います。
eskk.vim では簡単にできたので skkeleton でもやりたい
#22 を作成している際に、skkeletonのおかしな挙動を見付けましたので報告します。
skkeletonの補完候補を、<Tab>
と<C-p>
で選択し、その後何も選択せず補完ウィンドウから抜けた際、
skkeletonの動作が停止し、変換ができなくなります。また、マーカーも残ったままになります。
skkeletonの補完候補を、<C-n>
と<C-p>
で選択した場合、この問題は起こりません。
#22 にも関わってくる問題だとは思いますが、こちらでは原因が分かりませんでした。
お手数ですが、ご確認をお願いします。
OS: Windows 10
neovim-version: NVIM v0.6.0-dev+284-gc2a65921d
skkeleton-version: 2d544f1
" 最小構成
set ambiwidth=double
set rtp+=~\.cache\dein\repos\github.com\vim-denops\denops.vim
set rtp+=~\.cache\dein\repos\github.com\Shougo\ddc.vim
set rtp+=~\.cache\dein\repos\github.com\kuuote\denops-skkeleton.vim
call ddc#custom#patch_global('sourceOptions', {
\ 'skkeleton': {'mark': 'skk', 'matchers': ['skkeleton'], 'sorters': []},
\ })
call ddc#custom#patch_global('sources', ['skkeleton'])
call ddc#enable()
call skkeleton#config({
\ 'globalJisyo': expand('~/.skk/SKK-JISYO.L'),
\ 'userJisyo': expand('~/.skk/.skk-jisyo'),
\})
imap <C-j> <Plug>(skkeleton-enable)
eskk でいう下記のようなカスタマイズを可能にする
autocmd MyAutoCmd User eskk-initialize-pre call s:eskk_initial_pre()
function! s:eskk_initial_pre() abort
let t = eskk#table#new('rom_to_hira*', 'rom_to_hira')
call t.add_map('z ', ' ')
call t.add_map('~', '〜')
call t.add_map('zc', '©')
call t.add_map('zr', '®')
call t.add_map('z9', '(')
call t.add_map('z0', ')')
call eskk#register_mode_table('hira', t)
endfunction
skkeleton_indicator.nvim を作ってるときに気付いたのですが、カタカナモードや半角カタカナモードに遷移した際、skkeleton-mode-changed
イベントの発火が遅れる場合があるようです。
diff --git a/autoload/skkeleton.vim b/autoload/skkeleton.vim
index 03c157e..bc5fda6 100644
--- a/autoload/skkeleton.vim
+++ b/autoload/skkeleton.vim
@@ -83,6 +83,7 @@ endfunction
function! skkeleton#handle(func, key) abort
let ret = denops#request('skkeleton', a:func, [a:key, skkeleton#vim_status()])
+ echomsg '[vim] ' . string([a:key, ret])
if ret =~# "^<Cmd>"
let ret = "\<Cmd>" .. ret[5:] .. "\<CR>"
endif
diff --git a/denops/skkeleton/main.ts b/denops/skkeleton/main.ts
index 23f3fdb..1d57cfd 100644
--- a/denops/skkeleton/main.ts
+++ b/denops/skkeleton/main.ts
@@ -167,6 +167,7 @@ type VimStatus = {
};
async function handle(key: unknown, vimStatus: unknown): Promise<string> {
+ console.log({ key });
ensureString(key);
const { completeInfo, isNativePum, mode } = vimStatus as VimStatus;
const context = currentContext.get();
デバッグ用に↑のようなログを仕込み、Skkeleton で AQAesc とゆっくりキーを叩くと、
[vim] ['a', 'あ']
[denops] { key: "a" }
[vim] ['q', '']
[vim] ['a', 'ア']
[denops] { key: "q" }
[denops] { key: "a" }
[vim] ['^[', '^^^[']
[denops] { key: "\x1b" }
このようになります。A や esc のときはすぐに denops の handle()
のログが表示されていますが、Qのときは次の A が来るまで反応がありません。
↑skkeleton-mode-changed
で描画の更新を行っているのですが、「カナ」の表示が「ア」が表示されるまで遅延しています。
しかし、denops#request()
の返り値が ''
以外、つまり、画面の更新が行われる場合はすぐにイベントが発火するようです。以下の動画では KQAesc の順にキーを叩いています。
[vim] ['k', 'k']
[denops] { key: "k" }
[vim] ['q', '^H']
[denops] { key: "q" }
[vim] ['a', 'ア']
[denops] { key: "a" }
[vim] ['^[', '^^^[']
[denops] { key: "\x1b" }
同種のことは Q だけでなく control+Q のときも起こるのですが、なんとかならないでしょうか。
#46 を頂いたので<s-q>
スタイルで大文字のマッピングを定義できるようになったが直接大文字を渡した際に変換されると便利そう
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.