上記の方法は「ある程度」機能していますが、非常に読みにくいため、実際に何をするかを言う人はほとんどいません。上記の解決策は良くありません。
簡単な回答 - これを使用します。
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
ます。完了を行うだけでなく、完了を試みた後に次の 2 つの追加処理を実行します。
- omnicompletion を使用しようとすると、何らかの形で が実行されますが
<C-n><C-p><C-n>
、これは単に に省略される可能性があり<C-n>
ます。
- 補完が失敗した場合、バックスペースを使用して再度補完を行います
<C-o><C-x>
が<C-n>
、あまり意味がありません。
これが一部のユーザーの望むものではないと言っているわけではありませんが、ほとんどのユーザーが望むものではないでしょう! 私の短い答えはそれを信用して、それを編集する簡単な方法を提供します. 必要に応じて簡単に変更できるようになりました (たとえば、最初のエントリを最初から書きたい場合) <Down>
。<C-n>