Come far funzionare [TAB] con argomenti di alias da completare automaticamente come si può fare con il comando vero e proprio


9

Ho molti alias che ho creato nel mio .bash_aliasesfile e sono molto utili, quindi se voglio tutte le informazioni su un pacchetto faccio qualcosa del tipo:

allinfo software-center

E questo equivale a:

apt-cache show software-center

Come l'alias è impostato come:

alias allinfo='apt-cache show'

Ma c'è uno svantaggio di questo, al momento non sono in grado di completare automaticamente TABquando si utilizza al allinfoposto del comando effettivo. Quindi mi chiedevo se ci fosse un modo per superare questo svantaggio e farlo in modo che il fare allinfo software-ce[TAB]funzionasse esattamente come quando lo usi con il comando vero e non solo per creare un ampio spazio di tabulazione?

Sto usando gnome-terminal.


Informazioni sul sistema operativo:

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

Informazioni sul pacchetto:

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

Questa è una buona domanda Adoro l'idea alla base. Ho cercato dappertutto e ho trovato alcune risposte strette, ma falliscono quando le provo. Se mi viene in mente qualcosa, te lo farò sapere. =)
Terrance

Risposte:


6

Ottima domanda! Se il tuo allinfocomando fosse lo stesso di solo apt-cache, (cioè, senza il show) allora potremmo guardare al completamento apt-cachee applicarlo al tuo allinfoalias.

Tuttavia, vuoi un sottoinsieme del apt-cachecompletamento, quindi abbiamo ancora un po 'di lavoro da fare.

Se cerchiamo nella definizione di completamento per apt-cache- in /usr/share/bash-completion/completions/apt-cache, vediamo che per il showsottocomando viene usato quanto segue :

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

- questo è solo impostare la COMPREPLYvariabile sull'elenco dei pacchetti corrispondenti.

Quindi, possiamo prenderlo in prestito e scrivere la nostra funzione e associarlo al tuo alias allinfo:

# 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

Se aggiungi quella frustrazione al tuo .bashrcfile, dovresti ottenere i completamenti funzionanti come previsto.


0

Non ne ho idea bash, ma funziona con zshalcuni plugin

Installa la z-shell con

sudo apt-get install zsh

e imposta z-shell come shell standard

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

e avvia un nuovo terminale per usare la z-shell

Aggiungi Antigen v1

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

E configurare

# 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

Alcune immagini (il prompt è nojhan / liquidprompt)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Ah, questo funziona solo per me se faccio esattamente come hai fatto, altrimenti presuppone che io stia correndo cde fa il percorso del file. Come ottengo per leggere il .bash_aliasesfile?

Ho tentato di installare quei plugin, ma ho appena iniziato la antigen: command not foundconfigurazione.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.