Vim için otomatik tamamlama eklentileri var mı?


12

Vim için otomatik tamamlama eklentisi var mı? Burada benim seçeneklerim neler?

Şu anda AutoComplPop kullanıyorum , ancak kullandığım snipMate ile kötü entegrasyon ve Ruby dosyalarında (hatta <100 satır) ölü yavaş var.

Birkaç eklenti daha gördüm, ancak en az bir yıldan beri öldüler. Peki, herhangi bir fikir?


1
ACP burada çok iyi çalışıyor ve SnipMate ile hiçbir sorunum yok. .Vimrc'nize eklemeniz gereken bir ayar var ( let g:acp_behaviorSnipmateLength=-1bakın :help autocomplpop), eklediniz mi?
romainl

Yanıtlar:


16

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 &omnifuncdosyada 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 .vimrckurulum ve snippet tamamlama için NeoSnippet .

  • exuberant-ctagsVe 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.


6

İşte güzel bir tane: YouCompleteMe

Yazarken açılan menü otomatik olarak görünür, ve bunu bir tanımlayıcı çağrıda eğer öyleyse, bulanık seçimi destekler yapar YouCompleteMe partition_finderve gibi bir şey yazın ptf++ dosyası C düzenlerken, açılan öneri listesi içerecektir printfve partition_finderbunlar aynı harfleri içerdiğinden aynı sırada. Adında bir değişkeniniz myBrainvarsa, yazabilirsiniz brnve bunu önerecektir. YouCompleteMe ayrıca önceki kullanım sıklığına göre önerilere öncelik verir.




1

Ben vim OmniComplete adlı yerleşik bir var inanıyorum. Ekleme modunda kullanın ctrl+x,ctrl+o.

Aksi takdirde, ekleme modundan anahtar kelime tamamlama ile yapabilirsiniz ctrl+n. Çağırdığınızda, düzenlediğiniz dosyada bulunan ve açtığınız diğer dosyalarda bulunan kelimelerin olası eşleşmelerini gösteren bir açılır liste sunar. ctrl+nSeçenekler arasında geçiş yapmak için vurmaya devam edin . İstediğiniz kelimeye geldiğinizde, normal gibi yazmaya devam edin.

İstediğiniz kelimeyi, bulamazsa ctrl+nlistesinden sonunda döngüsü ve yazmaya devam edebilirsiniz ya da vurabilir olacak ESCsonra ve bcwgitmek için bkusurlu kelimenin başına ack ve change wistediğini birine ord.


Vim'in yerleşik olanı berbat görünüyor. <cx> <co> tuşlarına her bastığımda "Desen bulunamadı" yazıyor. Ancak, <cn> tuşuna basarsam, tamamlamalar yazılan sözcüğün hemen altında bir açılır menüde görünür. Bu aynı şey mi? Otomatik tamamlama açılır menüsünün bir kısayola basmadan otomatik olarak görünmesini sağlamanın bir yolu var mı?
trusktr

Etkileşim olmadan otomatik tamamlama pop-up yapan bir eklenti farkında değilim, üzgünüm :(. <c-x><c-o>Sadece vim açıkça destek nasıl söylendi şeyler için çalışır.Varsayılan olarak sadece birkaç küçük şey ve şeyler yapabileceğini düşünüyorum CSS tamamlanması gibi, ancak Eclipse gibi bir şey istiyorsanız, bunu sizin için sağlamaya çalışan birkaç vim eklentisi var
Conrad.Dean

1
Ben açılır menü yazarken otomatik olarak görünür kılan YouCompleteMe denilen vim için bir eklenti buldum ve ben bir tanımlayıcı çağrıda eğer öyleyse, bulanık seçimi destekler partition_finderve ben gibi bir şey yazın ptfbir C ++ dosyası düzenlerken, açılan menü hem önerir printfve partition_finderçünkü aynı harfleri aynı sırada içerirler. Adında bir değişkenim varsa myBrain, yazabilirim brnve görünecektir. YouCompleteMe ayrıca önceki kullanım sıklığına göre önerilere öncelik verir. Buraya bir göz atın: valloric.github.io/YouCompleteMe
trusktr

1

Orijinal AutoComplPop yeni bir eklenti SimpleAutoComplPop çatalladım . Rağmen, ruby ​​veya snipMate aşina değilim, bir deneyin olabilir ve bazı geri bildirimler almak için mutluyum :)

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.