質問

使いたい Ctrl+空間 vim のオムニコンプリート (オムニコンプリートがない場合はキーワード補完) 用。私はウェブ上のどこかで見つけたこれを試してみました:

inoremap <expr> <c-space> pumvisible() ? "\<C-n>" : "\<C-x>\<C-o>\<C-n>\<C-p>\<C-r>=pumvisible() ? \"\\<Down>\" : \"\\<CR>\""

しかし、機能しません。使っている人は誰でも Ctrl+空間 これについても、正しい方法(うまくいく方法)を誰が教えてくれるのでしょうか?

注目に値するのは、gvim ではなく vim のターミナルバージョンで動作する必要があることです。

役に立ちましたか?

解決

これを試してください:

inoremap <expr> <C-Space> pumvisible() \|\| &omnifunc == '' ?
\ "\<lt>C-n>" :
\ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" .
\ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" .
\ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>"
imap <C-@> <C-Space>

他のヒント

上記の方法は「ある程度」機能しますが、非常に判読しにくいため、実際に何を行うのかを説明できる人はほとんどいません。 上記の解決策は良くありません。

短い回答 - これを使用します:

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 に 2 つの可能な値 (ターミナル/gvim の使用状況に応じて) があることも考慮しています。 <C-Space> そして <Nul>.

最初のアプローチと同様のアプローチを使用します。 ジェダイヴィム, 、しかしさらにカスタマイズ可能。


長い回答 - 上記の内容:

上記の回答のエスケープ全体が非常に混乱するため、上記の回答を読みやすい形式に分割しました。

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 つのことを実行します。

  • オムニコンプリートを使用しようとすると、どういうわけか <C-n><C-p><C-n>, 、私見では単に次のように略すことができます <C-n>.
  • 完了が失敗した場合は、バックスペースを使用して完了を再度実行します。 <C-o><C-x> しかし <C-n>, 、あまり意味がありません。

これは一部のユーザーが望んでいることではないとは言いませんが、おそらくほとんどのユーザーが望んでいることではありません。私の短い答えはそれを称賛し、それを編集する簡単な方法を提供します。必要に応じて簡単に変更できるようになりました (たとえば、 <Down><C-n>, 、最初のエントリを最初から書き込む場合)。

iterm2とvimのためにこれらの行が私の作品、私は

ジェダイ-VIMからもらいました
" Next three lines are to enable C-Space to autocomplete, omnicomplete
inoremap <C-Space> <C-x><C-o>
imap <buffer> <Nul> <C-Space>
smap <buffer> <Nul> <C-Space>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top