Articles

neovim ruby/rails omnicomplete

From the error message you are getting, it seems your Vim has not Ruby support compiled in.

See this code snippet:

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

The error message in thick is that you are seen.Why ?エラーメッセージは、あなたが見たことがあるものです。 (:messages と入力すると、Ruby のサポートがないという、より明確なエラーメッセージが表示されます。)

Vim の :version コマンドを使って機能のリストを取得することで、Ruby のサポートがないことを確認することができます。 Rubyのサポートが欠落しているので、-rubyと表示されるでしょう。 (利用可能であれば +ruby と表示されます。)

質問からすると Debian Buster で NeoVim を使っているようなので、ruby-neovim パッケージをインストールして問題が解決するかどうか、NeoVim で Ruby をサポートできるようになるかどうかを試してみてはどうでしょうか?

set omnifunc=syntaxcomplete#Complete がうまくいくようです。 これが正しい方法かどうかはわかりませんが、

これである程度補完されますが、おそらく rubycomplete の Ruby 固有の補完ほどは豊かではないでしょう。

syntaxcomplete#Complete 関数は Vim のシンタックスハイライト規則を使用して挿入補完を提供し、ほとんどの場合、シンタックス規則によってハイライトされる言語キーワードをカバーします。 この強調表示の一部には、どのキーワードが言語の一部であるかを知ることが含まれています。 多くのファイルタイプにはすでにカスタム補完スクリプトが書かれていますが、syntaxcomplete プラグインはその他のすべてのファイルタイプに対して基本的な補完機能を提供します。 このプラグインは、Vim がすでにカラーハイライトする方法を知っているテキストをオムニ補完リストに入力することでこれを行います。 どのようなファイルタイプにも使用でき、言語に依存しない最小限の補完機能を提供します。

つまり、これは十分で、ないよりはましかもしれません…

これらの設定:

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

これらはグローバルで、vimrc から直接設定することを目的としており、filetype autocmd ではありません。

これは、順序の問題 (これらは vim-ruby プラグインがそれらを検査しようとした後に設定され、正しくない結果を生成します) や、最初に編集した Ruby ファイルとそれ以降のファイルで異なる動作 (最初のものはそれらをグローバルに設定するので、2番目のファイルを開いたときにはすでに設定されています。) があるかもしれないので重要かもしれません:

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

目的通り、それらを直接設定してこれらの問題を完全に避けることができます。