Frage

ich verwenden möchte Strg + Space für omni-Abschluss (und Keyword-Abschluss, wenn es keine omni-Abschluss) in vim. Ich habe schon versucht, diese, die ich irgendwo im Internet gefunden:

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

jedoch ist es nicht funktioniert. Jeder, der sich mit Strg + Space für zu dieser, der mir den richtigen Weg zeigen kann (was funktioniert), es zu tun?

Bemerkenswert ist, dass es in der Terminal-Version von vim arbeiten muß NICHT gvim.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

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>

Andere Tipps

Das oben gezeigte Art und Weise ist „Art“ zu arbeiten, aber es ist so unleserlich, dass fast niemand konnte sagen, was es tatsächlich der Fall ist. Die Lösung oben ist nicht gut.

Kurzantwort - Hiermit können Sie:

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()

Diese Antwort achtet auch, dass es zwei mögliche Werte (je nach Endgerät / gvim usage) für Strg + Leertaste: <C-Space> und <Nul>.

Ich verwende einen ähnlichen Ansatz wie die ersten in jedi-vim , aber anpassbar.


Lange Antwort - Was die oben tut:

Die ganze Entkommen der obigen Antwort ist so verwirrend, dass ich die oben genannte Antwort in ein lesbares Format aufgeteilt haben:

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()

Dies zeigt deutlich, was es tut. Es gibt einige seltsame Dinge in Auto_complete_opened passiert. Es ist nicht nur Vollendung tun, es tut zwei weitere Dinge nach zu vervollständigen versuchen:

  • Wenn die omnicompletion zu verwenden versuchen, es irgendwie nicht ein <C-n><C-p><C-n>, die nur abgekürzt werden IMHO könnte <C-n>.
  • Bei Abschluss ist nicht erfolgreich, eine Backspace verwendet und hat einen Abschluss wieder, nicht <C-o><C-x> aber <C-n>, die gerade nicht viel Sinn macht.

Ich sage nicht, dass dies nicht das, was einige Benutzer wünschen können, aber es ist wahrscheinlich nicht das, was die meisten Benutzer wollen! Meine kurze Antwort nimmt, dass in der Kredit- und gibt Ihnen eine einfache Möglichkeit, es zu bearbeiten. Sie können nun nur leicht Dinge ändern, wenn Sie wollen (zum Beispiel <Down> <C-n>, wenn Sie der erste Eintrag wollen von Anfang an geschrieben werden auf).

Für iterm2 und vim diese Linien funktioniert für mich, ich habe von jedi-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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top