https://github.com/Shougo/ddc.vim
一言でいうと自動補完プラギンです。neocomplcache, neocomplete, deopleteの後継にあたります。
deopleteと違ってneovim用プラギンのvim8への移植由来のつらいポイントがほぼ皆無となっております。pipもpynvimもhugもインストールする必要がなく、かわりにdenoというコマンドのみをインストールする必要があります。 denoはnodejsの後継にあたるものですが、nodejsのnpm由来のつらいポイントが完全皆無となっております (そもそもnpmではないので)。
作者のShougoさん自らによる記事 https://zenn.dev/shougo/articles/ddc-vim-beta (前述のneocomplcacheやそれ以前のautocomplpopの着想の元となったauto-complete.elからの歴史についても言及があります)
使ってみての最大の特徴は、ddcは徹底してddcプラギンに処理を移譲している点です。neocomplcacheやneocompleteやdeopleteはそれらのプラギンを追加インストールせずとも基本的なファイル名補完などが使えましたが、ddcでは本体だけでは基本的に何も補完できません。 ファイル名補完を行うにはddc-fileをインストールする、などという感じです。
本体のインストールは簡単です。 https://github.com/Shougo/ddc.vim#install に従い、denoとdenopsをインストールします。denopsはVimプラギンなので、実質denoだけです。以下、ArchLinuxでの例です
sudo pacman -S deno
前述のように、これだけでは何も補完できません。以下、バッファ補完とファイル名補完を行う実際の例を記述します。
" deinまわりのあれこれ
call dein#add('Shougo/ddc.vim')
call dein#add('Shougo/ddc-matcher_head')
call dein#add('Shougo/ddc-sorter_rank')
call dein#add('LumaKernel/ddc-file')
call dein#add('matsui54/ddc-buffer')
" deinまわりのあれこれ
function! s:init_ddc()
let l:sources = []
call ddc#custom#patch_global('completionMode', 'popupmenu')
call ddc#custom#patch_global('specialBufferCompletion', v:true) " TODO: disable globally and enable certain butfypes
" https://github.com/Shougo/ddc-matcher_head
" https://github.com/Shougo/ddc-sorter_rank
call ddc#custom#patch_global('sourceOptions', {
\ '_': {
\ 'matchers': ['matcher_head'],
\ 'sorters': ['sorter_ascii']},
\ })
" ddc-file
let l:sources += ['file']
call ddc#custom#patch_global('sourceOptions', {
\ 'file': {
\ 'mark': 'F',
\ 'isVolatile': v:true,
\ 'forceCompletionPattern': '/\S*',
\ }})
call ddc#custom#patch_global('sourceParams', {
\ 'file': {
\ 'projFromCwdMaxCandidates': [0],
\ }})
" ddc-buffer
let l:sources += ['buffer']
call ddc#custom#patch_global('sourceOptions', {
\ '_': {'matchers': ['matcher_head']},
\ 'buffer': {'mark': 'B'},
\ })
call ddc#custom#patch_global('sourceParams', {
\ 'buffer': {
\ 'requireSameFiletype': v:false,
\ 'forceCollect': v:true,
\ },
\ })
call ddc#custom#patch_global('sources', l:sources)
call ddc#enable()
endfunction
call s:init_ddc()
うまくいくと以下のような挙動をします。
https://asciinema.org/a/2ZputZZK17kuUqvGxDN0N0rqm
🎉
なんか補完がうまく効かなくてうろたえているシーンが録画されてしまった...あとでデバグしよう...。 あとかっこつけて例ではVimプラギンマネージャとしてdeinを使ってしまったけど、まだ手元ではneobundleなのでこれもはやいとこあれしないと...
Tatsuhiro Ujihisa
GenericFactoryGame の作者。 最近は https://vancouversnowboarding.ca というサイトを運営している。 Vancouverでsnowboardする人はぜひ見てみてください。
Vim歴23年です。以前Vim Hacks を連載していました。
VimConf の運営者の一人です。