回答:
以下は簡単なモックアップの回答(つまり、機能しないか、何かが壊れるまで機能します)ですが、「可能」であることを示しています。
augroup completion
autocmd!
autocmd CompleteDone * call PostCompletion()
augroup END
function! PostCompletion()
if !empty(v:completed_item)
"check if text after current cursor position is part of the match
let crt_word = expand('<cWORD>')
let compl_word = v:completed_item['word']
let lcw = len(compl_word)
let leftover = strpart(crt_word, lcw)
let lfl = len(leftover)
if lfl > 0
let endcompl = strpart(compl_word, lcw - lfl)
if leftover ==# endcompl
let cpos = getcurpos()
normal dW
call setpos('.', cpos)
endif
endif
endif
endfunction
上記のコードが実行しようとしているのは、完了後、カーソルの下のWORDが完了した単語よりも長いかどうかを確認し、そうであれば、「残り」が完了の最後の部分と一致するかどうかをさらに確認します(例では、 "関数")。含まれている場合、WORDの残りの部分が削除されます(これは、カーソル位置についていくつかのことを想定しています)。
(私はこれをすべて達成するためのもっと賢い方法があると確信しています、そしてそれらを見てみたいです!)