Bash teilweise Glob Expansion

679
Ryo

Ich habe eine Frage ähnlich wie diese, aber anders: Ich schlag zu wollen, verwendet eine glob Expansion in Auto-Vervollständigung, wenn möglich. Zum Beispiel möchte ich

$ ls *2.<TAB> 

Mir geben:

$ ls mydoc2. mydoc2.pdf mydoc2.tex mydoc2.txt 

Ich stehe oft vor dieser Situation. Im obigen Beispiel habe ich das kurze Präfix "mydoc" verwendet, aber die eigentlichen sind oft recht lang. Ist das möglich?

Ich verstehe, *2.*würde mit erweitern C-x*, aber das ist eine andere Funktion, die in dieser Situation nicht geeignet ist (da ich nur eine Datei aus der Liste der Dateien auswählen muss, die mit dem Glob übereinstimmen).

2

1 Antwort auf die Frage

1
Travis Clarke

Die beste Methode zum Simulieren dieses Verhaltens für die automatische Vervollständigung besteht darin, die Readline- Variable zu aktivieren (um die möglichen Vervollständigungen anzuzeigen, wenn mehr als eine Übereinstimmung gefunden wird). Anschließend wird die Vervollständigung mit dem Befehl readline aufgerufen (um die Erweiterung des Glob-Pfadnamens durchzuführen).show-all-if-ambiguous glob-complete-word


# 1: Enable `show-all-if-ambiguous` in ~/.inputrc  set show-all-if-ambiguous on 

show-all-if-ambiguous : Dies ändert das Standardverhalten der Beendigungsfunktionen. Wenn diese Option aktiviert ist, werden bei Wörtern, die mehr als einen möglichen Abschluss aufweisen, die Übereinstimmungen sofort aufgeführt, anstatt die Glocke zu drücken. Der Standardwert ist 'aus'.


# 2a: Check to ensure that `glob-complete-word` is bound.  $ bind -q "glob-complete-word"  glob-complete-word can be invoked via "\eg".   # 2b: If unbound, bind `glob-complete-word` to "\eg".  $ bind '"\eg":glob-complete-word' 

glob-complete-word (Mg) : Das Wort vor dem Punkt wird als Muster für die Erweiterung des Pfadnamens behandelt, wobei ein Stern implizit angehängt wird. Dieses Muster wird verwendet, um eine Liste übereinstimmender Dateinamen für mögliche Vervollständigungen zu generieren.


# 3: Trigger the autocompletion with <META-g> or <ESC-g>  # META => alt (Windows/Linux) # META => option (OSX)  $ ls *2.<META-g>   # possible completions will be listed (show-all-if-ambiguous)  mydoc2.pdf mydoc2.tex mydoc2.txt  # glob pathname completion will be performed (glob-complete-word) $ ls mydoc2.  
Vielen Dank! Deine Methode funktioniert! Eine Frage: Ich verstehe nicht, warum Show-All-If-Ambiguous notwendig ist. Mit anderen Worten, was soll Glob-Complete-Word alleine tun? Auf meinem Terminal macht es nichts ohne Show-All-If-Ambiguous von Readline. Ryo vor 6 Jahren 1
@Ryo - `glob-complete-word` erledigt das eigentliche * vervollständigende * Stück. In diesem Beispiel wird also "* 2." in "mydoc2." konvertiert. Mit "show-all-if-ambiguous" werden die möglichen Abschlüsse aufgelistet ("mydoc2.pdf" | "mydoc2.tex" | "mydoc2.txt") für mehrdeutige (dh mehr als 1) Übereinstimmungen. Wenn Sie `aufrufenBei mehrmaligem Deaktivieren der Option "Show-All-If-Ambiguous" zeigen die meisten Shells normalerweise die Abschlussliste an. Diese Option macht es nur flüssiger, da es beim ersten Aufruf funktioniert. Travis Clarke vor 6 Jahren 0