ddc.vimはShougoさん開発の自動補完プラグインです。
deopleteの後継プラグインで、さらに高速化、高機能化しています。
導入に際してあまり多くの情報が見当たらなかったので備忘録を兼ねてまとめておきます。
NeoVimを使用しているので設定はinit.vimに記述します。
なお一部NeoVim専用の機能や設定を使用していますので、Vimの方は削除する必要があります。
私の環境は以下の通りです
- Macbook Air M2 2022
- NVIM v0.9.1
- Warp Terminal(標準のTerminalでも動作します)
必要なソフトウェアの導入
ddcはdenoを必要とします。
brew install deno
brew install neovim
init.vimでの設定
プラグインのインストール
- 私はインストーラにDeinを使用しています。
- 補完候補のポップアップにはネイティブUIを使用しています。(pum.vimは使用していません)
- 検索はファジー(揺らぎ)検索を可能にしています。
call dein#add('vim-denops/denops.vim')
call dein#add('prabirshrestha/vim-lsp')
call dein#add('mattn/vim-lsp-settings')
call dein#add('Shougo/ddc.vim')
call dein#add('Shougo/ddc-ui-native')
call dein#add('Shougo/ddc-around')
call dein#add('matsui54/ddc-buffer')
call dein#add('shun/ddc-source-vim-lsp')
call dein#add('tani/ddc-fuzzy')
LSPの設定
最初にLeaderキーをSpaceキーに設定しています。以下のキー設定はその前提です。
- 「Space l i」を順番に押すと、インストール可能なLSP一覧が出ます。インストールもここでできます
- 「Space l h」を順番に押すと、カーソル下の関数などの宣言を参照できます
- 「[ e」を順番に押すと、LSPが検出した前のエラーにジャンプします
- 「] e」を順番に押すと、LSPが検出した次のエラーにジャンプします
- 「Ctrl+]」を同時に押すと、カーソル下の関数の宣言箇所へジャンプできます
let mapleader = " "
"===================================
" LSP Settings
"===================================
nnoremap <Leader>li :LspManageServers<CR>
nnoremap <Leader>LI :LspInstallServer<CR>
nnoremap <Leader>ls :LspStatus<CR>
nnoremap <Leader>lh :LspHover<CR>
nnoremap ]d :LspNextDiagnostic<CR>
nnoremap [d :LspPreviousDiagnostic<CR>
nnoremap ]e :LspNextError<CR>
nnoremap [e :LspPreviousError<CR>
nnoremap <C-]> :LspDefinition<CR>
ddc.vimの設定
基本的にVim標準の補完機能とあまり変わらないキー設定になっています。
- 「Ctrl+n」で次の候補を選択
- 「Ctrl-p」で前の候補を選択
- 「Tab」か「Enter」で候補を選択
- 基本的に「.」や「->」などクラスの要素にアクセスするタイミングで補完一覧が勝手に出ます
- 何らかの単語を2文字程度入力すると、周囲のコードやバッファ内のソースコードから似た単語を候補として挙げてくれます
"===================================
" Ddc Settings
"===================================
call ddc#custom#patch_global({
\ 'ui': 'native',
\ 'sources': [
\ 'vim-lsp',
\ 'around',
\ 'buffer',
\ ],
\ 'sourceOptions': {
\ '_': {
\ 'matchers' : ['matcher_fuzzy'],
\ 'sorters' : ['sorter_fuzzy'],
\ 'converters': ['converter_fuzzy'],
\ 'ignoreCase': v:true,
\ },
\ 'around': {
\ 'mark': '[Arround]',
\ },
\ 'buffer': {
\ 'mark': '[Buffer]',
\ },
\ 'vim-lsp': {
\ 'mark': '[LSP]',
\ 'forceCompletionPattern': '\.\w*|:\w*|->\w*',
\ },
\ },
\ 'sourceParams': {
\ 'around': { 'maxSize': 500 },
\ 'buffer': {
\ 'limitBytes': 5000000,
\ 'forceCollect': v:true,
\ 'fromAltBuf': v:true,
\ },
\ },
\})
call ddc#enable()
他にもアドバイス等あればぜひ教えてください。
設定の参考になれば幸いです。