Articles

neovim ruby/rails omnicomplete

Från felmeddelandet du får verkar det som om ditt Vim inte har stöd för Ruby kompilerat in.

Se det här kodutdraget:

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

Felmeddelandet i fetstil är det du ser. (Om du skriver :messages får du förmodligen se det andra, mer explicita felmeddelandet, om att stöd för Ruby saknas.)

Du kan bekräfta att stöd för Ruby saknas genom att använda kommandot :version i Vim för att få en lista över funktioner. Du kommer att se -ruby, eftersom du saknar stöd för Ruby. (Du skulle se +ruby om det fanns tillgängligt.)

Utifrån din fråga använder du NeoVim på Debian Buster, så du kanske kan prova att installera ruby-neovim-paketet för att se om det löser problemet och aktiverar Ruby-stödet på ditt NeoVim?

set omnifunc=syntaxcomplete#Complete verkar fungera. Jag är inte säker på om det är rätt sätt?

Det kommer att ge dig en viss komplettering, men förmodligen inte så rik som den Ruby-specifika kompletteringen från rubycomplete.

Funktionen syntaxcomplete#Complete kommer att använda Vims regler för syntaxmarkering för att erbjuda insatskomplettering, som för det mesta täcker språkets nyckelord som markeras av syntaxregler.

Se :help ft-syntax-omni:

Vim har förmågan att färgsyntaxmarkera nästan 500 språk. En del av denna markering innefattar att veta vilka nyckelord som ingår i ett språk. Många filtyper har redan anpassade kompletteringsskript skrivna för dem, insticksprogrammet syntaxcomplete ger grundläggande komplettering för alla andra filtyper. Det gör detta genom att fylla omni completion-listan med den text som Vim redan vet hur man färgmarkerar. Det kan användas för alla filtyper och ger en minimal språkkänslig komplettering.

Så detta kan vara tillräckligt och bättre än ingenting… Men jag förväntar mig att du får en bättre komplettering genom att använda rubycomplete istället.

Med dessa inställningar:

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

Dessa är globals och är avsedda att ställas in direkt från din vimrc och inte i en filetype autocmd.

Detta kan vara viktigt eftersom du kan få ordningsproblem (dessa sätts först efter att vim-ruby-plugins försöker inspektera dem, vilket ger ett felaktigt resultat), eller du kan få ett annat beteende från den första Ruby-filen du redigerar till de efterföljande (eftersom den första ställer in dem globalt kommer de redan att vara inställda när den andra filen öppnas.)

Undervik dessa problem helt och hållet genom att ställa in dem direkt, som det är tänkt:

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