Wenn Sie ReSharper in Visual Studio verwenden, können Symbole mithilfe des Fuzzy-Abgleichs anstelle des Präfixabgleichs automatisch vervollständigt werden. Zum Beispiel , wenn ich suche für eine Funktion namens DoSomethingAmazing
ich schreiben könnte , DoSoAm
und es würde versuchen , meine Frage zu erweitern , um alle Symbole entsprechen enthalten Do
, So
und Am
irgendwo in ihrem Namen.
Ein weiteres Beispiel finden Sie im folgenden GIF. Es werden mehrere Erweiterungen angezeigt, bei denen Zeichenfolgen ohne Präfix zum richtigen Symbol erweitert werden. (Ignorieren Sie die Snippet-Erweiterung, da es in dieser Frage nur um Fuzzy-Matching geht.)
Ein weiteres Beispiel finden Sie im YouCompleteMe-Plugin für Vim:
Autocomplete und Company Mode scheinen Präfix-Matching zu haben, aber ich kann keine Möglichkeit finden, Fuzzy-Matching zu aktivieren.
Idealerweise ist die Lösung sprachunabhängig und gilt für jedes Symbolvervollständigungspaket, das ich verwende, aber ich interessiere mich auch für sprachspezifische Lösungen. Ich habe mir Helm angesehen, aber keine Möglichkeit gefunden, ihn auf die Code-Vervollständigung anzuwenden.
Ich habe Alternativen in Betracht gezogen, wie eine Tastenkombination zum Aktivieren der Symbolvervollständigung mithilfe eines Helm- Puffers, aber ich hoffe, dass es eine Möglichkeit gibt, dies mithilfe der Vervollständigung im Popup-Stil zu tun.
Ich bin auch offen für manuelle Konfigurationen pro Sprache, da einige Sprachen Symbole durch Bindestriche trennen, während andere Unterstriche oder Bindestriche verwenden, von denen ich annehme, dass sie sich auf den Abgleich auswirken.
quelle
Antworten:
Die eingebaute Vervollständigungsfunktion von Emacs bietet ähnliche Fuzzy-Übereinstimmungen (die standardmäßig eher für "do-so-am" als für "DoSoAm" verwendet werden), und IIUC-Versionen des Firmenmodus verwenden diese zumindest in einigen Fällen.
Wenn Sie zB ein Elisp öffnen Puffer mit Emacs-24.4 und dem neuesten Firma-Modus, wenn Sie geben
(wi-sy
Unternehmen ein Abschluss - Menü zeigt Pop - upwindow-system
,window-system-for-display
undwith-syntax-table
.quelle
company-mode
unterstütztcompletion-styles
, dieser Beitrag deutet auf eine mögliche Einstellung für sie auszuprobieren.company-ycmd
ist ein weiteres Backend, das die Fuzzy-Vervollständigung unterstützt.Mit
company-mode
können SieC-s
nach verfügbaren Kandidaten suchen, die angezeigt werden. Die Suchanfrage wird in der Modeline angezeigt (nicht ganz leicht zu erkennen, ich weiß. Ich habe hier ein Problem eingereicht ).Wenn Sie Helm zur Vervollständigung verwenden möchten, ziehen Sie die Verwendung von helm-company oder ac-helm in Betracht . Ich habe es nicht mit versucht
ac-helm
, aber mithelm-company
können Sie es direkt an einen Schlüssel binden, um die Standardschnittstelle von zu ersetzencompany-complete
.quelle
company-mode
Benutzeroberfläche verwenden, können Sie auf drückenC-s
, um aus einer Liste der verfügbaren Kandidatencompany
, die Ihnen präsentiert werden, nach einem Kandidaten zu suchen .C-M-s
es viel besser ist, in der Firma zu arbeiten alsC-s
. Mit Meta filtert es Kandidaten, anstatt nur zu suchen.Wie bereits in einem Kommentar erwähnt,
ycmd
unterstützt Fuzzy Matching. Sie können es über verwendencompany-ycmd
. Richtig konfiguriert, erhalten Sie eine sprachspezifische Vervollständigung sowie eine einfache identifiziererbasierte Vervollständigung in einer nahtlosen Umgebung.quelle
Es gibt mehrere Pakete, die eine Fuzzy-Vervollständigung der einen oder anderen Art anbieten. Ich stelle mir zum Beispiel vor, dass Helm es tut (seit Sie es erwähnen).
Wenn Sie Bibliotheks- Eiszapfen verwenden , können Sie (on the fly) zwischen mehreren Fuzzy-Completion-Methoden wählen - mehr Auswahlmöglichkeiten, als ich an anderer Stelle gesehen habe. (Ich selbst bin kein Fan von Fuzzy Completion, aber ich biete es an.)
Icicles Abschluss (daher Fuzzy - Abschluss, wenn Sie sich entscheiden , dass) gilt so ziemlich überall, aber es gibt nicht eine ganze Menge von Icicles -spezifische Code -completion Funktionen. Diese Seite des Icicles- Dokuments spricht über eine solche Vervollständigung des Puffertextes.
Mit Icicles , mit Stefan Beispiel Abschluss
(wi-sy
in Emacs Lisp - Modus:Mit Icicles
vanilla
Vervollständigung (was Emacs bietet, respektierencompletion-styles
) erhalten Sie die gleichen Symbole, die Stefan erwähnt.Mit der Fuzzy-Symbol-Vervollständigung von Icicles Swank (aus der Bibliothek
el-swank-fuzzy.el
) als aktuelle TAB-Vervollständigungsmethode erhalten Sie folgende Vervollständigungskandidaten:Die ersten drei Kandidaten sind wieder diejenigen, die Stefan erwähnt.
Bei einfacher Fuzzy-Match-Vervollständigung (Bibliothek
fuzzy-match.el
) ist der einzige Kandidatwith-syntax-table
.Mit Icicles Scatter Fuzzy Completion erhalten Sie alle Kandidaten, die Swank Fuzzy Completion anbietet, sowie Folgendes:
Bei einer Levenshtein-Distanz von 2 statt 1 gibt es mehr als 300 Abschlusskandidaten.
Bei strikter Levenshtein (1 oder 2) -Vervollständigung gibt es keine Kandidaten. Ebenso für Eiszapfen Jaro-Winklers unscharfe Fertigstellung .
quelle
completion.el
? (Ebensodabbrev
undhippie-expand
- alle 3 sind in GNU Emacs enthalten.) Diese Dinge sind bei der Code-Vervollständigung sehr hilfreich, obwohl sie, wie Sie vermuten, keine codespezifischen Kenntnisse haben. Sie werden überrascht sein, wie hilfreich sie sein können (mit oder ohne Fuzzy-Matching). Und wie diese profitiert jede codespezifische Vervollständigung, die den Minipuffer verwendet, um zu vervollständigen, wenn es mehrere Kandidaten gibt, automatisch von der Fuzzy-Vervollständigung des Eiszapfens .Wenn Sie dies verwenden
ivy
, wird in den letzten Updatesivy
die Funktion "Fertigstellung zum Zeitpunkt" in einer Überlagerung unterstützt. Ivy unterstützt Fuzzy Matching mit Hilfe vonflx
. Schau dir dieses Video an, wie es funktioniert :)Alles, was Sie tun müssen, ist, die Tastenbelegung zu drücken, an die
complete-symbol
standardmäßig gebunden ist, C-M-iund ein Overlay wird eingeblendet, und Sie verwenden Fuzzy Matching, um den Abschlusskandidaten zu erhalten.quelle