🪄
ddc.vimの解説とinit.luaでの設定方法
この記事は筆者が:help ddc
を読んだときのメモです。公式のドキュメント:help ddc
を読もう!
概要
- Shougo氏製のVim/NeoVimプラグイン
- 補完フレームワーク
- denops.vimに依存
- ddc.vim単体では補完はできない
- sourceやfilterを組み合わせることにより自分が必要な機能だけを持った補完を実現できる
製作者による紹介記事
インストール
- denoを何らかの方法でインストールする
-
Shougo/ddc.vim
とvim-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#custom#patch_global()
等で、以下のオプションを設定する。
-
sources
- 利用するソースの一覧- デフォルトは空なので自分で追加する必要がある
- すべて明示的に指定するため、ddc.vimには(他の補完プラグインによくある)「ソースのブラックリスト」というものは無い
-
sourceOptions
- 個別のソース、及び利用するすべてのソースに対するオプション- 「キーがソース名、バリューが「キーがオプション名、バリューがオプションの値のテーブル」のテーブル」を指定する
- すべてのソースに対するオプションの場合は、ソース名として
_
を使う
-
sourceParams
- 個別のソースに対するパラメータ- オプションは
ignoreCase
、isVolatile
などddc.vimによって決められた共通の設定値であるのに対して、パラメータは個別のソースが自由に定義する設定値である。- パラメータの無いソースもある
- パラメータの仕様についてはddc.vimのドキュメントではなく個別のソースのドキュメントを参照する
- 「キーがソース名、バリューが「キーがパラメータ名、バリューがパラメータ値のテーブル」のテーブル」を指定する
- オプションは
Filter
補完候補をフィルターするプラグイン。sourceと同様、ddc.vimにはデフォルトのfilterは無いので自分で設定する必要がある。例:
- ddc-matcher_head
- 入力している文字列から始まる候補だけを表示する
- ddc-fuzzy
- 入力している文字列でファジー検索
- 一致度が高い順に表示
設定方法
sourceと同様ddc#custom#patch_global()
等で、以下のオプションを設定する。
-
filterOptions
- 設定項目はまだないらしい
filterParams
UI
補完候補の表示に使うプラグイン。例によってddc.vimにはデフォルトのUIは同梱されていないので自分で追加する必要がある。例:
- ddc-ui-native
- Vim/NeoVim自体が用意している補完機能を使う
- ddc-ui-pum
- pum.vimを使う
設定方法
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