Bu eski bir soru, ama her seferinde ona geri dönmeye devam ediyorum, bir gün Vim'de mükemmel otomatik tamamlama sağlamak için doğru eklenti kombinasyonunu bulacağımı düşünerek solma umuduyla parlıyorum. Arama devam ediyor, ancak birkaç yıl boyunca yaptığım tüm araştırmalar bu.
Her şeyden önce, Vim'in bir kod editörü değil, bir metin editörü olduğunu anlamalısınız . Kod editörleri, IDES, Jetbrains araç takımı, Visual Studio Code, Eclipse vb. Araçlardır.
Vim , kodu doğru bir şekilde "otomatik tamamlayamaz". Otomatik tamamlama için kaynak kodunuzun tanıtımı ve AST'nin analiz edilmesi gerekir. Vim'in 2016'da Vim 8 piyasaya sürülene kadar eşzamansız işlemler yapamayacağını düşünün, bu yüzden bir Vim eklentisinde herhangi bir tür kod içgözlem yazılımını çalıştırmaya çalışmak kabus olacaktır. Bunu yapmamak için Vim ekosisteminin tarihinde pişirilir. Ve bunu yapmaya çalışanların hepsi, Vim için Tern gibi, gerçekten de kullanılacak kabuslar.
Bir metin düzenleyicinin yapabileceği en iyi şey, parçacıklar ve bildiği aynı kelimeleri / satırları / vb. Kodu otomatik olarak tamamlamak istiyorsanız, metin düzenleyicisi değil bir kod düzenleyicisi kullanmalısınız.
Bunlar hepsini denedim seçenekleriniz :
İki kullanışlı klavye kısayolu Ctrl- nyalnızca açık olan geçerli arabelleklere (kod içgözlemesiz) dayalı olarak bir kelimeyi otomatik olarak tamamlar ve Ctrl- xCtrl- lçoğaltmak isterseniz tam bir kod satırını otomatik olarak tamamlar . Muhtemelen biliyorsunuz Ctrl- xCtrl- f, geçerli dosyaya göre yolu içeren bir dosya adını otomatik olarak tamamlayacaktır :pwd
. Desen tamamlama birlikte arama yoksa eklenti hafif yararlı olabilir /\v
.
Varsa , Ctrl- x, Ctrl- o(Vim yazarlarının her seferinde yazmanızı istediği şey) tarafından tetiklenen Vim " Omnicompletion " ile birlikte , varsa bir dizi dile özgü eklentiler. Seçtiğiniz :echo &omnifunc
dosyada Vim tarafından Omnicompletion ayarını yapıp yapmadığınızı görmek için bir dosyada bulunabilirsiniz.
AutoComplPop yazarken yukarıdaki Omnicompletion menüsünü otomatik olarak açmak için.
TabVim'in yerleşik tamamlanmasını tetiklemek için basmanızı sağlayan SuperTab .
Anahtar kelime tamamlama olan NeoComplCache (Vim'in yerleşik tamamlanmasından nasıl farklı olduğu belirtilmez), karmaşık bir .vimrc
kurulum ve snippet tamamlama için NeoSnippet .
exuberant-ctags
Ve DoctorJS
(bir yıldır ölmüş bir Mozilla projesi), TagBar ve etiket dosyalarından tamamlamayı çıkarmak için evde yetiştirilen bir şeyden oluşan bir canavar kombinasyonu .
SnipMate , temel bir etiket tamamlama eklentisi, parçacıklar ile birlikte ve biraz zor olduğu için parçacıkları nasıl ekleyeceğinizi kendiniz öğrenin.
UltiSnips birlikte UltiSnips-Parçacıkları olan farklı yukarıdaki pasajdan.
Tern for Vim , doğru otomatik tamamlamayı elde etmek için gerçek kod tanıtımını yapan gelecek vaat eden bir kütüphane. Bununla birlikte, buggy, çok yavaş, Vim'i çökertecek bellek sızıntıları var ve muhtemelen terkedilebilir.
Snippet'in tamamlanması için evde yetiştirilen bir işlevle birlikte arka planda bir sunucu çalıştıran bulanık türden tamamlanmış bir tamamlama olan YouCompleteMe .
Eclim - Arka planda bir Eclipse sunucusu çalıştırmaya ve Vim'e otomatik olarak tamamladığı intibakları anlatmaya yönelik asil bir girişim. Tern'in yanı sıra çalışır.
Son olarak, Closetag veya delimitMate veya kendkapat veya bir yerli üretim bananagram yazarak otomatik oto etiketlerinin kapatılması ve parantez için.
Bu listedeki hemen hemen her eklenti, bu listedeki hemen hemen her eklenti ile çakışacaktır.
YouCompleteMe , paketin lideri gibi görünüyor , ancak etiket tamamlama ile düzgün bir şekilde çalışmasını sağlayamadım ve kod içgözleminin tamamlanması henüz güçlü değildi.
Benim kişisel görüşüm , Vim otomatik tamamlama dünyasının mevcut durumunun kötü durumda olduğudur. Küçük projeler için yukarıdaki çözümlerden birini kullanabilirsiniz. Çoğunlukla kafanızda tutabileceğiniz basit bir API ile uğraşıyorsanız, kod içermeyen introspection tamamlanması muhtemelen tamam olacaktır. Büyük bir projeyle uğraşıyorsanız veya programlama sırasında tip güvenliği avantajına ihtiyacınız varsa, tam teşekküllü bir IDE ( Eclipse , Visual Studio , WebStorm ) size Vim'den çok daha iyi uyacak.
Bir IDE'nin dezavantajı, elbette, artık Vim'in gücüne sahip olmayacağınızdır. Kabul edilebilir bir Vim moduna sahip tek bir IDE kullanmadım.
Vim, türlenmemiş C benzeri dillere karşı ılımlı bir dil önyargısına sahiptir ve aksi takdirde, dile özgü herhangi bir özelliğin kullanıcılar tarafından eklenti olarak ekleneceği beklentisi vardır. Ne yazık ki, bu parçalanmış bir otomatik tamamlama ekosistemine yol açmıştır. Bazı seçenekler iyi, ancak hiçbir şey mükemmel değil ve nadiren çoğunluk lideri / en iyi uygulama var.
let g:acp_behaviorSnipmateLength=-1
bakın:help autocomplpop
), eklediniz mi?