Articles

neovim ruby/rails omnicomplete

Van de foutmelding die u krijgt, lijkt het erop dat uw Vim geen ondersteuning voor Ruby heeft gecompileerd.

Zie deze codefragment:

if !has('ruby') call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" ) call s:ErrMsg( "Error: falling back to syntax completion" ) " lets fall back to syntax completion setlocal omnifunc=syntaxcomplete#Complete finishendif

De vetgedrukte foutmelding is degene die u ziet. (Als u :messages typt, ziet u waarschijnlijk de andere, meer expliciete foutmelding, over ondersteuning voor Ruby die ontbreekt.)

U kunt bevestigen dat ondersteuning voor Ruby ontbreekt door het :version commando in Vim te gebruiken om een lijst met functies te krijgen. U zult -ruby zien, omdat u Ruby ondersteuning mist. (U zou +ruby zien als het beschikbaar was.)

U gebruikt NeoVim op Debian Buster, dus misschien kunt u proberen het ruby-neovim pakket te installeren om te zien of dat het probleem oplost en Ruby ondersteuning op uw NeoVim mogelijk maakt?

set omnifunc=syntaxcomplete#Complete lijkt te werken. Niet zeker of dat de juiste manier is?

Dat zal je wel wat voltooiing geven, maar waarschijnlijk niet zo rijk als de Ruby-specifieke voltooiing van rubycomplete.

De syntaxcomplete#Complete functie zal Vim’s syntax highlighting regels gebruiken om insert completion te bieden, die voor het grootste deel taal sleutelwoorden dekt die zijn gemarkeerd door syntax regels.

Zie :help ft-syntax-omni:

Vim heeft de mogelijkheid om bijna 500 talen gekleurde syntax highlighting te geven. Onderdeel van deze highlighting is te weten welke trefwoorden deel uitmaken van een taal. Voor veel bestandstypen zijn al aangepaste aanvullingsscripts geschreven, de syntaxcomplete plugin biedt basis aanvullingen voor alle andere bestandstypen. Het doet dit door de omni completion lijst te vullen met de tekst die Vim al kent om te markeren. Het kan gebruikt worden voor elk bestandstype en biedt een minimale taal-gevoelige aanvulling.

Dus dit is misschien voldoende en beter dan niets… Maar ik verwacht dat je een superieure completie krijgt door rubycomplete te gebruiken.

Met deze instellingen:

autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1autocmd FileType ruby,eruby let g:rubycomplete_rails = 1

Dit zijn globals en zijn bedoeld om direct vanuit je vimrc te worden ingesteld en niet in een filetype autocmd.

Dit kan belangrijk zijn omdat je problemen kunt krijgen met de volgorde (deze worden pas ingesteld nadat de vim-ruby plugins ze proberen te inspecteren, wat het verkeerde resultaat oplevert), of je kunt een ander gedrag krijgen van het eerste Ruby bestand dat je bewerkt naar de volgende (omdat de eerste ze globaal instelt, zullen ze al ingesteld zijn wanneer het tweede bestand wordt geopend.)

Vermijd deze problemen gewoon door ze direct in te stellen, zoals de bedoeling is:

let g:rubycomplete_buffer_loading = 1let g:rubycomplete_classes_in_global = 1let g:rubycomplete_rails = 1