Erzwingen Sie die normale Tab-Vervollständigung von Bash, wenn die intelligente Vervollständigung fehlschlägt

Erzwingen Sie die normale Tab-Vervollständigung von Bash, wenn die intelligente Vervollständigung fehlschlägt

Seitdem die Tab-Vervollständigung eine Standardfunktion in Shells ist, bin ich ein sehr zufriedener Benutzer davon. Ich mag sogar die intelligente Vervollständigung von Bash (wo nur nach PDF-Dateien gesucht wird, wenn ich evince foo<TAB> eingebe) – solange es richtig rät.

Es ruiniert einen ansonsten schönen Tag, wenn Bash seine intelligente Vervollständigung nutzt, um die Vervollständigung zu verweigern.

Heute wollte ich:

tar xvf centos5.8_x86_1.ova

Also habe ich eingegeben:

tar xvf cent<TAB>

und Bash weigert sich, den Pfad zu vervollständigen, da .ova-Dateien nicht das sind, was Sie normalerweise mit Tar verwenden.

Ich weiß, dass ich das Bash-Completion-Paket deinstallieren kann, um die intelligente Vervollständigung zu entfernen. Aber kann ich das Beste aus beiden Welten haben?

Kann ich Bash anweisen, zuerst die intelligente Vervollständigung zu verwenden und, wenn dies fehlschlägt, dann die nicht-intelligente Vervollständigung zu verwenden?

Antwort1

Folgendes sollte die normale Bash-Vervollständigung aktivieren, nachdem alle „intelligenten“ Vervollständigungen für die Programme Tar, Vim und Emacs fehlgeschlagen sind:

compopt -o bashdefault tar vim emacs

siehe auch dieentsprechende Seiteim Online-Bash-Handbuch.

Vorbehalt: Sie erhalten das normale Verhalten für den Vervollständigungstyp (Befehle/Dateinamen/Benutzernamen usw.), der durch die intelligente Vervollständigung für den vorliegenden Befehl definiert wird. Beispielsweise vervollständigt die Vervollständigung für servicekeine Dateinamen, selbst wenn Sie aufrufen complete -o bashdefault service.

In diesem und anderen Fällen, in denen die intelligente Autovervollständigung fehlschlägt, können Sie immer Alt-/(oder M-/in der Notation des Bash-Handbuchs) drücken, um zu vervollständigenDateinamenfast auf die gleiche Weise wie TAB funktioniert, wenn die intelligente Vervollständigung deaktiviert ist (fast auf die gleiche Weise in dem Sinne, dass M-/Muster wie nicht vervollständigt werden *.txt). SieheHierfür Tastenfolgen für andere Arten von Vervollständigungen wie Befehle und Benutzernamen.

Antwort2

Hallo Ole :-),

Den Kuchen haben und ihn auch essen:

<tab>gibt Ihnen die beste Schätzung von Bash zum Abschluss. Wie Sie wissen, ist diese Schätzung manchmal falsch.

Allerdings erzwingt M-/( ALT+ SHIFT+ 7(und das ist links ALT, nicht rechts ) auf unseren dänischen Tastaturen) die Vervollständigung als Datei, wenn die Vervollständigung von Bash nicht perfekt ist. Ich verwende sie also , wenn ich weiß, dass ich die Vervollständigung als Datei erzwingen möchte.AltGrM-/

Für mich ist das das Beste aus beiden Welten.

Antwort3

Die Bash-Vervollständigung ist eine Erweiterung der Standardvervollständigung von Bash und selbst ein Bash-Programm. Wenn Sie also die Funktionsweise des Programms ändern möchten, ändern Sie es einfach. Dies ist freie Software, Sie können dies tun. Für den speziellen Fall des tarBefehls ist die Datei /usr/share/bash-completion/completions/tar. Um tareine Datei mit der Erweiterung automatisch zu vervollständigen ova, fügen Sie sie einfach der Zeile hinzu

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

so heißt es

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Beachten Sie, dass dies der Pfad und der Code ist, die für Debian Wheezy (aktuelle stabile Version) vorhanden sind. Eine andere Distribution oder Version kann einen anderen Code haben, aber die Idee ist dieselbe. Öffnen Sie den Code und passen Sie ihn an, damit er das tut, was Sie möchten.

Bearbeiten: Mir ist gerade aufgefallen, dass sich die Frage auf jedes Mal bezog, wenn keine Übereinstimmung gefunden wird, und nicht nur auf den speziellen Fall des Hinzufügens ovazu tar. Vielleicht kann es für jemanden trotzdem nützlich sein, zu wissen, wo er nach der Quelle suchen kann.

verwandte Informationen