Frage

Frage: Ich habe eine Frage, scheinbar nicht beantworten konnte dieses bereits gefragt, Bash-completion Frage auf Stack Overflow.Die Frage ist, wie man Bash-alias Abschluss (für jeden alias) auf eine teilweise substring.

Beispiel: Nehmen wir beispielsweise an, ich habe die folgenden Aliase:

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

Ich möchte träge geben Sie einfach "Bäcker" {{TAB}}", zum aufrufen der zweiten alias.

Ich möchte träge geben Sie einfach "Hause{{TAB}}" erhalten Sie eine Liste der alle der oben genannten-Aliase, kann ich wählen Sie dann mit der Tastatur (optimal) oder wählen Sie durch Tippen eine eindeutige substring unterscheidet zwischen den drei Möglichkeiten (weniger als optimal ist).

..ODER ..

Ich möchte träge geben Sie einfach "nach Hause" und dann drücken Sie wiederholt {{TAB}} bis die spezifischen alias ich will zeigt, und drücken Sie dann {{ENTER}}, um ihn auszuführen.

Fühlen Sie sich frei, kreativ zu sein: Wenn Sie einen Weg, dies zu tun, auch wenn es erfordert extreme guru Hack, bitte fühlen Sie sich frei, es zu teilen und fühlen sich frei, zu erklären, Ihre guru Hack auf dem Niveau eines fünf-Jahr-alt, wer wird versuchen zu realisieren Ihre Idee für sich selbst.

Anbindung an bestehende web-Seiten oder RTFMs sind willkommen.

War es hilfreich?

Lösung

Sie generieren können, die Spiele für eine bestimmte Teilzeichenfolge mit compgen -c -X'!*substring*'

Um diese in der bash-Vervollständigung, die Sie erstellen können .bash_completion Datei in Ihrem home-Verzeichnis, so etwas wie dieses:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

Dieser match-Funktion wird ausgeführt, wenn Sie drücken Sie <TAB> auf die Argumente der eval Befehl.Ich habe keinen Weg gefunden, um eine neue matching-Funktion für den ersten Befehl suchen in bash, ich habe nur eine Dokumentation, wie das hinzufügen von benutzerdefinierten Abschlüsse, die für einen bestimmten Befehl, wie eval oben.

Aber ich bin ein bisschen skeptisch, wie sinnvoll das ist...Es gibt keine einfache Möglichkeit, zu wählen Sie die Spiel, die Sie möchten, aus der Liste aus.

Andere Tipps

Wenn Sie wirklich wollen, ändern bash's tab-Verhalten,

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

Dies ist dokumentiert in Die GNU-Readline-Bibliothek # Lassen Readline-Typ Für Sie.

Wahrscheinlich können Sie erreichen, was Sie wollen mit benutzerdefinierte bash_completion Einstellungen, aber ich werde das nicht tun den job für Sie, ok?:-)

Wenn Sie nicht wissen, wovon ich spreche, finden Sie unter hier und hier für die details.Übrigens fände ich sehr ärgerlich

Ich möchte nur faul Typ "home" und dann drücken Sie wiederholt {{TAB}} bis die spezifischen alias ich möchten, angezeigt wird, und drücken Sie dann {{ENTER}} zu führen Sie es aus.

ich denke, das ist der M$ - Stil von "Vollendung" (kommen Sie für DOS/windows-Umgebung?)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top