🗒

ddc.vimでvim-vsnipを使用するときの設定(lua)

2023/08/13に公開

以前はddc.vimvim-snipを組み合わせて使用するときはvim-vsnip-integを使用すればよかったのですがvim-vsnip-integのアップデートによりddc.vimサポートが廃止され現在はddc-source-vsnipを使用する必要があります。

必要なプラグイン

vim-vsnip-integは使用しないので削除してください。

設定

Vim scriptで設定する方法はddc-source-nvim-lspのREADMEに記述されています。

call ddc#custom#patch_global('sources', ['nvim-lsp'])
call ddc#custom#patch_global('sourceOptions', #{
      \   nvim-lsp: #{
      \     mark: 'lsp',
      \     forceCompletionPattern: '\.\w*|:\w*|->\w*',
      \   },
      \ })
call ddc#custom#patch_global('sourceParams', #{
      \   nvim-lsp: #{
      \     snippetEngine: denops#callback#register({
      \           body -> vsnip#anonymous(body)
      \     }),
      \     enableResolveItem: v:true,
      \     enableAdditionalTextEdit: v:true,
      \   }
      \ })

私はinit.luaに全ての設定を書いているためここではluaでの設定を紹介します。
不要そうな部分は削ってあります。

vim.fn["ddc#custom#patch_global"]({
    sources = {
        'nvim-lsp',
    },
    sourceOptions = {
        ["nvim-lsp"] = {
            mark = '[LSP]',
            forceCompletionPattern = {[['\.\w*|:\w*|->\w*']]},
        },
    },
    sourceParams = {
        ["nvim-lsp"] = {
            snippetEngine = vim.fn["denops#callback#register"](function(body) vim.fn["vsnip#anonymous"](body) end),
            enableResolveItem = true,
            enableAdditionalTextEdit = true,
        },
    },
})

-- キーマップ(自由に)
vim.api.nvim_create_autocmd('InsertEnter', {
    callback = function(ev)
        vim.keymap.set({'i', 's'}, '<C-l>', function() return vim.fn['vsnip#available'](1) == 1 and '<Plug>(vsnip-expand-or-jump)' or '<C-l>' end, { expr = true, noremap = false })
        vim.keymap.set({'i', 's'}, '<Tab>', function() return vim.fn['vsnip#jumpable'](1) == 1 and '<Plug>(vsnip-jump-next)' or '<Tab>' end, { expr = true, noremap = false })
        vim.keymap.set({'i', 's'}, '<S-Tab>', function() return vim.fn['vsnip#jumpable'](-1) == 1 and '<Plug>(vsnip-jump-prev)' or '<S-Tab>' end, { expr = true, noremap = false })
        vim.keymap.set({'n', 's'}, '<s>', [[<Plug>(vsnip-select-text)]], { expr = true, noremap = false })
        vim.keymap.set({'n', 's'}, '<S>', [[<Plug>(vsnip-cut-text)]], { expr = true, noremap = false })
    end,
})
vim.g.vsnip_filetypes = {}

削った部分の設定は私のdotfilesリポジトリのinit.luaに書いてあるので気になる方は確認してください。

Discussion