インテリジェントなC ++自動補完を取得する方法


32

一部のエディター(Windows上のVisual Studioなど)は、C ++を理解するC ++自動補完を行います。たとえば、次の場合:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

Visual Studioでは、オートコンプリートstd::vector<int>はiで始まる唯一のメソッドを知っていますinsert

vimでこの種のオートコンプリートを取得することは可能ですか?


3
YouCompleteMeプラグインはオートコンプリートに用語を学ぶことができ、およびCファミリー言語を理解することができます。
alxndr

@alxndrのドキュメントは、vundleを使用したインストールのme-inケースではかなりわかりにくいものでした。そして、私がそれを使い始めるとすぐに、YCMサーバーがクラッシュしました!
Abhinav Gauniyal

YCMは、システムに大量の負荷を追加するテンプレートの重い(boost.geo)のものがない限り、比較的うまく機能します。一方、私のセットアップは混乱しており、YCMパーツを抽出するのは困難です
...-johannes

@yo 'この質問は、vimをC ++で使用する場合にかなり特有です。その解決策はおそらく、Vimを使用してPerlを作成する人(およびその逆)には適用されません。したがって、c ++は私には問題ないと思われます。もちろん、ViとVim Metaはそれについて議論するのに適切な場所です。
-derobert

2
@AbhinavGauniyalこれは、YCMの使用で私が以前に見た問題に似ています。どのシステムを使用していますか?OSXについては、こちらを参照してください。MacVimを使用していませんが、HomebrewでCMakeをインストールしました。次にcd、YCMプラグインディレクトリに移動して(~/.vim/bundle私にとっては)、実行しました./install --clang-completer
bsmith89

回答:


28

これにはclang_completeが本当に好きです。それにはclangが必要であり、システム内のlibclangの場所を伝える必要があります。その後、それは素晴らしく機能します。

人々はYouCompleteMeを提案するかもしれませんが、正直なところ、そのプラグインは、それが言うことのために非常に肥大化しており、インストールするのに非常に多くのステップを必要とします。また、Vimを複数回使用しました。clang_completeでは満足できませんでした。

これは私が入力したときに得られるものですv.clang-complete


4
同意した。YCMには多くの問題があります(前述のセグメンテーション違反を含む)。そして、何時間も構成した後でも、完全に機能することはありませんでした。
CharlesL

1
:私はYCMサーバがclang_completeを楽しみにして、何度もクラッシュしていた、ここに関連する情報は、他のユーザーを対象としてgithub.com/Rip-Rip/clang_complete/blob/master/doc/...
Abhinav Gauniyal

1
私は逆にした。... YCMは、(インストールするPITAであっても)の罰金を働いたが打ち鳴らす-完全に働いたことはない
Sardathrion -復活モニカ

コードを数行下に表示できるように、それらすべてを隠すことはできますか?
マットC

@MatthewCliatt、何を隠す?ポップアップメニュー?コードには特別なものはありません。return 0ポップアップメニューのすぐ下にあります。
-akshay

8

YouCompleteMe(Link)プラグインは私にとって素晴らしい仕事です。libclangを使用して自動補完機能を生成し、正確な補完を提供します。

特にコンパイルフラグを使用する場合、多くのカスタマイズがあります。プロジェクトごとにpythonスクリプトを編集する「フラグジェネレーター」を編集できます()。しかし、私にとっての主な利点は、Clang Compilation DatabaseLink!)をサポートしていることです。つまり、通常どおりコードをコンパイルし、clangにコンパイルに使用されるすべてのフラグを吐き出し、それらのフラグをYouCompleteMeで使用することができます。オートコンプリートツールでマクロ定義またはシステム内のすべてのヘッダーファイルの場所を手動で入力することなく認識できるようにする場合に非常に便利です。


3

YouCompleteMeのインストールはそれほど難しくなく、かなり安定しています。数年前にclang_completeからYouCompleteMeに移行しました。私が同意する1つのことは、それは確かに巨大なコミット履歴、多くの内部依存性、あなたが気にしないかもしれない多くの言語のサポートで肥大化していますが、それでもその関連サブモジュールのクローンを作成することになります。それは、それがYouComplemeMeの問題であり、それでも…。仕事をします。

私はC ++をより良くサポートするために特別な目的でフォークに取り組んでました。このgifを見て確認してください:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

Clangが提供できる新しいパラメーター情報を活用します。詳細については、この記事http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/から学ぶことができます。


今日、代わりにcoc.nvim + cclsを使用します。
pepper_chico
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.