Özetle, Vim editörü için çalışan bir otomatik tamamlama özelliği arıyorum . Ben ettik önce savundu olduğunu Vim tamamen Linux altında bir IDE değiştirir ve bu kesinlikle doğru iken, bu önemli bir özelliğe sahip değil: otomatik tamamlama.
Bilmem Ctrl+ N, Coşkulu Ctags entegrasyonu , Taglist , cppcomplete ve OmniCppComplete . Ne yazık ki, bunların hiçbiri "çalışan otomatik tamamlama:"
- Ctrl+N nasıl hecelendiğini unutursan iyi çalışır (
class
ya da)while
. Oh iyi. - Ctags size ilkeleri sunuyor ama birçok dezavantajı var.
- Taglist sadece bir Ctags paketleyicisidir ve bu nedenle dezavantajlarının çoğunu devralır ( bildirimleri listelemek için iyi çalışır ).
- cppcomplete vaat ettiğiniz gibi çalışmıyor ve neyi yanlış yaptığımı ya da doğru bir şekilde “çalışıyor” ve sınırlamalar tasarım gereği olup olmadığını anlayamıyorum .
- OmniCppComplete , cppcomplete ile aynı sorunlara sahip gibi görünüyor, yani otomatik tamamlama düzgün çalışmıyor. Ayrıca,
tags
dosyanın bir kez daha manuel olarak güncellenmesi gerekir.
Modern, tam gelişmiş IDE'lerin bile iyi C ++ kodu tamamlama sunduğunun farkındayım. Bu yüzden şimdiye kadar Vim'in bu alandaki eksikliğini kabul ettim. Ancak, kod tamamlamanın temel bir düzeyinin sormak için çok fazla olmadığını ve aslında verimli kullanım için gerekli olduğunu düşünüyorum. Bu yüzden en azından aşağıdaki şeyleri başarabilecek bir şey arıyorum.
Sözdizimi farkındalığı . cppcomplete vaat ediyor (ama benim için teslim etmiyor), aşağıdakilerin doğru, kapsam farkında otomatik tamamlanması:
variableName.abc variableName->abc typeName::abc
Ve gerçekten, başka bir şey tamamen işe yaramaz.
Yapılandırılabilirlik . (Kolay) kaynak dosyaları nerede ve bu nedenle komut dosyası otomatik tamamlama bilgilerini alır nerede belirtmeniz gerekir. Aslında, benim dizininde gerekli dahil yollarını belirten bir Makefile var. Eclipse orada bulunan bilgileri yorumlayabilir, neden bir Vim betiği olmasın?
Güncellik . Dosyamdaki bir şeyi değiştirir değiştirmez otomatik tamamlamanın bunu yansıtmasını istiyorum. Ben do not manuel tetik istiyorum
ctags
(ya da bir şey karşılaştırılabilir). Ayrıca, değişiklikler olmalıdır artırımlı Ben tamamen bu sadece bir dosya değiştirdik zaman yani kabul edilemez içinctags
tüm dizin ağacını (büyük olabilir) yeniden ayrıştırmak için.
Bir şey unuttum mu? Güncellemek için çekinmeyin.
Oldukça fazla yapılandırma ve / veya tinkering ile rahatım, ancak sıfırdan bir çözüm programlamak istemiyorum ve Vim komut dosyalarında hata ayıklama konusunda iyi değilim.
Son bir not, gerçekten Java ve C # için benzer bir şey istiyorum ama bunun için umut çok şey var: ctags
sadece kod dosyalarını ayrıştırır ve hem Java hem de C # endekslenmesi gereken büyük, önceden derlenmiş çerçeveler var. Ne yazık ki, IDE olmadan .NET geliştirmek C ++ 'dan daha fazla bir PITA.
clang_complete
sonuçların önbelleğe alınamaması ve kısmi derleme nedeniyle teknik olarak en sağlam ancak son derece yavaştır. Tüm cevapları denemediğimi itiraf etmeliyim çünkü bazıları kıvrık, zaman alıcı bir kurulum gerektiriyor. Kullanılabilir bir eklenti için nefesimi tutacağım, çünkü clang sonunda geliştiricilerin C ++ kaynaklarından AST oluşturmalarına izin veriyor (şimdiye kadar C ++ için iyi ücretsiz ayrıştırıcılar yoktu).
clang_complete
Son zamanlarda denedin mi? libclang
Şimdi önbellekleme ile kullanılabilir ve bu nedenle daha hızlı olmalıdır.
formatted like this
.)
sh
(yani benim kütüphanemde) ve ardından sınıfımın kısaltmasıyla başlar. ÖrneğinshP
içinParser
sınıf. Daha sonra tek yapmanız gerekenshP
CTRL + p (veya isterseniz CTRL + n) yazmak ve vurmak ve sınıf üyelerini son kullanımdan önce (veya CTRL + n ise ilk önce sondan) almak