Skip to content

completion

completionkeymap
行全体i_CTRL-X_CTRL-L
'dictionary' のキーワードi_CTRL-X_CTRL-K
'thesaurus' のキーワード, thesaurus-stylei_CTRL-X_CTRL-T
編集中と外部参照しているファイルのキーワードi_CTRL-X_CTRL-I
タグi_CTRL-X_CTRL-]
ファイル名i_CTRL-X_CTRL-F
定義もしくはマクロi_CTRL-X_CTRL-D
Vimのコマンドラインi_CTRL-X_CTRL-V
ユーザー定義補完i_CTRL-X_CTRL-U
オムニ補完i_CTRL-X_CTRL-O
スペリング補完i_CTRL-X_s
'complete' のキーワードi_CTRL-N i_CTRL-P

オムニ補完とユーザー定義補完は機構としては全く同じですが使用目的が異なります。オムニ補完は'filetype'に応じた賢い補完を提供するためにある一方、ユーザー定義補完はユーザーが任意の補完を行うことができるよう提供されています。

keymap

vim
set completeopt=menuone,noinsert

" 補完表示時のEnterで改行をしない
inoremap <expr><CR>  pumvisible() ? "<C-y>" : "<CR>"
inoremap <expr><C-n> pumvisible() ? "<Down>" : "<C-n>"
inoremap <expr><C-p> pumvisible() ? "<Up>" : "<C-p>"

completeopt

自動トリガー

InsertCharPre

completefunc

vim
function! Complete(findstart, base)
    if a:findstart
        return 補完を開始する列の位置
    endif
    return 補完の候補
endfunction

set completefunc=Complete

completefunc plugins

sekme.nvim

lua
vim.bo[bufnr].completefunc = "v:lua.trigger_sekme"

complete関数

built-in lsp completion

v0.11.0

lua
vim.lsp.completion.enable(true, client.id, bufnr, { autotrigger = true })

https://github.com/neovim/neovim/blob/master/runtime/lua/vim/lsp/completion.lua#L718

https://github.com/neovim/neovim/blob/master/runtime/lua/vim/lsp/completion.lua#L615