Programlamayı kullanırken vim auto-complete fonksiyon adlarına, değişkenlere vb. Sahip olmak mümkün müdür?


56

Birçok IDE otomatik olarak fonksiyon isimlerini, değişkenleri, metod isimlerini vs. kullanıcı tiplerinde tamamlar. En iyileri isimleri hem dilin yerleşik kütüphanesinde hem de aynı programın diğer dosyalarında tanımlanmış olanları temel alarak tamamlar.

Örneğin, aşağıdaki Python programını yazarken:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

çizgi eatFotomatik eatFood()olarak uygun bir otomatik tamamlama seçeneği olarak gösterilecektir.

Vim'in bu yeteneği var mı? Öyleyse, nasıl etkinleştirebilirim?

Yanıtlar:


42

Vim'de birçok otomatik tamamlama aroması var. Bir yol SuperTab kullanmak olabilir . Bu, sekme tamamlamayı istediğiniz zaman daha az veya çok kullanmanın bir yolunu sağlar. Bu, Tabbir tamamlama listesi almak için kelimeyi kısmen yazdıktan sonra vurmanıza olanak sağlar . Örneğin, yazarak eatF, ardından Tabgenişletmek içineatFood.

Lütfen aklınızda bulundurun : Bu resimlerin tümü, eylem halindeki örnek giflere bağlanır.

mükemmel tamamlamalar

Vim'in mükemmel başka seçenekleri var. :h ins-completionYerleşik tamamlama seçeneklerinin çeşitliliğini görmek için okumalısınız . Vim Ctrl- XCtrl- kullanarak O, jedi gibi bir python uyumlu eklenti ile birlikte bir tamamlama aroması verebilir. Jedi çok yönlü tamamlama hakkında dokümantasyon verecek şekilde yapılandırılabilir (bu Ctrl- XCtrl- Oyapar). Sonra tamamlama adayları için belgeler bölünmüş bir pencerede görünecektir.

ctrlxctrlo tamamlama

Benzer eklentiler kullanmak, ancak farklı seçenekler kullanmak her türlü davranışa yol açar. Örneğin, otomatik tamamlama isteminde bulunmanız gerekmeyebilir (eğer peşindeyseniz). Bunun yerine, bir kelimenin bazı harflerini (örneğin, 2 veya 3) yazdıktan sonra, bir eklenti bir menüdeki olası tamamlamaları akıllıca sunmayı deneyebilir.

görüntü tanımını buraya girin

Yani kısa cevap evet! Ancak yapılandırma süreci biraz karmaşık olabilir. Mastering vim'in uzun merdivenlerinde bir adım olarak düşünüyorum.


Hepsini denedim ve her zaman SuperTab'e geri döndüm, en az müdahaleci.
craigp

1
Ayrıca, YouCompleteMe eklentisini de seviyorum, çünkü yazarken önerildiği gibi önerileri seçebilir veya yok sayabilirsiniz. Evet, görsel olarak görmezden gelmek zor, ama iş akışımda çok müdahaleci değil çünkü daha az tuşa basma gerektiriyor.
Thriveth

3
Animasyonları "tıklama" olarak değiştirdim, bunlar animasyon animasyonlarına bağlı.
davidlowryduda

1
YouCompleteMe'yi iş bilgisayarımda kullanamıyorum çünkü bağımlılıkları kuracak köküm yok, SuperTab şimdiye kadarki en iyi seçenek.
Charles Clayton

@ mixedmath Benim durumumda superTab çalışmıyor.
alhelal

24

Bu tür bir işlevsellik - yani geçerli dosyayı (ve tüm açık dosyaları) otomatik tamamlama için arama varsayılan olarak aşağıdakilerle etkinleştirilmelidir Ctrl+P:

Kullanılan otomatik tamamlama ekran görüntüsü

Sen gidebilirsiniz n ile ext önerisi Ctrl+N, s ile nceki öneri Ctrl+Pve (sağ öneri sonra eklenecektir) herhangi bir harf yazarak seçin.


1
Editöre (Jasper): Gelecekte yazacağım ya da dosyanın başında olan, daha önce yazdığım bir şeyi tekrar yazmak istiyorum. Bu nedenle ^PIMHO daha doğaldır. Aksi halde düzenleme için teşekkür ederiz (umarım sağ tuşa tıklarsınız ve + 2'nizi alırsınız).
yo

1
Evet, o hayali internet noktalarını yakaladım :) Her zaman öneri listesinin alfabetik olarak sıralanacağını düşündüm ...
Jasper

@Jasper görünüm sırası öyle (en azından benim için kesinlikle, ayrıca yukarıya bakın: tersi world,word,wooddeğil). Öyle ki ^P, en son kullanılan tamamlama işlemi çok kullanışlı (listedeki 3 öğeden nadiren daha uzun bir dosyaya bile geçiyorum).
yo

protip:inoremap <C-Space> <C-N>
wchargin

20

Vim'in yerel olarak tamamlanması için destek var. Vim'in desteklediği çeşitli farklı tamamlamalar hakkında okuyabilirsiniz :h ins-completion.

Genel olarak, bulduğum tüm amaçlar için tamamlanmalar benim isteklerime yetiyor, ancak tamamlanmaların sunduklarının ötesinde daha fazla değer katan bazı tamamlama eklentileri var. NeoComplete , YCM (YouCompleteMe) aynısı için birkaçıdır. Farklı tamamlama türlerini daha doğru bir şekilde birleştirmeye çalıştıkları için daha ileri düzeydedirler ve ayrıca önbellekleme mekanizmalarına sahiptirler, bu yüzden daha hızlı olma eğilimindedirler. YCM, daha iyi IntelliSense sağlamak için harici derleyiciler / araçlarla birlikte çalışma boyutuna bile gidiyor.


9

Evet, vim için otomatik tamamlama komut dosyaları var. "En iyi" seçim programlama dilinize bağlıdır. Örnek kodunuz Python olduğundan Jedi'ye bir göz atmanızı öneririm . Bunun üzerine inşa et Beni tamamlıyorsun , ki diğer dilleri de destekliyor, ama bazen çok büyük. Diğer diller için, uzun vim komut dosyalarına göz atabilirsiniz .


7

Ekleme modunda, bir kelimenin ilk iki karakterini yazın, ardından:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Bu, bir programdaki değişkenlerin adlarını girerken özellikle yararlıdır.

'Complete' seçeneği, anahtar kelimelerin nerede arandığını kontrol eder (dosyalar, etiket dosyaları, tamponlar ve daha fazlasını içerir).

'Completeeopt' seçeneği, tamamlamanın nasıl gerçekleştiğini kontrol eder (örneğin, bir menünün gösterilip gösterilmediği).

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.