web-dev-qa-db-ja.com

Vimでのオートコンプリート

一言で言えば、Vimエディターのworkingオートコンプリート機能を探しています。 前に議論した LinuxでVimはIDEを完全に置き換え、それは確かに真実ですが、1つの重要な機能が欠けています:オートコンプリート。

私は知っています Ctrl+N過剰なCtags統合タグリストcppcomplete および OmniCppComplete 。残念ながら、これらはどれも「オートコンプリートの動作」の説明に当てはまりません。

  • Ctrl+Nは、classまたはwhileの綴り方を忘れた場合にのみ(うまく)動作します。しかたがない。
  • Ctagsは初歩を示しますが、多くの欠点があります。
  • Taglistは単なるCtagsラッパーであり、その欠点のほとんどを継承します(ただし、listing宣言に対してはうまく機能します)。
  • cppcompleteは単に期待どおりに機能せず、間違ったことを理解できないか、正しく機能していて制限が意図的に。
  • OmniCppCompleteはcppcompleteと同じ問題を抱えているようです。つまり、オートコンプリートが適切に機能しません。さらに、tagsファイルをもう一度手動で更新する必要があります。

私は、最新の本格的なIDEでさえ、優れたC++コード補完を提供していないという事実を知っています。それが、私が今までこの分野でのVimの欠如を受け入れてきた理由です。しかし、私は基本的なレベルのコード補完を求めることはあまり多くなく、実際に生産的な使用に必要だと思います。そこで、少なくとも次のことを達成できるものを探しています。

  • 構文の認識。 cppcompleteの約束(ただし、私には配信しません)、正しい、スコープを意識した以下の自動補完:

    variableName.abc
    variableName->abc
    typeName::abc
    

    そして、実際には、それ以外のものはまったく役に立ちません。

  • 設定可能性。ソースファイルの場所を簡単に指定する必要があります。そのため、スクリプトがオートコンプリート情報を取得する場所を指定する必要があります。実際、必要なインクルードパスを指定するMakefileをディレクトリに持っています。 Eclipseはそこにある情報を解釈できますが、Vimスクリプトも同様に解釈できます。

  • 最新。ファイル内の何かを変更したらすぐに、オートコンプリートにこれを反映させたいです。 notctags(または同等のもの)を手動でトリガーしたい。また、変更はincrementalである必要があります。つまり、1つのファイルのみを変更した場合は、完全にnacceptableになります(ctagsがディレクトリツリー全体を再解析します).

何か忘れましたか?気軽に更新してください。

私は非常に多くの構成および/またはいじくりに慣れていますが、ソリューションをゼロからプログラミングしたくはありません。また、Vimスクリプトのデバッグは得意ではありません。

最後の注意として、JavaとC#に似たものが本当に欲しいのですが、それは望みすぎだと思います:ctagsはコードファイルのみを解析し、JavaとC#の両方が巨大で、インデックスを作成する必要があるプリコンパイル済みフレームワーク。残念ながら、 IDEを使用しない.NETの開発 は、C++よりもさらにPITAです。

244
Konrad Rudolph

YouCompleteMe を試してください。 libclangインターフェースを介してClangを使用し、セマンティックC/C++/Objective-C補完を提供します。これはclang_completeによく似ていますが、かなり高速で、ファジーマッチングを備えています。

上記に加えて、YCMはC#、Python、Go、TypeScriptなどのセマンティックコンプリートも提供します。また、セマンティックサポートを持たない言語の非セマンティック、識別子ベースのコンプリートも提供します。

162
Valloric

clang_complete もあり、これは clangコンパイラ を使用してC++のコード補完を提供しますプロジェクト。このプラグインには、 トラブルシューティングのヒント に関する別の質問があります。

このプラグインは、プロジェクトがコンパイルされている限りかなりうまく機能するように見えますが、大規模なプロジェクトでは非常に遅くなります(タグリストを生成するために完全なコンパイルを試みるため)。

35
Konrad Rudolph

要求されたとおりに、ここで私が以前に与えたコメントです:

これを見てください:

このリンク は、MacOSXでmonodevelopを使用する場合に役立ちます。

幸運と幸せなコーディング。

7
Ric Tokyo

私はちょうどプロジェクトを見つけました Eclim別の質問 でリンクされています。これは、少なくともJava統合に関しては非常に有望に見えます。

5
Konrad Rudolph

私はパーティーに少し遅れましたが、 autocomplpop が役立つかもしれません。

3
romainl

あなたはインテリセンスのようなものを探していますか?

insevim は問題に対処しているようです。

スクリーンショットへのリンク こちら

2
Ric Tokyo

誰かがcode_completeに言及しましたか?

しかし、あなたはctagsが好きではなかったので、これはおそらくあなたが探しているものではありません...

1
Johan