Articles

neovim ruby/rails omnicomplete

A hibaüzenetből, amit kapsz, úgy tűnik, hogy a Vim nem támogatja a Ruby-t.

Nézd meg ezt a kódrészletet:

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

A félkövérrel szedett hibaüzenet az, amit látsz. (Ha a :messages-t írja be, valószínűleg a másik, egyértelműbb hibaüzenetet fogja látni, a Ruby támogatás hiányáról.)

A Ruby támogatás hiányát a Vimben a :version paranccsal megerősítheti, hogy hiányzik a Ruby támogatás. Ekkor -ruby fogsz látni, mivel hiányzik a Ruby támogatás. (Ha rendelkezésre állna, akkor +ruby-t látnál.)

A kérdésedből ítélve a NeoVim-et Debian Buster-en használod, ezért talán próbáld meg telepíteni a ruby-neovim csomagot, hátha ez megoldja a problémát, és lehetővé teszi a Ruby-támogatást a NeoVim-en?

set omnifunc=syntaxcomplete#Complete úgy tűnik, működik. Nem biztos, hogy ez a helyes út?

Ez ad némi kiegészítést, de valószínűleg nem olyan gazdag, mint a rubycomplete Ruby-specifikus kiegészítés.

A syntaxcomplete#Complete funkció a Vim szintaxiskiemelő szabályait fogja használni a beillesztési kiegészítés felkínálásához, ami nagyrészt a szintaxis szabályokkal kiemelt nyelvi kulcsszavakra terjed ki.

Vö. :help ft-syntax-omni:

A Vim közel 500 nyelven képes a szintaxis színes kiemelésére. Ennek a kiemelésnek része az is, hogy tudja, milyen kulcsszavak tartoznak egy nyelvhez. Sok fájltípushoz már írtak egyéni kiegészítési szkripteket, a syntaxcomplete plugin alapvető kiegészítést biztosít az összes többi fájltípushoz. Ezt úgy teszi, hogy az omni completion listát feltölti azokkal a szövegekkel, amelyeket a Vim már tud színesen kiemelni. Bármilyen fájltípushoz használható, és minimális nyelvérzékeny kiegészítést biztosít.

Szóval ez talán megfelelő és jobb, mint a semmi… De azt várnám, hogy a rubycomplete használatával jobb kiegészítést kapsz helyette.

Ezekkel a beállításokkal:

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

Ezek globálok, és közvetlenül a vimrc-ből kell beállítani, nem pedig a filetype autocmd-ben.

Ez azért lehet fontos, mert sorrendezési problémáid lehetnek (ezek csak azután kerülnek beállításra, miután a vim-ruby pluginek megpróbálják megvizsgálni őket, ami helytelen eredményt ad), vagy eltérő viselkedést kaphatsz az első Ruby fájlban, amit szerkesztesz, mint a következőben (mivel az első globálisan állítja be őket, a második fájl megnyitásakor már be lesznek állítva.)

Elkerülheted ezeket a problémákat teljesen, ha közvetlenül állítod be őket, a szándék szerint:

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

.