Articles

neovim ruby/rails omnicomplete

Z komunikatu o błędzie, który otrzymujesz, wynika, że twój Vim nie ma skompilowanej obsługi Rubiego.

Zobacz ten fragment kodu:

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

Pogrubiony komunikat o błędzie jest tym, który widzisz. (Jeśli wpiszesz :messages prawdopodobnie zobaczysz inny, bardziej wyraźny komunikat o braku wsparcia dla Rubiego.)

Możesz potwierdzić, że brakuje wsparcia dla Rubiego używając polecenia :version w Vimie, aby uzyskać listę funkcji. Zobaczysz -ruby, ponieważ brakuje Ci wsparcia dla Rubiego. (Zobaczyłbyś +ruby, gdyby była dostępna.)

Z twojego pytania wynika, że używasz NeoVim na Debianie Buster, więc może spróbuj zainstalować pakiet ruby-neovim, aby sprawdzić, czy to rozwiąże problem i włączy obsługę Rubiego w twoim NeoVimie?

set omnifunc=syntaxcomplete#Complete wydaje się działać. Nie jestem pewien, czy to jest właściwy sposób?

To da ci pewne uzupełnienia, ale prawdopodobnie nie tak bogate jak uzupełnienia specyficzne dla Rubiego z rubycomplete.

Funkcja syntaxcomplete#Complete użyje reguł kolorowania składni Vima, aby zaoferować uzupełnianie wstawek, które w większości przypadków obejmuje słowa kluczowe języka, które są wyróżnione przez reguły składni.

Zobacz :help ft-syntax-omni:

Vim ma możliwość kolorowania składni prawie 500 języków. Część tego podświetlania obejmuje wiedzę, jakie słowa kluczowe są częścią języka. Wiele typów plików ma już niestandardowe skrypty uzupełniające napisane dla nich, wtyczka syntaxcomplete zapewnia podstawowe uzupełnianie dla wszystkich innych typów plików. Robi to poprzez wypełnienie listy uzupełniania omni tekstem, który Vim już wie jak podświetlić kolorem. Może być używany dla każdego typu pliku i zapewnia minimalne, wrażliwe na język uzupełnianie.

Więc to może być odpowiednie i lepsze niż nic… Ale spodziewałbym się, że otrzymasz lepsze uzupełnianie, używając rubycomplete zamiast tego.

Z tymi ustawieniami:

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

To są globale i są przeznaczone do ustawienia bezpośrednio z vimrc, a nie w autocmd filetype.

To może być ważne, ponieważ możesz mieć problemy z zamawianiem (są one ustawiane dopiero po tym, jak wtyczki vim-ruby spróbują je sprawdzić, dając niepoprawny wynik), lub możesz uzyskać inne zachowanie od pierwszego edytowanego pliku Ruby do kolejnych (ponieważ pierwszy ustawia je globalnie, będą one już ustawione, gdy drugi plik zostanie otwarty.)

Po prostu unikaj tych problemów ustawiając je bezpośrednio, zgodnie z przeznaczeniem:

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

.