Akıllı C ++ otomatik tamamlama nasıl elde edilir


32

Bazı editörler (Windows'ta görsel stüdyo gibi) C ++ 'ı anlayan C ++ otomatik tamamlama işlemi yapar. Örneğin, verilen:

#include <vector>

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

Görsel stüdyoda otomatik tamamlama, std::vector<int>i ile başlayan tek yöntemi bilir insert.

Vim'de bu tür bir otomatik tamamlama elde etmek mümkün mü?


3
YouCompleteMe eklentisi otomatik tamamlamak için terimleri öğrenebilir ve C ailesi dillerini anlayabilir.
alxndr

@alxndr Belgelendirme, yeminli kurulum için benim için oldukça kafa karıştırıcıydı. Ve onunla çalışmaya başlar başlamaz YCM sunucusu çöktü!
Abhinav Gauniyal

YCM, benim için oldukça iyi çalışıyor, sisteme ağırbaşlı bir ahlaksızlık ekleyen şablon ağır (boost.geo) şeyler olmadığı sürece. Bu arada kurulum bir karışıklık, YCM parçalarını çıkarmak zor ...
johannes

@ yo 'Bu soru vim'i C ++ ile kullanmaya oldukça özgü. Bunun için çözümler muhtemelen Perl'i yazmak için Vim kullanan bir kişi için geçerli olmaz (ve tersi). Yani c ++ bana iyi geliyor; ama tabii ki Vi ve Vim Meta bunu tartışmak için doğru yer.
derobert, 19

2
@AbhinavGauniyal YCM kullanırken daha önce gördüğüm sorunlara benzer. Hangi sistemdesin? OSX için buraya bakınız . MacVim kullanmıyorum ancak CMake'i Homebrew ile birlikte kurdum. Sonra cdYCM eklenti dizinine girdim ( ~/.vim/bundlebenim için) ve koştum ./install --clang-completer.
bsmith89

Yanıtlar:


28

Bunun için clang_complete'yi gerçekten seviyorum . Klan gerektiriyor ve sisteminizde libclang'ın nerede olduğunu söylemelisiniz. Bundan sonra, harika çalışıyor.

İnsanlar YouCompleteMe'yi önerebilir, ancak dürüst olmak gerekirse, bu eklenti ne söylediği için büyük ölçüde şişirilmiş ve kurulumu çok fazla adım gerektiriyor. Ayrıca birçok kez Vim segfault oldu. Clang_complete ile daha mutlu olamazdım.

Yazarken ne alıyorum v.:clang tamamlama


4
Kabul. YCM ile ilgili birçok sorun yaşadım (bahsedilen segfaults dahil). Ve saatler süren konfigürasyondan sonra bile, asla tam olarak çalışmadı.
CharlesL

1
YCM sunucusu defalarca düştü, clang_complete'yi dört gözle bekliyordum, işte diğer kullanıcılar için alakalı bilgiler: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abhinav Gauniyal

1
Ben tam tersi oldu. YCM iyi çalıştı (kurması PITA olsa bile), ancak clang-complete asla işe yaramadı ...
Sardathrion - Monica

Bunların hepsini gizleyebilir misiniz, böylece kodunuzu birkaç satır aşağı doğru görebilirsiniz.
Matt C,

@MatthewCliatt, ne gizle? Açılan menü? Kodda özel bir şey yok. Sadece return 0açılır pencerenin altında.
akshay

8

YouCompleteMe ( Link ) eklentisi benim için çok iyi iş çıkardı . Otomatik tamamlama özelliğini oluşturmak için libclang'ı kullanır ve doğru tamamlama sağlar.

Özellikle derleme bayraklarıyla çalışırken çok fazla kişiselleştirme yapabilir. Proje başına bir python betiği düzenleyerek "bayrak üreteci" ni düzenleyebilirsiniz ( Örnek ). Ancak, bana göre en büyük avantaj, Clang Derleme Veritabanını ( Link! ) Desteklemesidir . Bu, kodunuzu normal şekilde derleyebileceğiniz ve derleme için kullandığı tüm bayrakları tükürmek için clang isteyebileceğiniz ve bu bayrakları YouCompleteMe ile kullanabileceğiniz anlamına gelir. Otomatik tamamlama aracınızın makro tanımlarınızdan veya sisteminizdeki tüm başlık dosyalarının konumunu manuel olarak yazmaya çalışmaksızın farkında olmasını istiyorsanız çok kullanışlı.


3

YouCompleteMe kurulumu o kadar zor değil ve benim için oldukça istikrarlı oldu, yıllar önce clang_complete'den YouCompleteMe'ye geçtim. Kabul ettiğim bir şey, gerçekten umursamayacağınız ama yine de ilişkili alt modüllerini klonlamakla sonuçlanacak olan büyük bir taahhüt geçmişi, birçok iç bağımlılık ve birçok dile destek sağlamasıdır. Bu, bu YouComplemeMe ile bir sorun, yine de .... bu iş yapıyor.

Ben ettik çatalla üzerinde çalıştı bunu gösteriş bu gif kontrol edebilir, ++ daha iyi destek C'ye özel amaçlı:

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

Bu, Clang'ın sağlayabildiği yeni parametre bilgilerini kullanır, bu konuda daha fazla bilgi edinebilirsiniz: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .


Bugün onun yerine coc.nvim + ccls kullanıyorum.
pepper_chico
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.