Articles

neovim ruby/rails omnicomplete

D’après le message d’erreur que vous obtenez, il semble que votre Vim n’ait pas le support de Ruby compilé.

Voir cet extrait de code :

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

Le message d’erreur en gras est celui que vous voyez. (Si vous tapez :messages, vous verrez probablement l’autre message d’erreur, plus explicite, concernant l’absence de support pour Ruby.)

Vous pouvez confirmer que le support Ruby est absent en utilisant la commande :version dans Vim pour obtenir une liste de fonctionnalités. Vous verrez -ruby, puisque le support de Ruby est manquant. (Vous verriez +ruby s’il était disponible.)

D’après votre question, vous utilisez NeoVim sur Debian Buster, alors peut-être essayez d’installer le paquet ruby-neovim pour voir si cela résout le problème et active le support Ruby sur votre NeoVim?

set omnifunc=syntaxcomplete#Complete semble fonctionner. Pas sûr que ce soit la bonne façon de faire?

Cela va vous donner une certaine complétion, mais probablement pas aussi riche que la complétion spécifique à Ruby de rubycomplete.

La fonction syntaxcomplete#Complete utilisera les règles de coloration syntaxique de Vim pour offrir une complétion d’insertion, qui pour la plupart couvre les mots-clés de la langue qui sont mis en évidence par les règles syntaxiques.

Voir :help ft-syntax-omni:

Vim a la capacité de colorer la coloration syntaxique de près de 500 langues. Une partie de cette mise en évidence comprend la connaissance des mots-clés qui font partie d’une langue. De nombreux types de fichiers ont déjà des scripts de complétion personnalisés écrits pour eux, le plugin syntaxcomplete fournit une complétion de base pour tous les autres types de fichiers. Il le fait en remplissant la liste de complétion omni avec le texte que Vim sait déjà mettre en évidence. Il peut être utilisé pour n’importe quel type de fichier et fournit une complétion minimale sensible à la langue.

Donc cela pourrait être adéquat et mieux que rien…. Mais je m’attendrais à ce que vous obteniez une complétion supérieure en utilisant rubycomplete à la place.

Avec ces paramètres:

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

Ce sont des globaux et sont destinés à être définis directement depuis votre vimrc et non dans un autocmd de type de fichier.

Cela peut être important car vous pourriez avoir des problèmes d’ordre (ceux-ci ne sont définis qu’après que les plugins vim-ruby essaient de les inspecter, produisant le résultat incorrect), ou vous pourriez obtenir un comportement différent du premier fichier Ruby que vous éditez aux suivants (puisque le premier les définit globalement, ils seront déjà définis lorsque le second fichier sera ouvert.)

Vous pouvez juste éviter complètement ces problèmes en les définissant directement, comme prévu :

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

.