Saat menggunakan ReSharper dalam simbol Visual Studio dapat dilengkapi secara otomatis menggunakan pencocokan fuzzy alih-alih pencocokan awalan. Misalnya jika saya sedang mencari fungsi bernama DoSomethingAmazing
saya bisa menulis DoSoAm
dan itu akan mencoba untuk memperluas permintaan saya untuk mencocokkan semua simbol yang mengandung Do
, So
dan Am
di suatu tempat di nama mereka.
Contoh lain dapat ditemukan di gif di bawah ini. Anda dapat melihat beberapa ekspansi di mana string non-awalan diperluas ke simbol yang benar. (Abaikan ekspansi snipet seperti dalam pertanyaan ini saya hanya peduli dengan pencocokan fuzzy).
Contoh lain dapat dilihat di plugin YouCompleteMe untuk Vim:
Mode Autocomplete dan Company sepertinya memiliki pencocokan awalan tetapi saya tidak dapat menemukan cara untuk mengaktifkan pencocokan fuzzy.
Idealnya solusinya adalah agnostik bahasa dan berlaku untuk paket penyelesaian simbol apa pun yang saya gunakan, tetapi saya juga tertarik dengan solusi spesifik bahasa. Saya telah melihat Helm tetapi belum menemukan cara untuk menerapkannya pada penyelesaian kode.
Saya telah mempertimbangkan alternatif seperti memiliki pengikat tombol untuk mengaktifkan pelengkapan simbol menggunakan buffer Helm tapi saya berharap ada cara untuk melakukan ini menggunakan pelengkapan gaya popup.
Saya juga terbuka untuk melakukan konfigurasi manual berdasarkan bahasa karena beberapa bahasa memisahkan simbol dengan tanda hubung sementara yang lain menggunakan garis bawah atau tanda hubung yang saya anggap akan mempengaruhi bagaimana pencocokan akan dilakukan.
sumber
Jawaban:
Fungsionalitas penyelesaian built-in Emacs menawarkan pencocokan fuzzy yang serupa (tho secara default ini digunakan untuk "do-so-am" daripada untuk "DoSoAm") dan IIUC versi terbaru dari mode perusahaan menggunakan ini setidaknya dalam beberapa kasus.
Misalnya jika Anda membuka buffer Elisp menggunakan Emacs-24.4 dan mode-perusahaan terbaru, jika Anda mengetik
(wi-sy
perusahaan akan memunculkan menu penyelesaian yang ditampilkanwindow-system
,window-system-for-display
danwith-syntax-table
.sumber
company-mode
dukungan Emacs 24.4completion-styles
, pos ini menyarankan pengaturan yang memungkinkan untuk mencobanya.company-ycmd
adalah backend lain yang mendukung penyelesaian fuzzy.Dengan
company-mode
, Anda dapat menggunakanC-s
untuk mencari dari kandidat yang tersedia yang ditampilkan. Permintaan pencarian ditampilkan dalam modeline (tidak terlalu mudah dikenali, saya tahu. Saya mengajukan masalah di sini ).Jika Anda ingin menggunakan Helm untuk penyelesaian, pertimbangkan untuk menggunakan helm-perusahaan atau helm-ac . Belum pernah mencoba
ac-helm
, tetapi denganhelm-company
, Anda dapat langsung mengikatnya ke kunci untuk mengganti antarmuka standarcompany-complete
.sumber
company-mode
UI, Anda dapat menekanC-s
untuk mencari kandidat dari daftar kandidat yang tersedia yangcompany
disajikan kepada Anda.C-M-s
jauh lebih baik daripadaC-s
. Dengan meta, itu akan menyaring kandidat, bukan hanya mencari.Seperti yang disebutkan dalam komentar sebelumnya,
ycmd
mendukung pencocokan fuzzy. Anda dapat menggunakannya melaluicompany-ycmd
. Dikonfigurasi dengan benar, Anda bisa mendapatkan penyelesaian khusus bahasa serta penyelesaian berbasis pengidentifikasi sederhana dalam pengalaman yang cukup mulus.sumber
Ada beberapa paket yang menawarkan penyelesaian fuzzy dari satu jenis atau lainnya. Saya membayangkan Helm melakukannya, misalnya (karena Anda menyebutkannya).
Jika Anda menggunakan perpustakaan Icicles maka Anda dapat memilih (on the fly) di antara beberapa metode fuzzy-completion - lebih banyak pilihan daripada yang saya lihat ditawarkan di tempat lain. (Saya sendiri bukan penggemar penyelesaian fuzzy, tapi saya menawarkannya.)
Penyelesaian Icicles (maka penyelesaian fuzzy, jika Anda memilihnya) berlaku cukup banyak di mana-mana, tetapi tidak ada banyak Icicles - kode khusus - fitur penyempurnaan. Ini halaman dari Icicles doc berbicara tentang penyelesaian penyangga-teks tersebut.
Dengan Icicles , gunakan contoh Stefan untuk menyelesaikan
(wi-sy
dalam mode Emacs Lisp:Dengan selesainya Icicles (apa yang disediakan Emacs, hormati ), Anda mendapatkan simbol yang sama dengan yang disebutkan Stefan.
vanilla
completion-styles
Dengan penyelesaian simbol fuzzy Icicles Swank (dari perpustakaan
el-swank-fuzzy.el
) sebagai metode penyelesaian TAB saat ini, Anda mendapatkan kandidat penyelesaian ini:3 kandidat pertama adalah, sekali lagi, yang disebutkan Stefan.
Dengan penyelesaian fuzzy-match polos (perpustakaan
fuzzy-match.el
), satu-satunya kandidat adalahwith-syntax-table
.Dengan Icicles scatter fuzzy completion , Anda mendapatkan semua kandidat yang ditawarkan Swank fuzzy completion, ditambah yang berikut:
Dengan jarak Levenshtein 2 bukannya 1, ada lebih dari 300 kandidat yang lulus.
Dengan penyelesaian Levenshtein (1 atau 2) yang ketat, tidak ada kandidat. Demikian juga, untuk Icicles Jaro-Winkler penyelesaian fuzzy .
sumber
completion.el
? (Demikian juga,dabbrev
danhippie-expand
- ketiganya termasuk dalam GNU Emacs.) Hal-hal ini cukup membantu dengan penyelesaian kode, meskipun, seperti yang Anda sarankan, mereka tidak memiliki pengetahuan khusus kode. Anda mungkin terkejut betapa mereka bisa sangat membantu (dengan atau tanpa pencocokan fuzzy). Dan seperti ini, setiap penyelesaian khusus kode yang menggunakan minibuffer untuk menyelesaikan ketika ada beberapa kandidat secara otomatis mendapat manfaat dari penyelesaian fuzzy Icicles .jika Anda gunakan
ivy
, dalam pembaruan terbaruivy
mendukung penyelesaian fungsi titik pada overlay. Ivy mendukung pencocokan fuzzy dengan bantuanflx
. Lihat video ini tentang cara kerjanya :)Yang harus Anda lakukan adalah, tekan ikatan kunci
complete-symbol
yang secara default terikat C-M-idan overlay akan muncul dan Anda menggunakan pencocokan fuzzy untuk mendapatkan kandidat penyelesaian.sumber