NeoVim上でSkkeleton

(更新日時 )

カテゴリー:  Tech タグ:  skk vim

定期的に使いたくなるSKKをまた使いはじめてみました。過去にも何度が使っていましたが、 形態素解析に頼らない仮名漢字変換はやっぱり自身で思い通りにタイプできるのでストレスが ありません。

今回は、SKKとしてSkkeletonを使います。

Skkeletonの設定

SkkeletonはDenoを使用し、Typescriptで記述されているようです。

最低限の設定は以下の通りです。 以下はプラグイン・マネージャとしてLazyを 利用した場合の設定です。

    {
        -- SKK
        'vim-skk/skkeleton',
         dependencies = { 'vim-denops/denops.vim', },
        config = function()
            -- imap <C-j> <Plug>(skkeleton-toggle)
            -- cmap <C-j> <Plug>(skkeleton-toggle)
            vim.api.nvim_set_keymap('i', '<C-j>', '<Plug>(skkeleton-toggle)', {noremap = true})
            vim.api.nvim_set_keymap('c', '<C-j>', '<Plug>(skkeleton-toggle)', {noremap = true})
            -- 以下と同等のLUAコード
            -- call skkeleton#config({ 'globalJisyo': '~/.skk/SKK-JISYO.L' })
            vim.api.nvim_exec([[
                call skkeleton#config({ 
                    \  'globalJisyo': expand('~/.skk/SKK-JISYO.L'),
                    \  'eggLikeNewline': v:true,
                    \ })
            ]], false)
        end,
    },

(2023-06-15更新)

当初は補完にDDCを使用していましたが、よく考えるとcmpとバッティングするのでした。 cmpとskkeletonを協調させる cmp-skkeleton というプラグインがあったのでこちらを利用するようにしました。

作者の方の設定サンプルを見ながら、DDCでの補完もできるようしてみました。 候補は出るのですが、候補を選ぶ事ができない。他の補完系のものと バティングしているような気がします。

cmp.setup({
    snippet = {
        expand = function(args)
            vim.fn['vsnip#anonymous'](args.body)
        end
    },

    window = {
        completion = cmp.config.window.bordered({
            border = 'rounded'
        }),
        documentation = cmp.config.window.bordered({
            border = 'rounded'
        }),
    },

    mapping = cmp.mapping.preset.insert({
        ['<Tab>'] = cmp.mapping.select_next_item(),
        ['<S-Tab>'] = cmp.mapping.select_prev_item(),
        ['<C-b>'] = cmp.mapping.scroll_docs(-4),
        ['<C-f>'] = cmp.mapping.scroll_docs(4),
        ['<C-Space>'] = cmp.mapping.complete(),
        ['<C-e>'] = cmp.mapping.abort(),
        ['<CR>'] = cmp.mapping.confirm({
            behavior = cmp.ConfirmBehavior.Replace,
            select = false,
        }),
    }),

    formatting = {
        format = lspkind.cmp_format({
            mode = 'symbol',
            maxwidth = 50,
            ellipsis_char = '...',
        })
    },

    sources = cmp.config.sources({
        { name = 'skkeleton' },
        { name = 'copilot'},
        { name = 'nvim_lsp' },
        { name = 'vsnip' },
        { name = 'nvim_lsp_signature_help' },
        { name = 'calc' },
    }, {
        { name = 'buffer', keyword_length = 2 },
    })
})

コメント

Comments powered by Disqus