Articles

neovim ruby/rails omnicomplete

Z chybové hlášky, kterou dostáváte, se zdá, že váš Vim nemá zkompilovanou podporu Ruby.

Podívejte se na tento úryvek kódu:

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

Tu chybovou hlášku, která je tučně, vidíte. (Pokud zadáte :messages, pravděpodobně uvidíte druhou, explicitnější chybovou hlášku o chybějící podpoře jazyka Ruby.)

To, že podpora jazyka Ruby chybí, můžete potvrdit příkazem :version ve Vimu, který zobrazí seznam funkcí. Zobrazí se -ruby, protože vám chybí podpora jazyka Ruby. (Kdyby byla k dispozici, viděli byste +ruby.)

Z vaší otázky vyplývá, že používáte NeoVim v Debianu Buster, takže možná zkuste nainstalovat balíček ruby-neovim a zjistit, zda to problém vyřeší a zda se podpora Ruby ve vašem NeoVimu zapne?

set omnifunc=syntaxcomplete#Complete Zdá se, že to funguje. Nejsem si jistý, jestli je to správný způsob?

To vám poskytne nějaké doplňování, ale pravděpodobně ne tak bohaté jako doplňování specifické pro Ruby z rubycomplete.

Funkce syntaxcomplete#Complete použije pravidla zvýrazňování syntaxe Vimu a nabídne doplňování vkládání, které z větší části pokrývá klíčová slova jazyka, která jsou zvýrazněna pravidly syntaxe.

Viz :help ft-syntax-omni:

Vim má možnost barevného zvýraznění syntaxe téměř 500 jazyků. Součástí tohoto zvýrazňování je i znalost toho, jaká klíčová slova jsou součástí jazyka. Mnoho typů souborů již má napsané vlastní skripty pro doplňování, doplněk syntaxcomplete poskytuje základní doplňování pro všechny ostatní typy souborů. Dělá to tak, že seznam pro doplňování omni doplňuje textem, který již Vim umí barevně zvýraznit. Lze jej použít pro libovolný typ souboru a poskytuje minimální doplňování s ohledem na jazyk.

Takže to může být dostačující a lepší než nic… Ale očekával bych, že lepšího doplňování dosáhnete, když místo toho použijete rubycomplete.

S těmito nastaveními:

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

Jsou to globální nastavení a mají se nastavovat přímo z vimrc a ne v autocmd filetype.

To může být důležité, protože můžete mít problémy s pořadím (jsou nastaveny až poté, co se je pokusí zkontrolovat zásuvné moduly vim-ruby, což vede k nesprávnému výsledku), nebo můžete mít odlišné chování od prvního upravovaného souboru Ruby k následujícím (protože první soubor je nastavuje globálně, při otevření druhého souboru již budou nastaveny.)

Prostě se těmto problémům úplně vyhněte tím, že je nastavíte přímo, jak je zamýšleno:

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

.