Emacs'ta kod tamamlama nasıl yapılır?


20

Emacs'ın kod tamamlamayı desteklediğini biliyorum. Ama dürüst olmak gerekirse, en azından tamamen yeni olduğum bir şey için hiç iyi bir SSS okuyucusu olmadım. Ben ne indirmek ve nasıl emacs C ++ ve Java benim için bazı akıllı kod tamamlama yapabilir yapmak merak ediyorum. Yoksa birçok ana dil için kod tamamlama yapan herhangi bir paket var mı?

Yanıtlar:


27

Emacs'ta her türlü tamponda çalışmanın temel yolu, vuruşla kullanılan dinamik kısaltmadırM-/ (aka alt+ /)

Bu, geçerli arabellekte veya şu anda açık olan diğer arabelleklerde zaten var olan diğer dizeleri çoğaltmak için metni genişletir.

C ++ veya Java (veya diğerleri) için dile özgü daha kapsamlı kod tamamlama için bir kod şablonlama veya snippet paketine bakmak istersiniz. StackOverflow ile ilgili bu soruda tartışılan bazıları var . Bu tartışmalarda yaygın olarak bahsedilenlerden biri yasnippet'tir - bu yayında bir emacs blogunda bir ekran görüntüsü var .


+1. Ayrıca standart kitaplığı complete.eldenemek isteyebilirsiniz . Çok eski ve az biliniyor, ancak sağladığı tampon içi tamamlama türü faydalı olabilir. M-x find-library complete, ardından dosyadaki Yorum'u okuyun.
Drew

21

@ Doug'un cevabı biraz güncel değil ve odağı önceden tanımlanmış snippet'leri kullanarak kod genişletmeye odaklanıyor.

Bence OP'nin sorusu intellisense ile ilgilidir (örneğin, bir sınıfın otomatik tamamlama yöntemi adı).

  1. hippi genişletmek eskiden popüler, sözdizimi analizörü emacs etiketleri . Bu yüzden ctags'ın desteklediği tüm dilleri destekler (C ++ , Java dahil). Ancak sonuç mükemmel değildir, çünkü ctags kodu analiz etmek için yalnızca normal ifade kullanır. Ayrıntılar için init-hippie-expand.el dosyasına bakın. Aşağıdaki öğelerin değerini kontrol ederek başlayabilirsinizhippie-expand-try-functions-list

  2. otomatik tamamlama , süslü kullanıcı arayüzü (konsol penceresinde bile açılır menü) bulunan modern bir programdır. Clang'ı arka uç olarak kullanırsanız . Zeka çok daha iyi. Clang'ı çalıştırmak için, auto-complete eklentisi olan auto-complete-clang'ı yüklemeniz gerekir. Yalnızca clang'ın desteklediği dili destekler (C / C ++ / Obj-C). As Sylvain Benner işaret kullanabileceğiniz emacs-eclim aslında Tutulma yürütülebilir çağıran java ayrıştırma arka plan olarak. Böylece otomatik tamamlama java'yı destekleyebilir. Ayrıntılar için init-auto-complete.el dosyasına bakın.

  3. anlambilim , hem kullanıcı arayüzünü hem de arka uç ayrıştırma motorunu sağlar. Yavaş. Açılır kullanıcı arayüzü TAMAM, ancak X penceresi gerektiriyor. Akıl sonucu ctags daha iyidir. Belgeleme benim için çok acayip. Ayrıntılar için init-semantic.el dosyasına bakın .

  4. şirket modu otomatik tamamlamaya benzer, fark her şeyi tek bir pakette paketlemesidir. Örneğin, C ++ geliştiricilerinin yalnızca şirket modu yüklemesi gerekir (otomatik tamamlama bazı 3. taraf eklentilere ihtiyaç duyar). Başka bir UI farkı şirket adayı otomatik olarak gösterecektir . Böylece şirkette daha az tuşa basarsınız. Özelleştirme sonrasında otomatik tamamlamada aynı şeyi yapmak mümkündür.

Özetle, otomatik tamamlama, şirket en popüler iki seçimdir. Semantik ve hippi-genişleme de memnuniyetle karşılanır, ancak daha az kullanılır. Diğerleri bahsetmek için çok önemsizdir ve özellikleri zaten büyük dört tarafından kapsanmaktadır. Örneğin, otomatik tamamlama, yasnippet'i giriş kaynağı olarak kullanabilir (otomatik tamamlama kullanıcı arayüzünü sağlar, ancak gerçek adaylar yasnippet arka ucu tarafından üretilir).

Ben otomatik tamamlama veya şirket büyük kod tamamlama eklentisi olarak ve semantik veya hippi genişletme tamamlayıcı eklenti olarak kullanmanızı öneririz .

Şirket modunu ve hippi genişlemeyi kullanıyorum çünkü

  • Şimdi (2017 yılı) şirket modu, otomatik tamamlamadan daha aktif bir şekilde korunuyor ve daha fazla 3. taraf eklentisi var (örneğin, lateks eklentisi)

  • hippi-genişletme çok aktif değil, ancak TABşirket modu / semantik / otomatik tamamlamanın kullandığı anahtarı işgal etmiyor

C ++ / Java için şirket modu kullanıyorsanız, değiştirmek isteyebilirsiniz company-backends.

Şirket modu hakkında birkaç ipucu,

Değerini değiştirmeniz gerekebilir company-backends. Örneğin, değerinin olduğunu varsayalım (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords)). O zaman company-eclimsıfır olmayan adaylar alabilir, companyjava yazdığınızı düşünüyor, bu yüzden sonra arka uçları ÇALIŞMAZ company-eclim.

Şimdi bakalım (company-dabbrev-code company-gtags company-etags company-keywords). Bu dört arka ucun hepsi birlikte kullanılacak. Örneğin, company-dabbrev-codesıfır olmayan adayları başarıyla getirdikten sonra bile , diğer üç arka uç hala yürütülür.

Gerçek dünyada, genellikle arka uçların sırasını yeniden ayarlamak veya yeni arka uç eklemek gerekir ( company-rtagsörneğin).


lateks için Emacs 24'teki en iyi otomatik tamamlama paketi hangisidir?
doktora

@doctorate Sana otomatik tamamlama ve kaynak kullanmak gerek düşünüyorum emacswiki.org/emacs/AutoCompleteSources , ancak Google artı Emacs topluluğunun daha iyi tekrar kontrol ediyorum yüzden, akademik adamlar bir sürü yerine lateks kullanıcının bir programcı değilim orada .
chen bin

Lütfen unutmayın şirket modu lateksi de destekler. Bu yüzden otomatik tamamlama yerine şirket öneriyorum
Chen Bin

2

Kısa cevap: Java için yararlı olan emacs için hiçbir şey bilmiyorum. Dinamik genişletme, sınıf yolunuzdaki kütüphaneleri umursamaz, yazdığınız kod hakkında hiçbir şey bilmez, yalnızca arabelleklerden birinde bulunan metne genişletilebilir. JDE ve emacs-eclim bu işlevselliği sağlamaya çalışır, ancak şahsen ben etkilenmedim.


0

Kısa cevap: M-/

Uzun cevap: RTFM :-)


6
+1, tanrı umarım bir sonraki soru "
RTFM

@rownage: oh, `` info-emacs-manual '' ( C-h r)
SamB

1
Nasıl C-h k M-/?
Doug Harris
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.