上述方式是“某种”工作,但它是如此难以理解,几乎没有人能说出它实际上做了什么。上面的解决方案不好。
简短的回答 - 使用这个:
function! Auto_complete_string()
if pumvisible()
return "\<C-n>"
else
return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
end
endfunction
function! Auto_complete_opened()
if pumvisible()
return "\<Down>"
end
return ""
endfunction
inoremap <expr> <Nul> Auto_complete_string()
inoremap <expr> <C-Space> Auto_complete_string()
这个答案还尊重 Ctrl+Space:<C-Space>
和<Nul>
.
我使用与jedi-vim中的第一种方法类似的方法,但更可定制。
长答案 - 以上内容:
上述答案的整个转义是如此令人困惑,以至于我将上述答案拆分为可读格式:
function! Auto_complete_string()
if pumvisible()
return "\<C-n>"
else
return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
end
endfunction
function! Auto_complete_opened()
if pumvisible()
return "\<c-n>\<c-p>\<c-n>"
else
return "\<bs>\<C-n>"
end
endfunction
inoremap <expr> <Nul> Auto_complete_string()
这清楚地表明了它在做什么。中发生了一些奇怪的事情Auto_complete_opened
。它不仅仅是完成,它在尝试完成后还做了两件事:
- 当尝试使用omnicompletion时,它会以某种方式执行a
<C-n><C-p><C-n>
,恕我直言,它可以缩写为<C-n>
。
- 如果完成不成功,它会使用退格并再次完成,而不是
<C-o><C-x>
but <C-n>
,这没有多大意义。
我并不是说这不是某些用户可能想要的,但它可能不是大多数用户想要的!我的简短回答对此表示赞赏,并为您提供了一种简单的编辑方法。您现在可以根据需要轻松更改内容(例如<Down>
,<C-n>
如果您希望从头开始写入第一个条目)。