So bringen Sie [TAB] dazu, mit Argumenten von Aliasen zu arbeiten, um sie automatisch zu vervollständigen, wie dies mit dem eigentlichen Befehl möglich ist

9

Ich habe viele Aliase, die ich in meiner .bash_aliasesDatei erstellt habe , und sie sind sehr nützlich. Wenn ich also alle Informationen zu einem Paket haben möchte, mache ich etwas wie:

allinfo software-center

Und das entspricht:

apt-cache show software-center

Da der Alias ​​wie folgt festgelegt ist:

alias allinfo='apt-cache show'

Es gibt jedoch einen Nachteil, den ich derzeit nicht automatisch vervollständigen kann, TABwenn ich allinfoanstelle des eigentlichen Befehls verwende. Ich habe mich also gefragt, ob es eine Möglichkeit gibt, diesen Nachteil zu überwinden und ihn so zu gestalten, dass das Ausführen allinfo software-ce[TAB]genauso funktioniert wie bei Verwendung des eigentlichen Befehls und nicht nur das Erstellen eines großen Tabulators.

Ich benutze gnome-terminal.


Betriebssysteminformationen:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

Paketinformationen:

gnome-terminal:
  Installed: 3.14.2-0ubuntu3
  Candidate: 3.14.2-0ubuntu3
  Version table:
 *** 3.14.2-0ubuntu3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status

quelle
Das ist eine gute Frage. Ich liebe die Idee dahinter. Ich habe überall gesucht und einige enge Antworten gefunden, aber sie scheitern, wenn ich sie versuche. Wenn mir etwas einfällt, werde ich es Sie wissen lassen. =)
Terrance

Antworten:

6

Gute Frage! Wenn Ihr allinfoBefehl derselbe wie nur apt-cachewar (dh ohne den show), könnten wir die Fertigstellung prüfen apt-cacheund diesen auf Ihren allinfoAlias anwenden .

Sie möchten jedoch eine Teilmenge der apt-cacheFertigstellung, sodass wir etwas mehr Arbeit zu erledigen haben.

Wenn wir in der Vervollständigungsdefinition nach apt-cache- in suchen /usr/share/bash-completion/completions/apt-cache, sehen wir, dass für den showUnterbefehl Folgendes verwendet wird :

        COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) )

- Hiermit wird lediglich die COMPREPLYVariable auf die Liste der übereinstimmenden Pakete gesetzt.

Wir können dies also ausleihen, unsere eigene Funktion schreiben und sie an Ihren allinfo-Alias ​​binden:

# define a function to print the possible completions for
# an allinfo invocation
_allinfo()
{
    _init_completion || return
    COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2>/dev/null))
    return 0
}

# bind the above completion function to the 'allinfo' alias
complete -F _allinfo allinfo

Wenn Sie diese Datei zu Ihrer .bashrcDatei hinzufügen, sollten die Vervollständigungen wie erwartet funktionieren.

Jeremy Kerr
quelle
0

Ich habe keine Ahnung für bash, aber es funktioniert mit zshund einigen Plugins

Installieren Sie die Z-Shell mit

sudo apt-get install zsh

und legen Sie die Z-Shell als Standard-Shell fest

sudo chsh "$USER" -s $(which zsh)

und starten Sie ein neues Terminal, um die Z-Shell zu verwenden

Fügen Sie Antigen v1 hinzu

cd
git clone https://github.com/zsh-users/antigen.git

Und konfigurieren

# path to antigen clone
source ~/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle git
antigen bundle heroku
antigen bundle pip
antigen bundle lein
antigen bundle command-not-found
antigen bundle zsh-users/zsh-completions src

# Syntax highlighting bundle.
antigen bundle zsh-users/zsh-syntax-highlighting

# Load the theme.
antigen theme robbyrussell
# antigen bundle nojhan/liquidprompt

# Tell antigen that you're done.
antigen apply

Einige Bilder (Eingabeaufforderung ist nojhan / liquidprompt)

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

AB
quelle
Ah, das funktioniert bei mir nur, wenn ich genau das tue, was Sie getan haben, andernfalls wird nur davon ausgegangen, dass ich laufe cdund den Dateipfad mache. Wie kann ich die .bash_aliasesDatei lesen ?
Ich habe versucht, diese Plugins zu installieren, aber ich habe gerade die antigen: command not foundKonfiguration erhalten.