문제

사용하고 싶습니다 Ctrl 키+우주 VIM에서 OMNI- 완성 (및 옴니 완성이없는 경우 키워드 완료)의 경우. 나는 웹에서 찾은 것을 시도했다.

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+공간에 대한 두 가지 가능한 값 (터미널/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. 완성을하는 것이 아니라 완성을 시도한 후 두 가지 추가 작업을 수행합니다.

  • Omnicelealtion을 사용하려고 할 때 어떻게 든 <C-n><C-p><C-n>, IMHO는 약칭 할 수 있습니다 <C-n>.
  • 완료가 실패한 경우 백 스페이스를 사용하고 다시 완료를합니다. <C-o><C-x> 하지만 <C-n>, 그냥 의미가 없습니다.

나는 이것이 일부 사용자가 원하는 것이 아니라고 말하는 것은 아니지만 아마도 대부분의 사용자가 원하는 것이 아닐 수도 있습니다! 내 짧은 대답은 신용으로 인정 받고 편집하는 간단한 방법을 제공합니다. 원한다면 이제 쉽게 변경할 수 있습니다 (예 : <Down> 에게 <C-n>, 처음부터 첫 번째 항목을 작성하려면).

iterm2와 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