🪄

ddc.vimの解説とinit.luaでの設定方法

2022/12/25に公開

この記事は筆者が:help ddcを読んだときのメモです。公式のドキュメント:help ddcを読もう!

概要

  • Shougo氏製のVim/NeoVimプラグイン
  • 補完フレームワーク
  • denops.vimに依存
  • ddc.vim単体では補完はできない
  • sourceやfilterを組み合わせることにより自分が必要な機能だけを持った補完を実現できる

製作者による紹介記事

インストール

  1. denoを何らかの方法でインストールする
  2. Shougo/ddc.vimvim-denops/denops.vimをインストールする

環境

  • Windows 11
  • NeoVim 0.8.0
  • denops.vim - commit ec67c68cbc5eec720a34749479f053b46c8c9f07
  • ddc.vim - commit 601ec660a9912e650a19f8b7dd2168f02c4bf04a

設定

ddc#custom#patch_global()関数によって設定を変更できる。

call ddc#custom#patch_global('key', 'value')

複数も可

call ddc#custom#patch_global(#{
	key1: 'value1',
	key2: 'value2',
})

ファイルタイプ固有の設定はddc#custom#patch_filetype()を用いる。

call ddc#custom#patch_filetype(['c', 'cpp'], 'sources', ['around'])

Luaの場合はこのようにすると動いた。

vim.fn["ddc#custom#patch_global"]('key', 'value')

概念

Source

補完候補を提供するプラグイン。ddc.vimにはデフォルトのsourceは無いので自分で追加する必要がある。例:

  • ddc-source-around
    • カーソル周辺の単語補完
  • ddc-file
    • ファイルパス
  • ddc-dictionary
    • 辞書を使った補完
  • ddc-nvim-lsp
    • LSPを使った補完

ddc-source · GitHub Topics

設定方法

ddc#custom#patch_global()等で、以下のオプションを設定する。

  • sources - 利用するソースの一覧
    • デフォルトは空なので自分で追加する必要がある
    • すべて明示的に指定するため、ddc.vimには(他の補完プラグインによくある)「ソースのブラックリスト」というものは無い
  • sourceOptions - 個別のソース、及び利用するすべてのソースに対するオプション
    • 「キーがソース名、バリューが「キーがオプション名、バリューがオプションの値のテーブル」のテーブル」を指定する
    • すべてのソースに対するオプションの場合は、ソース名として_を使う
  • sourceParams - 個別のソースに対するパラメータ
    • オプションはignoreCaseisVolatileなどddc.vimによって決められた共通の設定値であるのに対して、パラメータは個別のソースが自由に定義する設定値である。
      • パラメータの無いソースもある
      • パラメータの仕様についてはddc.vimのドキュメントではなく個別のソースのドキュメントを参照する
    • 「キーがソース名、バリューが「キーがパラメータ名、バリューがパラメータ値のテーブル」のテーブル」を指定する

Filter

補完候補をフィルターするプラグイン。sourceと同様、ddc.vimにはデフォルトのfilterは無いので自分で設定する必要がある。例:

  • ddc-matcher_head
    • 入力している文字列から始まる候補だけを表示する
  • ddc-fuzzy
    • 入力している文字列でファジー検索
    • 一致度が高い順に表示

ddc-filter · GitHub Topics

設定方法

sourceと同様ddc#custom#patch_global()等で、以下のオプションを設定する。

  • filterOptions
    • 設定項目はまだないらしい
  • filterParams

UI

補完候補の表示に使うプラグイン。例によってddc.vimにはデフォルトのUIは同梱されていないので自分で追加する必要がある。例:

  • ddc-ui-native
    • Vim/NeoVim自体が用意している補完機能を使う
  • ddc-ui-pum
    • pum.vimを使う

ddc-ui · GitHub Topics

設定方法

sourceと同様ddc#custom#patch_global()等で、以下のオプションを設定する。

  • ui
  • uiOptions
  • uiParams

設定の例

:he ddc-examplesも参照

パッケージマネージャーはvim-jetpack、UIはnative、sourceはaroundのみ、filterはddc-fuzzyを使う例。

ddc-ui-nativeを使って、かつ<C-p><C-n>で選択する場合はキーマップのカスタマイズはしなくても使える。

vim.cmd('packadd vim-jetpack')
require('jetpack.paq') {
  {'tani/vim-jetpack', opt = 1},
  {'Shougo/ddc.vim'},
  {'vim-denops/denops.vim'},
  {'Shougo/ddc-ui-native'},
  {'Shougo/ddc-source-around'},
  {'tani/ddc-fuzzy'},
}

vim.fn["ddc#custom#patch_global"]('ui', 'native')  -- uiは一番最初に設定する必要がある

vim.fn["ddc#custom#patch_global"]('sources', {'around'})

vim.fn["ddc#custom#patch_global"]('sourceOptions', {
  _ = {
    matchers = {'matcher_fuzzy'},
    sorters = {'sorter_fuzzy'},
    converters = {'converter_fuzzy'},
  }
})

vim.fn["ddc#enable"]()

Discussion