Articles

neovim ruby/rails omnicomplete

Aus der Fehlermeldung, die Sie erhalten, sieht es so aus, als ob Ihr Vim keine Ruby-Unterstützung einkompiliert hat.

Sehen Sie sich diesen Codeschnipsel an:

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

Die Fehlermeldung in Fettdruck ist die, die Sie sehen. (Wenn Sie :messages eingeben, sehen Sie wahrscheinlich die andere, explizitere Fehlermeldung über die fehlende Unterstützung für Ruby.)

Sie können bestätigen, dass die Ruby-Unterstützung fehlt, indem Sie den Befehl :version in Vim benutzen, um eine Liste der Funktionen zu erhalten. Sie werden -ruby sehen, da Sie Ruby-Unterstützung vermissen. (Sie würden +ruby sehen, wenn sie verfügbar wäre.)

Nach Ihrer Frage benutzen Sie NeoVim auf Debian Buster, also versuchen Sie vielleicht, das Paket ruby-neovim zu installieren, um zu sehen, ob das das Problem löst und Ruby-Unterstützung auf Ihrem NeoVim aktiviert?

set omnifunc=syntaxcomplete#Complete scheint zu funktionieren. Ich bin mir nicht sicher, ob das der richtige Weg ist?

Damit bekommst du eine gewisse Vervollständigung, aber wahrscheinlich nicht so viel wie mit der Ruby-spezifischen Vervollständigung von rubycomplete.

Die Funktion syntaxcomplete#Complete wird die Syntax-Hervorhebungsregeln von Vim benutzen, um eine Vervollständigung anzubieten, die größtenteils Sprachschlüsselwörter abdeckt, die durch Syntaxregeln hervorgehoben werden.

Siehe :help ft-syntax-omni:

Vim hat die Fähigkeit, fast 500 Sprachen farblich zu markieren. Zu dieser Hervorhebung gehört auch, dass man weiß, welche Schlüsselwörter Teil einer Sprache sind. Für viele Dateitypen wurden bereits eigene Vervollständigungsskripte geschrieben, das Syntaxcomplete-Plugin bietet eine grundlegende Vervollständigung für alle anderen Dateitypen. Es tut dies, indem es die Omni-Vervollständigungsliste mit dem Text auffüllt, von dem Vim bereits weiß, wie er ihn farblich hervorheben kann. Es kann für jeden Dateityp benutzt werden und bietet eine minimale sprachsensitive Vervollständigung.

Das mag also angemessen sein und besser als nichts… Aber ich würde erwarten, dass man eine bessere Vervollständigung erhält, wenn man stattdessen rubycomplete verwendet.

Mit diesen Einstellungen:

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

Dies sind globale Werte und sollen direkt in der vimrc gesetzt werden und nicht in einem Dateityp-Autocmd.

Das könnte wichtig sein, da Sie Probleme mit der Reihenfolge haben könnten (diese werden erst gesetzt, nachdem die vim-ruby-Plugins versucht haben, sie zu inspizieren, was zu einem falschen Ergebnis führt), oder Sie könnten ein unterschiedliches Verhalten von der ersten Ruby-Datei, die Sie bearbeiten, zu den nachfolgenden bekommen (da die erste sie global setzt, werden sie bereits gesetzt sein, wenn die zweite Datei geöffnet wird)

Sie können diese Probleme ganz vermeiden, indem Sie sie direkt setzen, wie vorgesehen:

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