Consult bietet Such- und Navigationsbefehle basierend auf der Emacs-Vervollständigungsfunktion „Completing-Read“. Durch die Vervollständigung können Sie schnell ein Element aus einer Kandidatenliste auswählen. Consult bietet asynchrone und interaktive Befehle consult-grep
und consult-ripgrep
sowie den zeilenbasierten Suchbefehl consult-line
. Darüber hinaus bietet Consult einen erweiterten Pufferumschaltbefehl consult-buffer
um zwischen Puffern, kürzlich geöffneten Dateien, Lesezeichen und pufferähnlichen Kandidaten aus anderen Quellen zu wechseln. Einige der Consult-Befehle sind erweiterte Versionen der integrierten Emacs-Befehle. Beispielsweise präsentiert der Befehl consult-imenu
eine flache Liste des Menüs mit Live-Vorschau, Gruppierung und Eingrenzung. Bitte werfen Sie einen Blick auf die vollständige Liste der Befehle.
Consult ist vollständig kompatibel mit Vervollständigungssystemen, die auf der standardmäßigen Emacs completing-read
API basieren, insbesondere dem Standardvervollständigungssystem Vertico, Mct und Icomplete.
Dieses Paket reduziert die Besonderheiten des Vervollständigungssystems auf ein Minimum. Die Fähigkeit der Consult-Befehle, gut mit beliebigen Vervollständigungssystemen zusammenzuarbeiten, ist einer der Hauptvorteile des Pakets. Consult fügt sich gut in bestehende Setups ein und hilft Ihnen, aus kleinen und unabhängigen Komponenten eine vollständige Komplettierungsumgebung zu erstellen.
Die Ergänzungspakete Marginalia, Embark und Orderless können Sie mit Consult kombinieren. Marginalia reichert die Vervollständigungsanzeige mit Anmerkungen an, z. B. Dokumentationszeichenfolgen oder Dateiinformationen. Das vielseitige Embark-Paket bietet lokale Aktionen, vergleichbar mit einem Kontextmenü. Diese Aktionen wirken sich auf den ausgewählten Kandidaten im Minipuffer oder an einem Punkt in normalen Puffern aus. Wenn Sie beispielsweise Dateien aus einer Liste auswählen, bietet Embark eine Aktion zum Löschen der Datei an. Darüber hinaus bietet Embark die Möglichkeit, Abschlusskandidaten in einem Sammelpuffer zu sammeln. Im Abschnitt Embark-Integration wird detailliert dokumentiert, wie Consult und Embark zusammenarbeiten.
Abb. 1: Befehl consult-git-grep
Abb. 2: Befehls consult-imenu
Abb. 3: consult-line
Die meisten Consult-Befehle folgen dem sinnvollen Benennungsschema consult-
. Viele Befehle implementieren eine wenig bekannte, aber praktische Emacs-Funktion namens „Zukunftsverlauf“, die errät, welche Eingabe der Benutzer wünscht. Geben Sie an einer Eingabeaufforderung Mn
ein und normalerweise fügt Consult das Symbol oder Ding an der Stelle in die Eingabe ein.
TIPP: Wenn Sie Marginalia-Annotatoren aktiviert haben, geben Sie Mx ^consult
ein, um alle Consult-Befehle mit ihrer Kurzbeschreibung anzuzeigen. Alternativ können Sie Ch a ^consult
eingeben, um einen Überblick über alle Consult-Variablen und -Funktionen mit ihren Beschreibungen zu erhalten.
consult-buffer
: Erweiterte Version von switch-to-buffer
mit Unterstützung für virtuelle Puffer. Unterstützt die Live-Vorschau von Puffern und die Eingrenzung auf die virtuellen Puffertypen. Sie können f SPC
eingeben, um die Liste auf die zuletzt verwendeten Dateien einzugrenzen. Drücken Sie SPC
, um kurzlebige Puffer anzuzeigen. Unterstützte Eingrenzungsschlüssel:recentf-mode
“)consult-buffer-sources
konfiguriert sind.consult-buffer-other-window
, consult-buffer-other-frame
, consult-buffer-other-tab
: Varianten von consult-buffer
.consult-project-buffer
: Variante von consult-buffer
beschränkt auf Puffer und aktuelle Dateien des aktuellen Projekts. Sie können benutzerdefinierte Quellen zu consult-project-buffer-sources
hinzufügen. Der Befehl fordert Sie möglicherweise zur Eingabe eines Projekts auf, wenn Sie es von außerhalb eines Projekts aufrufen.consult-bookmark
: Lesezeichen auswählen oder erstellen. Um Lesezeichen auszuwählen, können Sie alternativ den consult-buffer
verwenden, der eine virtuelle Lesezeichen-Pufferquelle enthalten kann. Beachten Sie, dass consult-bookmark
die Vorschau von Lesezeichen und die Eingrenzung unterstützt.consult-recent-file
: Wählen Sie aus den zuletzt verwendeten Dateien mit Vorschau aus. Möglicherweise bevorzugen Sie stattdessen den leistungsstarken consult-buffer
, der aktuelle Dateien als virtuelle Pufferquelle enthalten kann. Der recentf-mode
ermöglicht die Verfolgung aktueller Dateien. consult-yank-from-kill-ring
: Verbesserte Version von yank
um einen Gegenstand aus dem kill-ring
auszuwählen. Der ausgewählte Text wird als Overlay im Puffer in der Vorschau angezeigt.consult-yank-pop
: Erweiterte Version von yank-pop
mit DWIM-Verhalten, die entweder den letzten yank
durch Durchlaufen des kill-ring
ersetzt oder, wenn kein letzter yank
stattgefunden hat, den kill-ring
konsultiert. Der ausgewählte Text wird als Overlay im Puffer in der Vorschau angezeigt.consult-yank-replace
: Wie consult-yank-pop
, ersetzt aber immer den letzten yank
durch einen Gegenstand aus dem kill-ring
.consult-kmacro
: Makro aus dem Makroring auswählen und ausführen. consult-register
: Aus der Liste der Register auswählen. Der Befehl unterstützt die Eingrenzung auf Registertypen und die Vorschau der Markerpositionen. Dieser Befehl ist nützlich, um den Registerinhalt zu durchsuchen. Für einen schnellen Zugriff verwenden Sie die Befehle consult-register-load
, consult-register-store
oder die integrierten Emacs-Registerbefehle.consult-register-format
: Setzen Sie register-preview-function
auf diese Funktion für eine verbesserte Registerformatierung. Sehen Sie sich die Beispielkonfiguration an.consult-register-window
: Ersetzen Sie register-preview
durch diese Funktion für ein besseres Registerfenster. Sehen Sie sich die Beispielkonfiguration an.consult-register-load
: Dienstprogrammbefehl zum schnellen Laden eines Registers. Der Befehl springt entweder zum Registerwert oder fügt ihn ein.consult-register-store
: Verbesserte Benutzeroberfläche zum Speichern von Registern abhängig vom aktuellen Kontext mit einem Aktionsmenü. Bei einer aktiven Region können Sie den Inhalt speichern/anhängen/voranstellen und optional die Region löschen, wenn ein Präfixargument angegeben wird. Speichern/fügen Sie die Zahl mit einem numerischen Präfixargument hinzu. Ansonsten Punkt, Frameset, Fenster oder kmacro speichern. Anwendungsbeispiele:M-' x
: Wenn keine Region aktiv ist, speichern Sie den Punkt im Register x
. Wenn eine Region aktiv ist, speichern Sie die Region im Register x
.M-' Mw x
: Fensterkonfiguration im Register x
speichern.Cu 100 M-' x
: Nummer im Register x
speichern. consult-goto-line
: Zur Zeilennummer springen, erweitert mit Live-Vorschau. Dies ist ein direkter Ersatz für goto-line
. Geben Sie eine Zeilennummer ein, um zur ersten Spalte der angegebenen Zeile zu springen. Alternativ geben Sie line:column
ein, um zu einer bestimmten Spalte zu springen.consult-mark
: Springe zu einer Markierung im mark-ring
. Unterstützt Live-Vorschau und rekursive Bearbeitung.consult-global-mark
: Springe zu einer Markierung im global-mark-ring
. Unterstützt Live-Vorschau und rekursive Bearbeitung.consult-outline
: Springe zu einer Überschrift der Gliederung. Unterstützt die Eingrenzung auf eine Überschriftenebene, Live-Vorschau und rekursive Bearbeitung.consult-imenu
: Zum Imenu-Element im aktuellen Puffer springen. Unterstützt Live-Vorschau, rekursive Bearbeitung und Eingrenzung.consult-imenu-multi
: Zum Imenu-Element in Projektpuffern springen, mit demselben Hauptmodus wie der aktuelle Puffer. Unterstützt Live-Vorschau, rekursive Bearbeitung und Eingrenzung. Diese Funktion wurde von imenu-anywhere inspiriert. consult-line
: Geben Sie die Suchzeichenfolge ein und wählen Sie aus passenden Zeilen aus. Unterstützt Live-Vorschau und rekursive Bearbeitung. Das Symbol am Punkt und die aktuelle Isearch-Zeichenfolge werden zum „zukünftigen Verlauf“ hinzugefügt und können durch Drücken von Mn
aufgerufen werden. Wenn consult-line
an die isearch-mode-map
gebunden ist und während einer laufenden Isearch aufgerufen wird, wird die aktuelle Isearch-Zeichenfolge verwendet.consult-line-multi
: Dynamische Suche über mehrere Puffer hinweg. Standardmäßig wird über Projektpuffer hinweg gesucht. Wenn es mit einem Präfixargument aufgerufen wird, durchsucht es alle Puffer. Die Kandidaten werden bei Bedarf anhand der Eingaben berechnet. Der Befehl verhält sich wie consult-grep
, arbeitet jedoch mit Puffern statt mit Dateien.consult-keep-lines
: Ersatz für keep/flush-lines
, der den aktuellen Vervollständigungsstil zum Filtern des Puffers verwendet. Die Funktion aktualisiert den Puffer während der Eingabe. Insbesondere consult-keep-lines
können einen exportierten Embark-Collect-Puffer weiter eingrenzen, indem sie sich auf die gleiche Abschlussfilterung wie completing-read
stützen. Wenn die Eingabe mit dem Negationsoperator beginnt, also ! SPC
, der Filter entspricht dem Komplement. Wenn eine Region aktiv ist, schränkt die Region die Filterung ein.consult-focus-lines
: Zeilen vorübergehend ausblenden, indem Sie sie mithilfe des aktuellen Vervollständigungsstils filtern. Aufruf mit Cu
-Präfixargument, um die verdeckten Zeilen wieder anzuzeigen. Wenn die Eingabe mit dem Negationsoperator beginnt, also ! SPC
, der Filter entspricht dem Komplement. Im Gegensatz zu consult-keep-lines
wird bei dieser Funktion der Puffer nicht bearbeitet. Wenn eine Region aktiv ist, schränkt die Region die Filterung ein. consult-grep
, consult-ripgrep
, consult-git-grep
: Suche nach regulären Ausdrücken in Dateien. Consult ruft Grep asynchron auf, während Sie den Suchbegriff eingeben. Nach mindestens consult-async-min-input
-Zeichen beginnt die Suche. Consult teilt die Eingabezeichenfolge in zwei Teile, wenn das erste Zeichen ein Satzzeichen ist, z. B. #
. Beispielsweise wird #regexps#filter-string
am zweiten #
geteilt. Die Zeichenfolge regexps
wird an Grep übergeben. Beachten Sie, dass Consult reguläre Emacs-Ausdrücke in Ausdrücke umwandelt, die vom Suchprogramm verstanden werden. Verwenden Sie an der Eingabeaufforderung immer reguläre Emacs-Ausdrücke. Wenn Sie mehrere durch Leerzeichen getrennte reguläre Ausdrücke eingeben, werden nur Zeilen angezeigt, die zu allen regulären Ausdrücken passen. Um Leerzeichen wörtlich zuzuordnen, maskieren Sie das Leerzeichen mit einem Backslash. Die filter-string
wird an die schnelle Emacs-Filterung übergeben, um die Liste der Übereinstimmungen weiter einzugrenzen. Dies ist besonders nützlich, wenn Sie einen erweiterten Vervollständigungsstil wie „orderless“ verwenden. consult-grep
unterstützt die Vorschau. consult-grep
durchsucht das aktuelle Projektverzeichnis, wenn ein Projekt gefunden wird. Ansonsten wird das default-directory
durchsucht. Wenn consult-grep
mit dem Präfixargument Cu Ms g
aufgerufen wird, können Sie manuell eine oder mehrere durch Kommas getrennte Dateien und Verzeichnisse angeben. Beim Aufruf mit zwei Präfixargumenten Cu Cu Ms g
können Sie zunächst ein Projekt auswählen, wenn Sie sich noch nicht in einem Projekt befinden.consult-find
, consult-fd
, consult-locate
: Finden Sie eine Datei, indem Sie den Pfad mit einem regulären Ausdruck abgleichen. Wie bei consult-grep
ist entweder das Projektstammverzeichnis oder das aktuelle Verzeichnis das Stammverzeichnis für die Suche. Die Eingabezeichenfolge wird ähnlich wie consult-grep
behandelt, wobei der erste Teil an „find“ übergeben wird und der zweite Teil für die Emacs-Filterung verwendet wird. Präfixargumente für consult-find
funktionieren genauso wie die für die „consult grep“-Befehle. consult-compile-error
: Springe zu einem Kompilierungsfehler. Unterstützt die Eingrenzung der Live-Vorschau und die rekursive Bearbeitung.consult-flymake
: Zur Flymake-Diagnose springen. Unterstützt Live-Vorschau und rekursive Bearbeitung. Der Befehl unterstützt das Eingrenzen. Drücken Sie e SPC
, w SPC
, n SPC
um jeweils nur Fehler, Warnungen und Hinweise anzuzeigen.consult-xref
: Integration mit XRef. Diese Funktion kann als xref-show-xrefs-function
und xref-show-definitions-function
festgelegt werden. consult-complex-command
: Wählen Sie einen Befehl aus dem command-history
aus. Dieser Befehl ist eine completing-read
Version von repeat-complex-command
und ersetzt auch den Befehl command-history
von chistory.el.consult-history
: Fügen Sie eine Zeichenfolge aus dem aktuellen Pufferverlauf ein, beispielsweise dem Eshell- oder Comint-Verlauf. Sie können diesen Befehl auch über den Minipuffer aufrufen. In diesem Fall verwendet consult-history
den in der minibuffer-history-variable
gespeicherten Verlauf. Wenn Sie completion-at-point
bevorzugen, werfen Sie einen Blick auf cape-history
aus dem Cape-Paket.consult-isearch-history
: Während einer Isearch-Sitzung wählt dieser Befehl eine Suchzeichenfolge aus dem Verlauf aus und setzt die Suche mit der neu ausgewählten Zeichenfolge fort. Außerhalb von Isearch können Sie mit dem Befehl eine Zeichenfolge aus dem Verlauf auswählen und eine neue Isearch starten. consult-isearch-history
fungiert als Ersatz für isearch-edit-string
. consult-minor-mode-menu
: Nebenmodus aktivieren/deaktivieren. Unterstützt die Eingrenzung auf die Modi Ein/Aus/Lokal/Global durch Drücken von i/o/l/g SPC
.consult-mode-command
: Führen Sie einen Befehl im aktuell aktiven Neben- oder Hauptmodus aus. Unterstützt die Eingrenzung in den Local-Moll-/Global-Moll-/Dur-Modus über die Tasten l/g/m
. consult-org-heading
: Variante von consult-imenu
oder consult-outline
für Org-Puffer. Die Überschrift und die Überschriften ihrer Vorgänger werden durch Schrägstriche getrennt. Unterstützt die Eingrenzung nach Überschriftenebene, Priorität und TODO-Schlüsselwort sowie Live-Vorschau und rekursive Bearbeitung.consult-org-agenda
: Zur Überschrift einer Org-Agenda springen. Unterstützt die Eingrenzung nach Überschriftenebene, Priorität und TODO-Schlüsselwort sowie Live-Vorschau und rekursive Bearbeitung. consult-man
: Finden Sie die Unix-Manpage über Unix apropos
oder man -k
. consult-man
öffnet die ausgewählte Manpage mit dem Emacs-Befehl man
.consult-info
: Volltextsuche durch Infoseiten. Wenn der Befehl aus einem *info*
-Puffer aufgerufen wird, durchsucht er das aktuelle Handbuch. Möglicherweise möchten Sie Ihre eigenen Befehle erstellen, die einen vordefinierten Satz von Infoseiten durchsuchen, zum Beispiel: ( defun consult-info-emacs ()
" Search through Emacs info pages. "
( interactive )
(consult-info " emacs " " efaq " " elisp " " cl " " compat " ))
( defun consult-info-org ()
" Search through the Org info page. "
( interactive )
(consult-info " org " ))
( defun consult-info-completion ()
" Search through completion info pages. "
( interactive )
(consult-info " vertico " " consult " " marginalia " " orderless " " embark "
" corfu " " cape " " tempel " ))
consult-theme
: Wählen Sie ein Thema aus und deaktivieren Sie alle derzeit aktivierten Themen. Unterstützt die Live-Vorschau des Themas beim Scrollen durch die Kandidaten.consult-preview-at-point
und consult-preview-at-point-mode
: Befehl und Nebenmodus, der eine Vorschau des Kandidaten an einem Punkt im *Completions*
-Puffer anzeigt. Dieser Modus ist relevant, wenn Sie Mct oder die Standard-Benutzeroberfläche *Completions*
verwenden.consult-completion-in-region
: Falls Sie Korfu nicht als Benutzeroberfläche für die In-Puffer-Vervollständigung verwenden, kann diese Funktion als completion-in-region-function
festgelegt werden. Dann wird Ihre Minibuffer-Vervollständigungs-Benutzeroberfläche (z. B. Vertico oder Icomplete) für completion-at-point
verwendet. ; ; Use `consult-completion-in-region' if Vertico is enabled.
; ; Otherwise use the default `completion--in-region' function.
( setq completion-in-region-function
( lambda ( &rest args )
( apply ( if vertico-mode
# 'consult-completion-in-region
# 'completion--in-region )
args)))
Anstelle von consult-completion-in-region
möchten Sie die Vervollständigungen möglicherweise lieber direkt im Puffer als kleines Popup anzeigen. In diesem Fall empfehle ich das Korfu-Paket. Es gibt eine technische Einschränkung der consult-completion-in-region
in Kombination mit den Lsp-Modi. Der LSP-Server verlässt sich auf die Eingabe vor Ort, um verfeinerte Kandidatenzeichenfolgen zu generieren. Da die Fertigstellung vom Originalpuffer in den Minipuffer übertragen wird, erhält der Server die aktualisierte Eingabe nicht. Im Gegensatz dazu funktioniert die pufferinterne LSP-Vervollständigung beispielsweise über Korfu ordnungsgemäß, da die Vervollständigung direkt im Originalpuffer erfolgt.
Consult verbessert completing-read
durch Live-Vorschauen der Kandidaten, zusätzliche Eingrenzungsfunktionen auf Kandidatengruppen und asynchron generierte Kandidatenlisten. Die interne Funktion consult--read
, die von den meisten Consult-Befehlen verwendet wird, ist ein dünner Wrapper für das completing-read
und stellt die spezielle Funktionalität bereit. Um mehrere Kandidatenquellen zu unterstützen, gibt es die High-Level-Funktion consult--multi
. Die Architektur von Consult ermöglicht die Arbeit mit verschiedenen Vervollständigungssystemen im Backend und bietet dennoch erweiterte Funktionen.
Einige Consult-Befehle unterstützen Live-Vorschauen. Wenn Sie beispielsweise durch die Elemente von consult-line
scrollen, scrollt der Puffer an die entsprechende Position. Es ist möglich, zwischen dem Minipuffer und dem Puffer hin und her zu springen, um während der laufenden Suche eine rekursive Bearbeitung durchzuführen.
Consult aktiviert standardmäßig Vorschauen. Sie können sie deaktivieren, indem Sie die Variable consult-preview-key
anpassen. Darüber hinaus ist es möglich, Tastenkombinationen anzugeben, die die Vorschau manuell auslösen, wie in der Beispielkonfiguration gezeigt. Die Standardeinstellung von consult-preview-key
ist any
, was bedeutet, dass Consult die Vorschau sofort bei jedem Tastendruck auslöst, wenn sich der ausgewählte Kandidat ändert. Sie können jeden Befehl einzeln mit einem eigenen :preview-key
konfigurieren. Folgende Einstellungen sind möglich:
'any
(list :debounce 0.5 'any)
"M-."
(list :debounce 0.5 "M-.")
nil
Eine sichere Empfehlung besteht darin, die automatische Sofortvorschau generell aktiviert zu lassen und die automatische Vorschau nur für Befehle zu deaktivieren, bei denen die Vorschau aufgrund des Dateiladens möglicherweise teuer ist. Intern verwendet Consult den Wert this-command
um den angepassten :preview-key
zu bestimmen. Das heißt, wenn Sie einen consult-*
Befehl in Ihre eigene Funktion oder Ihren eigenen Befehl einschließen, müssen Sie auch den Namen Ihres benutzerdefinierten Befehls zum consult-customize
-Aufruf hinzufügen, damit er berücksichtigt wird.
(consult-customize
consult-ripgrep consult-git-grep consult-grep
consult-bookmark consult-recent-file consult-xref
consult--source-bookmark consult--source-file-register
consult--source-recent-file consult--source-project-recent-file
; ; my/command-wrapping-consult ;; disable auto previews inside my command
:preview-key '( :debounce 0.4 any) ; ; Option 1: Delay preview
; ; :preview-key "M-.") ;; Option 2: Manual preview
In diesem Fall fragt man sich vielleicht, was der Unterschied zwischen der Verwendung einer Einschiffungsaktion für den aktuellen Kandidaten und einer manuell ausgelösten Vorschau ist. Der wesentliche Unterschied besteht darin, dass die per manueller Vorschau geöffneten Dateien nach der Abschlusssitzung wieder geschlossen werden. Während der Vorschau sind einige Funktionen deaktiviert, um die Leistung zu verbessern, siehe beispielsweise die Anpassungsvariablen consult-preview-variables
und consult-preview-allowed-hooks
. Es werden nur die in consult-preview-allowed-hooks
aufgeführten Hooks ausgeführt. Diese Variable gilt für find-file-hook
, change-major-mode-hook
und Modus-Hooks, z. B. prog-mode-hook
. Um die zusätzliche Schriftartensperre während der Vorschau zu aktivieren, fügen Sie die entsprechenden Hooks zur Zulassungsliste hinzu. Der folgende Code demonstriert dies für org-modern und hl-todo.
; ; local modes added to prog-mode hooks
( add-to-list 'consult-preview-allowed-hooks 'hl-todo-mode )
( add-to-list 'consult-preview-allowed-hooks 'elide-head-mode )
; ; enabled global modes
( add-to-list 'consult-preview-allowed-hooks 'global-org-modern-mode )
( add-to-list 'consult-preview-allowed-hooks 'global-hl-todo-mode )
Dateien, die größer als consult-preview-partial-size
sind, werden teilweise in der Vorschau angezeigt. Das Verzögern der Vorschau ist auch für consult-theme
sinnvoll, da die Theme-Vorschau langsam ist. Die Verzögerung führt zu einer flüssigeren Benutzeroberfläche.
; ; Preview on any key press, but delay 0.5s
(consult-customize consult-theme :preview-key '( :debounce 0.5 any))
; ; Preview immediately on M-., on up/down after 0.5s, on any other key after 1s
(consult-customize consult-theme
:preview-key
'( " M-. "
:debounce 0.5 " " " "
:debounce 1 any))
Consult unterstützt speziell Kandidatengruppen. Wenn die Vervollständigungs-Benutzeroberfläche die Gruppierungsfunktion unterstützt, trennt die Benutzeroberfläche die Gruppen durch dünne Linien und zeigt Gruppentitel an. Die Gruppierung ist nützlich, wenn die Kandidatenliste aus Kandidaten mehrerer Typen oder Kandidaten aus mehreren Quellen besteht, wie zum Beispiel der Befehl consult-buffer
, der sowohl Puffer als auch kürzlich geöffnete Dateien anzeigt. Beachten Sie, dass Sie die Gruppentitel deaktivieren können, indem Sie die Eigenschaft :group
des entsprechenden Befehls mithilfe des Makros consult-customize
auf „nil“ setzen.
Durch die Eingabe eines einschränkenden Präfixes oder durch Drücken einer einschränkenden Taste ist es möglich, die Vervollständigungskandidaten auf eine bestimmte Kandidatengruppe einzuschränken. Wenn Sie den Befehl consult-buffer
verwenden, können Sie das Präfix b SPC
eingeben, um die Kandidatenliste nur auf Puffer zu beschränken. Wenn Sie anschließend DEL
drücken, wird wieder die vollständige Kandidatenliste angezeigt. Darüber hinaus können eine verengende Präfixtaste und eine erweiternde Taste konfiguriert werden, die gedrückt werden können, um den gleichen Effekt zu erzielen, siehe die Konfigurationsvariablen consult-narrow-key
und consult-widen-key
.
Nach Drücken von consult-narrow-key
können die möglichen Eingrenzungstasten durch Drücken Ch
angezeigt werden. Wenn Sie Ch
nach einer Präfixtaste drücken, wird der prefix-help-command
aufgerufen, der standardmäßig das Hilfefenster zur Tastenkombination anzeigt. Als kompaktere Alternative gibt es den Befehl consult-narrow-help
, der beispielsweise an einen Schlüssel gebunden werden kann ?
oder Ch
in der consult-narrow-map
, wie in der Beispielkonfiguration gezeigt. Wenn welcher Schlüssel installiert ist, werden die Eingrenzungsschlüssel automatisch im Fenster „welcher Schlüssel“ angezeigt, nachdem die consult-narrow-key
gedrückt wurde.
Consult bietet Unterstützung für die asynchrone Generierung von Kandidatenlisten. Diese Funktion wird für Suchbefehle wie consult-grep
verwendet, bei denen die Liste der Übereinstimmungen dynamisch generiert wird, während der Benutzer einen regulären Ausdruck eingibt. Der grep-Prozess wird im Hintergrund ausgeführt. Bei der Änderung des regulären Ausdrucks wird der Hintergrundprozess beendet und ein neuer Prozess mit dem geänderten regulären Ausdruck gestartet.
Die gefundenen Übereinstimmungen können dann mithilfe des installierten Emacs-Vervollständigungsstils eingegrenzt werden. Dies kann hilfreich sein, wenn Sie beispielsweise den orderless
Vervollständigungsstil verwenden.
Diese zweistufige Filterung ist durch Aufteilen der Eingabezeichenfolge möglich. Ein Teil der Eingabezeichenfolge wird als Eingabe für grep behandelt und ein Teil der Eingabe wird zum Filtern verwendet. Es stehen mehrere Aufteilungsstile zur Verfügung, die in consult-async-split-styles-alist
konfiguriert werden: nil
, comma
, semicolon
und perl
. Der Standard-Aufteilungsstil wird mit der Variablen consult-async-split-style
konfiguriert.
Bei den Aufteilungsstilen comma
und semicolon
wird das erste Wort vor dem Komma oder Semikolon an grep übergeben, die verbleibende Zeichenfolge wird zum Filtern verwendet. Der nil
führt keine Aufteilung durch, die gesamte Eingabe wird an grep übergeben.
Der perl
Aufteilungsstil teilt die Eingabezeichenfolge an einem Satzzeichen auf und verwendet dabei eine ähnliche Syntax wie reguläre Perl-Ausdrücke.
Beispiele:
#defun
: Suchen Sie mit grep nach „defun“.#consult embark
: Suchen Sie mit grep in beliebiger Reihenfolge nach „consult“ und „embark“.#first.*second
: Suchen Sie mit grep nach „first“, gefolgt von „second“.#(consult|embark)
: Suchen Sie mit grep nach „consult“ oder „embark“. Beachten Sie die Verwendung regulärer Ausdrücke im Emacs-Stil.#defun#consult
: Suchen Sie mit grep nach „defun“ und filtern Sie nach dem Wort „consult“./defun/consult
: Es ist auch möglich, andere Satzzeichen zu verwenden.#to#
: Erzwingt die Suche nach „to“ mithilfe von grep, da das grep-Muster standardmäßig länger als consult-async-min-input
-Zeichen sein muss.#defun -- --invert-match#
: Übergeben Sie das Argument --invert-match
an grep. Asynchrone Prozesse wie find
und grep
erstellen einen Fehlerprotokollpuffer _*consult-async*
(beachten Sie das führende Leerzeichen), der für die Fehlerbehebung nützlich ist. Die Eingabeaufforderung verfügt über eine kleine Anzeige, die den Prozessstatus anzeigt:
:
der übliche Eingabeaufforderungsdoppelpunkt, bevor eine Eingabe erfolgt.*
mit Warngesicht, der Prozess läuft.:
mit Erfolgsgesicht, Erfolg, Prozess mit Fehlercode Null beendet.!
mit Fehlergesicht, Fehler, Prozess wurde mit einem Fehlercode ungleich Null beendet.;
mit Fehlergesicht, unterbrochen, beispielsweise wenn weitere Eingaben erfolgen. Mehrere synchrone Kandidatenquellen können kombiniert werden. Diese Funktion wird vom Befehl consult-buffer
verwendet, um pufferähnliche Kandidaten in einem einzigen Menü für den schnellen Zugriff anzuzeigen. Standardmäßig umfasst consult-buffer
Puffer, Lesezeichen, aktuelle Dateien sowie projektspezifische Puffer und Dateien. Es ist möglich, die Liste der Quellen über die Variable consult-buffer-sources
zu konfigurieren. Es können beliebige benutzerdefinierte Quellen definiert werden.
Als Beispiel ist die Lesezeichenquelle wie folgt definiert:
( defvar consult--source-bookmark
`( :name " Bookmark "
:narrow ?m
:category bookmark
:face consult-bookmark
:history bookmark-history
:items ,# 'bookmark-all-names
:action ,# 'consult--bookmark-action ))
Erforderliche Quellfelder:
:category
Abschlusskategorie.:items
Liste von Strings zur Auswahl oder Funktion, die eine Liste von Strings zurückgibt. Eine Liste von Cons-Zellen wird nicht unterstützt.Optionale Quellfelder:
:name
Name der Quelle, der zur Eingrenzung, Gruppentitel und Anmerkungen verwendet wird.:narrow
Einschränkendes Zeichen oder (character . string)
Paar.:preview-key
Vorschautaste oder Tasten, die eine Vorschau auslösen.:enabled
Funktion, die t zurückgeben muss, wenn die Quelle aktiviert ist.:hidden
Wenn t Kandidaten dieser Quelle standardmäßig ausgeblendet sind.:face
Gesicht, das zur Hervorhebung der Kandidaten verwendet wird.:annotate
Annotation-Funktion, die für jeden Kandidaten aufgerufen wird und eine Zeichenfolge zurückgibt.:history
Name der Verlaufsvariablen zum Hinzufügen des ausgewählten Kandidaten.:default
Muss t sein, wenn das erste Element der Quelle der Standardwert ist.:action
Funktion, die mit dem ausgewählten Kandidaten aufgerufen wird.:new
Funktion wird mit neuem Kandidatennamen aufgerufen, nur wenn :require-match
gleich Null ist.:state
Zustandskonstruktor für die Quelle, muss die Zustandsfunktion zurückgeben. Die Felder :state
und :action
der Quellen verdienen eine längere Erläuterung. Die Funktion :action
benötigt ein einzelnes Argument und wird nur nach der Auswahl mit dem ausgewählten Kandidaten aufgerufen, wenn die Auswahl nicht abgebrochen wurde. Diese Funktionalität dient der Bequemlichkeit und einfachen Definition von Quellen. Das Feld :state
ist allgemeiner. Die :state
-Funktion ist eine Konstruktorfunktion ohne Argumente, die einige für die Vorschau erforderliche Einstellungen vornehmen kann. Es muss einen Abschluss zurückgeben, der ein ACTION- und ein CANDIDATE-Argument akzeptiert. Weitere Details zum ACTION-Argument finden Sie in der Dokumentzeichenfolge von consult--with-preview
.
Standardmäßig zeigt consult-buffer
eine Vorschau von Puffern, Lesezeichen und Dateien an. Das Laden aktueller Dateien oder Lesezeichen kann zu kostspieligen Vorgängen führen. Es ist jedoch möglich, eine manuelle Vorschau wie folgt zu konfigurieren.
(consult-customize
consult--source-bookmark consult--source-file-register
consult--source-recent-file consult--source-project-recent-file
:preview-key " M-. " )
Der Einfachheit halber können Quellen direkt zur consult-buffer-source
-Liste hinzugefügt werden. Die folgende Quelle listet beispielsweise alle Org-Puffer auf und ermöglicht Ihnen das Erstellen neuer Puffer.
( defvar org-source
( list :name " Org Buffer "
:category 'buffer
:narrow ?o
:face 'consult-buffer
:history 'buffer-name-history
:state # 'consult--buffer-state
:new
( lambda ( name )
( with-current-buffer ( get-buffer-create name)
( insert " #+title: " name " nn " )
( org-mode )
(consult--buffer-action ( current-buffer ))))
:items
( lambda ()
(consult--buffer-query :mode 'org-mode :as # 'consult--buffer-pair ))))
( add-to-list 'consult-buffer-sources 'org-source 'append )
Man kann ähnliche Quellen für andere Hauptmodi erstellen. Weitere Quellenbeispiele finden Sie im Consult-Wiki. Siehe auch die Dokumentation von consult-buffer
und der internen consult--multi
API. Mit der Funktion consult--multi
können neue Multi-Source-Befehle erstellt werden.
HINWEIS : Installieren Sie das Paket embark-consult
von MELPA, das Consult-spezifische Embark-Aktionen und den Occur-Pufferexport bereitstellt.
Embark ist ein vielseitiges Paket, das kontextabhängige Aktionen bietet, vergleichbar mit einem Kontextmenü. Eine ausführliche Beschreibung seiner Funktionen finden Sie im Embark-Handbuch.
Aktionen sind Befehle, die auf den aktuell ausgewählten Kandidaten (oder Ziel in der Embark-Terminologie) angewendet werden können. Beim Vervollständigen von Dateien wird beispielsweise der Befehl delete-file
angeboten. Mit Embark können Sie über Mx
beliebige Befehle auf den aktuell ausgewählten Kandidaten ausführen.
Darüber hinaus stellt Embark den Befehl embark-collect
zur Verfügung, der Kandidaten sammelt und sie in einem Embark-Collect-Puffer präsentiert, wo weitere Aktionen auf sie angewendet werden können. Eine verwandte Funktion ist der Befehl embark-export
, der Kandidatenlisten in einen Puffer eines speziellen Typs exportiert. Beispielsweise wird im Falle der Dateivervollständigung ein Dired-Puffer geöffnet.
Besonders spannend im Kontext von Consult ist die Möglichkeit, die passenden Zeilen aus consult-line
, consult-outline
, consult-mark
und consult-global-mark
zu exportieren. Die übereinstimmenden Zeilen werden in einen Occur-Puffer exportiert, wo sie über den occur-edit-mode
(Taste e
drücken) bearbeitet werden können. Ebenso unterstützt Embark das Exportieren der von consult-grep
, consult-ripgrep
und consult-git-grep
gefundenen Übereinstimmungen in einen Grep-Puffer, wo die Übereinstimmungen über Dateien hinweg bearbeitet werden können, wenn das wgrep-Paket installiert ist. Diese drei Arbeitsabläufe sind symmetrisch.
consult-line
-> embark-export
zum occur-mode
-Puffer -> occur-edit-mode
zum Bearbeiten von Übereinstimmungen im Puffer.consult-grep
-> embark-export
in grep-mode
-Puffer -> wgrep
zum Bearbeiten aller Übereinstimmungen.consult-find
-> embark-export
in dired-mode
-Puffer -> wdired-change-to-wdired-mode
zum Bearbeiten.Consult kann von ELPA oder MELPA über den in Emacs integrierten Paketmanager installiert werden. Alternativ kann es über andere nicht standardmäßige Paketmanager direkt aus dem Entwicklungs-Repository installiert werden.
Es gibt das Consult-Wiki, in dem zusätzliche Konfigurationsbeispiele beigesteuert werden können.
WICHTIG: Es wird empfohlen, die lexikalische Bindung in Ihrer Konfiguration zu aktivieren. Viele Consult-bezogene Codefragmente erfordern eine lexikalische Bindung, da sie Lambdas und Abschlüsse verwenden.
Das Consult-Paket stellt nur Befehle bereit und fügt keine Tastenkombinationen oder Modi hinzu. Daher ist das Paket nicht aufdringlich, erfordert aber einen geringen Einrichtungsaufwand. Um die Consult-Befehle verwenden zu können, wird empfohlen, Tastenkombinationen für Befehle hinzuzufügen, auf die häufig zugegriffen wird. Selten verwendete Befehle können über Mx
aufgerufen werden. Fühlen Sie sich frei, nur die Befehle zu binden, die Sie für Ihren Workflow als nützlich erachten. Die hier gezeigte Konfiguration basiert auf dem Makro use-package
, einem praktischen Tool zum Verwalten von Paketkonfigurationen.
HINWEIS: Es gibt das Consult-Wiki, in dem Sie zusätzliche Konfigurationsbeispiele beisteuern können.
; ; Example configuration for Consult
( use-package consult
; ; Replace bindings. Lazily loaded by `use-package' .
:bind ( ; ; C-c bindings in `mode-specific-map'
( " C-c M-x " . consult-mode-command)
( " C-c h " . consult-history)
( " C-c k " . consult-kmacro)
( " C-c m " . consult-man)
( " C-c i " . consult-info)
([remap Info-search] . consult-info)
; ; C-x bindings in `ctl-x-map'
( " C-x M-: " . consult-complex-command) ; ; orig. repeat-complex-command
( " C-x b " . consult-buffer) ; ; orig. switch-to-buffer
( " C-x 4 b " . consult-buffer-other-window) ; ; orig. switch-to-buffer-other-window
( " C-x 5 b " . consult-buffer-other-frame) ; ; orig. switch-to-buffer-other-frame
( " C-x t b " . consult-buffer-other-tab) ; ; orig. switch-to-buffer-other-tab
( " C-x r b " . consult-bookmark) ; ; orig. bookmark-jump
( " C-x p b " . consult-project-buffer) ; ; orig. project-switch-to-buffer
; ; Custom M-# bindings for fast register access
( " M-# " . consult-register-load)
( " M-' " . consult-register-store) ; ; orig. abbrev-prefix-mark (unrelated)
( " C-M-# " . consult-register)
; ; Other custom bindings
( " M-y " . consult-yank-pop) ; ; orig. yank-pop
; ; M-g bindings in `goto-map'
( " M-g e " . consult-compile-error)
( " M-g f " . consult-flymake) ; ; Alternative: consult-flycheck
( " M-g g " . consult-goto-line) ; ; orig. goto-line
( " M-g M-g " . consult-goto-line) ; ; orig. goto-line
( " M-g o " . consult-outline) ; ; Alternative: consult-org-heading
( " M-g m " . consult-mark)
( " M-g k " . consult-global-mark)
( " M-g i " . consult-imenu)
( " M-g I " . consult-imenu-multi)
; ; M-s bindings in `search-map'
( " M-s d " . consult-find) ; ; Alternative: consult-fd
( " M-s c " . consult-locate)
( " M-s g " . consult-grep)
( " M-s G " . consult-git-grep)
( " M-s r " . consult-ripgrep)
( " M-s l " . consult-line)
( " M-s L " . consult-line-multi)
( " M-s k " . consult-keep-lines)
( " M-s u " . consult-focus-lines)
; ; Isearch integration
( " M-s e " . consult-isearch-history)
:map isearch-mode-map
( " M-e " . consult-isearch-history) ; ; orig. isearch-edit-string
( " M-s e " . consult-isearch-history) ; ; orig. isearch-edit-string
( " M-s l " . consult-line) ; ; needed by consult-line to detect isearch
( " M-s L " . consult-line-multi) ; ; needed by consult-line to detect isearch
; ; Minibuffer history
:map minibuffer-local-map
( " M-s " . consult-history) ; ; orig. next-matching-history-element
( " M-r " . consult-history)) ; ; orig. previous-matching-history-element
; ; Enable automatic preview at point in the *Completions* buffer. This is
; ; relevant when you use the default completion UI.
:hook ( completion-list-mode . consult-preview-at-point-mode)
; ; The :init configuration is always executed (Not lazy)
:init
; ; Optionally configure the register formatting. This improves the register
; ; preview for `consult-register' , `consult-register-load' ,
; ; `consult-register-store' and the Emacs built-ins.
( setq register-preview-delay 0.5
register-preview-function # 'consult-register-format )
; ; Optionally tweak the register preview window.
; ; This adds thin lines, sorting and hides the mode line of the window.
( advice-add # 'register-preview :override # 'consult-register-window )