Bulanık kod tamamlamayı nasıl alabilirim


27

ReSharper'ı Visual Studio'da kullanırken, önek eşleme yerine bulanık eşleme kullanılarak otomatik olarak simgeler tamamlanabilir. Örneğin DoSomethingAmazing, yazabildiğim adlı bir işlevi arıyorsanız, DoSoAmsorgumu Do, tüm sembolleri içeren Sove Amadlarında bir yere uyacak şekilde genişletmeye çalışır .

Başka bir örnek aşağıdaki gif'te bulunabilir. Önek olmayan dizelerin doğru sembole genişletildiği birkaç genişleme görebilirsiniz. (Bu sorudaki gibi snippet genişlemesini yok sayın, yalnızca bulanık eşleme ile ilgileniyorum).Bulanık eşleşmenin birkaç örneğini eylemde gösteren bir gif

Vim için YouCompleteMe eklentisinde başka bir örnek görülebilir: Vim'deki eylemde bulanık eşleştirme ile ilgili daha fazla örnek gösteren bir gif

Otomatik Tamamlama ve Şirket Modu'nun her ikisi de önek eşlemesine sahip görünüyor, ancak bulanık eşleştirmeyi etkinleştirmenin bir yolunu bulamıyorum.

İdeal olarak, çözüm dilin agnostiği olur ve kullandığım sembol tamamlama paketine uygulanır, ancak aynı zamanda dile özgü çözümlerle de ilgilenirim. Helm'a baktım ancak kod tamamlamaya uygulamanın bir yolunu bulamadım.

Helm arabellek kullanarak sembol tamamlamayı etkinleştirmek için bir tuşa basma gibi alternatifleri göz önünde bulundurdum, ancak bunu pop-up tarzı tamamlamayı kullanarak yapmanın bir yolu olduğunu umuyorum.

Ayrıca dil bazında manuel konfigürasyon yapmaya da açıkım çünkü bazı diller sembollerle çizgileri ayırırken, diğerleri eşleşmenin nasıl yapıldığını etkileyeceğini düşündüğüm alt çizgi veya tire kullanır.


Yanıtlar:


19

Emacs'in yerleşik tamamlama işlevi benzer bulanık eşleme sunar (varsayılan olarak "DoSoAm" yerine "do-so-am" için kullanılır) ve şirket kipinin IIUC sürümleri bunu en azından bazı durumlarda kullanır.

Örneğin Eğer yazarsanız bir elisp Emacs 24.4 ve en son şirket modu kullanarak tampon açarsanız (wi-sybir tamamlama menü gösteren açılır şirket window-system, window-system-for-displayve with-syntax-table.


2
Emacs 24.4 company-modedesteği completion-stylesile bu yayın , denemek için olası bir ayar önerir.
wasamasa

24.4'ü yükledikten sonra aradığım şeyin tam olarak bu olduğunu buldum. Ne yazık ki dile özgü görünüyor ve diğer dillerde çalışmasını sağlamak için şirket arka uçlarında değişiklikler yapılması gerekecek. Ancak cevapların dışında bulduğum en yakın sonuç ve umarım daha fazla dilde geçerli olacaktır. Teşekkürler!
Jake Woods

company-ycmdbulanık tamamlamayı destekleyen bir başka arka uçtur.
Dmitry

9

İle company-mode, C-sgösterdiği mevcut adayları aramak için kullanabilirsiniz. Arama sorgusu modelinde görüntüleniyor (tespit etmesi kolay değil, biliyorum. Burada bir sorun dosyaladım ).

Tamamlamak için Helm kullanmak istiyorsanız, dümen şirketi veya ac dümenini kullanmayı düşünün . Denemedim ac-helm, ancak helm-company, doğrudan standart arayüzünü değiştirmek için bir anahtara bağlayabilirsiniz company-complete.


Bu aradığım şeye yakındı. Bir tuşa basmak zorunda kalmadan tamamlamayı umuyordum ama önek eşleme ile birlikte kullanmanın uygun bir alternatif sunduğunu gördüm. Teşekkürler!
Jake Woods

Eğer kullanırsanız company-modeUI, sen basabilirsiniz C-smevcut adaylar listesinden bir aday aramak için companysize sunulan.
Tu Do

Evet bunu anlıyorum ve yukarıdaki yorumda söylediğim gibi aradığım şeye yakın. İdeal çözüm (benim için) C'leri gerektirmeyecek ve yazarken açılan pencerede adayları arayacak. Ancak Cs yaklaşımı kesinlikle ilginç ve onu iş akışıma entegre etmek niyetindeyim.
Jake Woods

Şirketi kullanırken C-M-sbenden daha iyi buluyorum C-s. Meta ile sadece arama yapmak yerine adayları filtreleyecektir.
dadı

@nanny bunu bilmek harika.
Tu Do

5

Daha önce yapılan bir yorumda belirtildiği gibi, ycmdbulanık eşleşmeyi destekler. Üzerinden kullanabilirsiniz company-ycmd. Doğru şekilde yapılandırılmış, oldukça kusursuz bir deneyimde dile özgü tamamlamanın yanı sıra basit tanımlayıcı tabanlı tamamlamayı alabilirsiniz.


Burada "uygun" ifadenin ne anlama geldiğini göstermek güzel olurdu.
Jason Hu,

2

Bir tür veya diğerinin bulanık olarak tamamlanmasını sağlayan birkaç paket vardır. Mesela Helm'in (örneğin siz bahsettiğinizden beri) yaptığını hayal ediyorum.

Eğer kütüphane buz sarkıtlarını kullanırsanız, o zaman birkaç fuzzy-tamamlama yönteminden birini (anında) seçebilirsiniz - başka yerlerde sunulan gördüğümden daha fazla seçenek. (Özellikle fuzzy tamamlama hayranı değilim, kendim, ama bunu öneriyorum)

Buz sarkıtları tamamlama (bu nedenle eğer isterseniz bulanık tamamlama) hemen hemen her yere uygulanır, ancak buz sarkıtlarına özgü kodlara özel tamamlama özellikleri yoktur. Buz sarkıtları belgesinin bu sayfası, bu tür tampon metni tamamlama hakkında konuşuyor.


İle Icicles , tamamlama Stefan'ın örneğini kullanarak (wi-syEmacs Lisp modunda:

  1. İle Icicles vanillatamamlanması (Emacs saygı sağladıklarını completion-styles), Stefan bahseder aynı sembolleri olsun.

  2. İle Icicles Swank bulanık sembol tamamlanmasından (kütüphaneden el-swank-fuzzy.elgeçerli TAB tamamlama yöntemi gibi), bu tamamlama adayları olsun:

    pencere sistemi                
    -Sözdizimi tablosu ile
    pencere sistem için görüntülü
    eklendi kodlama sistemi tarafından hareket
    widget sembol-istemi-iç
    eklendi kodlama sistemini istemi-değeri
    -Swfy-yapı ile
    widget belirtmek-doc
    -Swfy-TimedOut ile
    widget belirtmek alan
    widget belirtmek aktif
    widget belirtmek düğmeli
    widget belirtmek-insert
    widget belirtmek-örneklem
    widget belirtmek gizli
    widget belirtmek-inaktif
    pencere güvenle büzüşebilir-p
    widget türleri kopyalı
    pencere boyutlandırma uygulayın
    Pencere - boyutlandırma-kök-pencere-dikey
    pencere ekranı masa
    pencere - Ekran tampon
    penceresi - boyutlandırma uygulayın-p
    pencere boyutlandırma uygulayın-toplam
    widgetp ekran-Tamamlama
    pencere tekrar görüntülemek uç-tetikleyici
    ile gösterimli tamponu pencere
    eklendi görünürlük-değeri oluşturmak
    widget emacs-kütüphane-link aksiyon
    Widget düzenlenebilir-list-giriş oluşturmak
    widget emacs-tefsir-link aksiyon

İlk 3 aday, yine Stefan'ın bahsettiği adaylar.

  1. Düzgün bulanık maç tamamlama (kütüphane fuzzy-match.el) ile, tek aday with-syntax-table.

  2. Buz sarkıtları bulanık tamamlama dağılması ile birlikte , Swank bulanık tamamlama teklifindeki tüm adayları ve ayrıca aşağıdakileri alırsınız:

    ange-ftp-bekle-meşgul
    dired-içine-dir-ile-sembolik
    ediff-seçim-pencere-kurulum fonksiyonlu-otomatik
    ediff-makyaj geniş ekran
    ediff-durumlu-geniş ekran
    ediff-pencere ekranı-p
    ediff-pencere-ok-için-display
    ediff-ile-sözdizimi tablo
    bulmak-yeni-tampon-file-kodlama sistemi
    gnus-çerçeve veya pencere ekran adı
    help-pencere-ekran-ileti
    saçağı-seçim-pencere-için-tampon-display
    Geri döndürme-tampon-ile-kodlama sisteminin
    set-w32-sistem-kodlama sistemi
    Kurulum penceresi ekran masa
    Kurulum pencere yeniden görüntülemek uç-tetik
    Kabuk-yazma-tarih çıkışta
    Bölünmüş pencere-makul
    ağaç Widget - bulun-alt dizin
    w32-Bul-dosya-bulunamadı-set-tampon-file-kodlama sistemi
    w32-initialize pencere sistemi
  1. İle Icicles Levenshtein (1) bulanık alt dize tamamlanma (1 Levenshtein mesafesi), yalnızca bu tamamlamaları olsun:
    yardım takip sembolü
    mesajı-check-haber-sözdizimi
    w32-başlat-pencere sistemi pencere sistemi
    pencere sistem için görüntülü
  1. 1 yerine 2 Levenshtein mesafesi ile 300'den fazla tamamlama adayı vardır.

  2. İle sıkı Levenshtein (1 veya 2) tamamlanmasından vardır bir aday. Aynı şekilde, buz sarkıtları Jaro-Winkler bulanık tamamlama için .


1
Bulanık tamamlama için bazı potansiyel API çakışmalarının olduğunu kabul ediyorum, ancak kod tamamlama genellikle moda özgü derlenmiş veya çalışma zamanı incelemesi gerektiriyor. Kendinizi belirttiğiniz gibi, buz sarkıtları kod tamamlama özellikleri konusunda çok az şey sağlar, bu nedenle eldeki soru ile ilgili görünmüyor.
14'te

@dgtized: Ben katılmıyorum. Denedin completion.elmi (Aynı şekilde dabbrevve hippie-expandhepsi de GNU Emacs'a dahil edilmiştir.) Bunlar, sizin de belirttiğiniz gibi, koda özgü hiçbir bilgiye sahip olmasalar bile, kod tamamlama konusunda oldukça faydalıdır . Ne kadar yararlı olabileceklerine şaşırmış olabilirsiniz (bulanık eşleşmeli veya eşleşmemiş). Ve bunun gibi, birden fazla aday olduğunda tamamlanmak üzere mini arabelleği kullanan koda özgü herhangi bir tamamlanma, otomatik olarak Icicles'ın bulanık tamamlanmasından yararlanır.
Drew,

2

kullanırsanız ivy, en son güncellemelerdeki bir ivynoktada nokta işlevselliği tamamlanma özelliğini destekler. Ivy, bulanık eşleşmeyi yardımı ile destekler flx. Ödemeye Bu nasıl çalıştığını video :)

Yapmanız gereken tek şey, complete-symbolvarsayılan olarak bağlı olduğu tuşa basmak C-M-ive bir bindirme açılır ve tamamlama adayını almak için bulanık eşleme kullanırsınız.

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.