Suche nach fischähnlichen Argumentvervollständigungen in ZSH

8

Ich habe mit Fischen rumgespielt und dieses praktische Verhalten bemerkt

Wenn ich tippte wget -<tab><tab><tab>, wurde ich in ein interaktives Menü gestellt. Beim Tippen habe ich jedoch die Beschreibungen der Argumente selbst durchsucht. Ich habe dies in zsh versucht, und die Eingabe in dieses Menü schien mich nur zu meiner interaktiven Eingabeaufforderung zurückzubringen. Gibt es eine Möglichkeit, ähnliche Funktionen in zsh zu erreichen?

ollien
quelle
Ich wollte schon lange wissen, wie das geht. Wenn es um die Standard-Keyword-Vervollständigung geht (keine Optionen), können Sie mit vim die Vervollständigung so konfigurieren, dass der Fokus auf dem Zeilenpuffer bleibt. Wenn die Vervollständigungsliste zu lang ist, tippen Sie einfach weiter und die Liste wird natürlich herausgefiltert. Aber zsh wechselt sofort den Fokus auf das Menüauswahl-Widget
the_velour_fog
Ich verstehe das Verhalten, das Sie beschreiben, nicht. Geht es darum, die Beschreibungen der Optionen und nicht die Optionsnamen zu durchsuchen ? Oder geht es hier um die Art und Weise, wie Sie durch die Auswahl navigieren können? Auf welches Menü beziehen Sie sich (zsh hat viele verschiedene Einstellungen für die Fertigstellung)?
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ja, Sie können damit die Beschreibungen der Optionen oder sogar die Optionsnamen selbst durchsuchen. Das Menü, auf das ich mich beziehe, wird angezeigt, wenn Sie einen Befehl oder einen Bindestrich eingeben und dann zweimal die Tabulatortaste drücken. Wenn Sie beispielsweise tippen ls -<tab><tab>, wird ein Menü aufgerufen, in dem ich die verschiedenen Optionen nach oben und unten scrollen kann. In Fisch kann ich tippen, wodurch diese Optionen und ihre Beschreibungen durchsucht werden. Ich hoffe, ähnliche Funktionen in zsh zu erreichen.
ollien
Ich bin mir immer noch nicht sicher, was du genau meinst. Ist es die Interaktivität, die Sie wollen? dh in der Lage sein, aus der Liste mit Pfeilen und Hervorhebungsoptionen auszuwählen? Sie sagen, In fish, I'm able to type, which will then search these options and their descriptions.Sie können "diese Optionen und ihre Beschreibungen suchen" in zsh. zB ls --h<tab>sucht nach den Optionen, die mit beginnen, --hund listet vier Übereinstimmungen auf.
Sparhawk
Schauen Sie sich diesen Screenshot an . Wenn ich ls -size<tab>tippe, bekomme ich ls - Blockgröße und ls - Größe als Optionen in zsh. Fish empfiehlt mir jedoch --size, --tabsize, -k, -S, --block-size und --human-readable. Ich hatte gehofft, ähnliche Funktionen in zsh zu erreichen. Es durchsucht nicht nur die Namen von Befehlen, sondern auch die Beschreibungen
ollien

Antworten:

1

Ich denke das macht was du willst:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

Dadurch wird die Liste angezeigt, wenn Sie auf die Tabulatortaste klicken. Wenn Sie dann weiter tippen, werden die verfügbaren Optionen, einschließlich Beschreibungen, mit einer inkrementellen Suche durchsucht.

Möglicherweise interessieren Sie sich auch für dieselbe Konfiguration, jedoch mit interaktiver Konfiguration anstelle von Suche. In diesem Fall werden während der Eingabe die Vervollständigungen auf diejenigen gefiltert, die mit den bisher eingegebenen übereinstimmen.

Thayne
quelle
Hmm ... wenn ich wget -<tab>nodas tippe, wird die Abschlussliste nicht herausgefiltert. Dies setzt einfach fort, 'no' in das Terminal danach einzugeben --accept-regex=, was die erste Option in der Abschlussliste ist.
ollien
1
huh, das passiert mir nicht. Aber es passt nicht wirklich zur Suchoption, sondern führt nur eine inkrementelle Suche durch die Möglichkeiten durch
Thayne,
1

Versuchen Sie dies in Ihre .zshrcDatei aufzunehmen:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

Wenn Sie nun ein wget -<tab>Menü mit automatischen Vervollständigungen eingeben, wird angezeigt. Wir haben die Tastenkombination für dieses Menü definiert. Wenn Sie also die Suchzeile drücken, wird ?oben in den Vervollständigungen Folgendes angezeigt :

davidsykora~%wget --referer
isearch: refe

Einige zusätzliche Tipps:

  • Sie können auch bindkey -M menuselect '/' history-incremental-search-backwardfür die Rückwärtssuche definieren
  • Wenn Sie ?während einer erneuten Suche erneut drücken, springt die Auswahl zum nächsten Suchergebnis. Verwenden Sie diese /Option, um zum vorherigen Ergebnis zu springen
  • Es sind viele Anpassungen erforderlich, damit es wie gewünscht funktioniert. In der complist Dokumentation finden Sie zusätzliche Funktionen und Optionen
  • Für mich ist die Verwendung der vi-insertComplist-Funktion normalerweise viel schneller - sie filtert Vervollständigungen basierend auf Ihrer Eingabe.
David Sýkora
quelle