Podczas używania ReSharper w Visual Studio symbole mogą być automatycznie uzupełniane przy użyciu dopasowania rozmytego zamiast dopasowania przedrostka. Na przykład, jeśli szukam funkcji o nazwie DoSomethingAmazing
mógłbym napisać DoSoAm
i byłoby spróbować poszerzyć moje zapytanie, aby dopasować wszystkie symbole zawierające Do
, So
i Am
gdzieś w ich imieniu.
Kolejny przykład można znaleźć w poniższym gifie. Możesz zobaczyć kilka rozszerzeń, w których łańcuchy nieprefiksowe są rozwijane do właściwego symbolu. (Zignoruj rozwinięcie fragmentu, ponieważ w tym pytaniu chodzi mi tylko o dopasowanie rozmyte).
Kolejny przykład można zobaczyć we wtyczce YouCompleteMe dla Vima:
Wydaje się, że zarówno autouzupełnianie, jak i tryb firmowy mają dopasowanie do prefiksu, ale nie mogę znaleźć sposobu na włączenie dopasowania rozmytego.
Idealnie byłoby, gdyby rozwiązanie było niezależne od języka i dotyczyło dowolnego pakietu uzupełniania symboli, którego używam, ale interesują mnie również rozwiązania specyficzne dla języka. Patrzyłem na Helma, ale nie znalazłem sposobu na zastosowanie go do uzupełniania kodu.
Rozważyłem alternatywy, takie jak przypisanie klawiszy do aktywacji uzupełniania symboli za pomocą bufora Helm, ale mam nadzieję, że istnieje sposób, aby to zrobić za pomocą uzupełniania w stylu wyskakującym.
Jestem również otwarty na ręczną konfigurację dla poszczególnych języków, ponieważ niektóre języki oddzielają symbole myślnikami, podczas gdy inne używają znaków podkreślenia lub myślników, które, jak zakładam, wpłynęłyby na sposób dopasowania.
źródło
Odpowiedzi:
Wbudowana funkcja uzupełniania Emacsa oferuje podobne dopasowanie rozmyte (domyślnie jest używane do „zrób tak”, a nie do „DoSoAm”), a najnowsze wersje trybu firmowego IIUC używają tego przynajmniej w niektórych przypadkach.
Np. Jeśli otworzysz bufor Elisp za pomocą Emacsa-24.4 i najnowszego trybu firmowego, jeśli wpiszesz
(wi-sy
firmę, pojawi się menu zakończenia pokazującewindow-system
,window-system-for-display
iwith-syntax-table
.źródło
company-mode
podporachcompletion-styles
, ten post sugeruje możliwość ustawienia próbuje ją.company-ycmd
to kolejny backend, który obsługuje rozmyte zakończenie.Za pomocą
company-mode
możnaC-s
wyszukiwać spośród dostępnych kandydatów, które wyświetla. Wyszukiwane hasło jest wyświetlane w modeline (wiem, że nie jest to łatwe do znalezienia. W tym przypadku zgłosiłem problem ).Jeśli chcesz użyć Hełmu do ukończenia, rozważ użycie steru lub steru . Nie próbowałem z
ac-helm
, ale zhelm-company
, możesz bezpośrednio powiązać go z kluczem, aby zastąpić standardowy interfejscompany-complete
.źródło
company-mode
interfejsu użytkownika, możesz nacisnąć przycisk,C-s
aby wyszukać kandydata z listy dostępnych kandydatówcompany
przedstawionych tobie.C-M-s
jest o wiele lepszy niżC-s
. Dzięki meta będzie filtrować kandydatów zamiast tylko wyszukiwania.Jak wspomniano w komentarzu wcześniej,
ycmd
obsługuje dopasowanie rozmyte. Możesz go używać za pośrednictwemcompany-ycmd
. Właściwie skonfigurowane, możesz uzyskać uzupełnienie specyficzne dla języka, jak również proste uzupełnienie oparte na identyfikatorze, w bardzo płynnym doświadczeniu.źródło
Istnieje kilka pakietów, które oferują takie rozmyte zakończenie. Wyobrażam sobie na przykład, że Helm (skoro o tym wspominasz).
Jeśli korzystasz z biblioteki Icicles , możesz wybrać (w locie) spośród kilku metod rozmytego uzupełniania - większy wybór, niż widziałem oferowany gdzie indziej. (Sam nie jestem fanem rozmytego ukończenia, ale oferuję to.)
Sople zakończenie (stąd niewyraźny zakończenie, jeśli zdecydujesz że) ma zastosowanie prawie wszędzie, ale nie ma całe mnóstwo Icicles -specyficznych kodowych -completion funkcji. Ta strona dokumentu Icicles mówi o takim uzupełnieniu tekstu buforowego.
Z Sople , wykorzystujące przykład Stefana ukończenia
(wi-sy
w trybie Emacs Lisp:Po ukończeniu Sopli (co zapewnia Emacs, szanując ) otrzymujesz te same symbole, o których wspomina Stefan.
vanilla
completion-styles
Dzięki ukończeniu zamazanego symbolu Icicles Swank (z biblioteki
el-swank-fuzzy.el
) jako obecnej metodzie uzupełniania TAB otrzymujesz tych kandydatów do uzupełnienia:Pierwszych 3 kandydatów to znowu ci, o których Stefan wspomina.
Przy zwykłym zakończeniu dopasowania rozmytego (biblioteka
fuzzy-match.el
) jedynym kandydatem jestwith-syntax-table
.Dzięki zamrożonemu zamrożeniu Sople otrzymujesz wszystkich kandydatów, których oferuje zamszowe uzupełnienie Swank, a także:
Przy odległości Levenshteina wynoszącej 2 zamiast 1, jest ponad 300 kandydatów do ukończenia.
Przy ścisłym ukończeniu Levenshtein (1 lub 2) nie ma kandydatów. Podobnie, w przypadku Icicles Jaro-Winkler rozmyte zakończenie .
źródło
completion.el
? (Podobnie,dabbrev
ihippie-expand
- wszystkie 3 są zawarte w GNU Emacs). Te rzeczy są bardzo pomocne przy uzupełnianie kodu, chociaż, jak sugerujesz, mają żadnej wiedzy kodu specyficzne. Możesz być zaskoczony, jak mogą być pomocni (z dopasowaniem rozmytym lub bez). I podobnie jak te, każde uzupełnienie specyficzne dla kodu, które używa minibufora do ukończenia, gdy jest wielu kandydatów, automatycznie korzysta z rozmytego zakończenia Icicles .jeśli używasz
ivy
, w ostatnich aktualizacjachivy
obsługuje funkcję uzupełniania w punkcie w nakładce. Ivy obsługuje dopasowanie rozmyte przy pomocyflx
. Kasy to film o tym, jak to działa :)Wszystko, co musisz zrobić, to nacisnąć klawisz powiązania, dla
complete-symbol
którego domyślnie jest powiązany, C-M-ipojawi się nakładka i użyjesz rozmytego dopasowywania, aby uzyskać kandydata do ukończenia.źródło