Domanda

Domanda: Ho una domanda che è a quanto pare non si risponde da questa già chiesto domanda completamento Bash su Stack Overflow. La domanda è: come ottenere il completamento Bash alias (per qualsiasi alias) su una stringa parziale.

Esempio: Si supponga ad esempio ho i seguenti alias:

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

Vorrei digitare pigramente solo "panettiere {{TAB}}" per richiamare il secondo alias.

Vorrei digitare pigramente solo "a casa {{TAB}}" per ottenere un elenco di tutti gli alias di cui sopra che posso poi scegliere con la tastiera (ottimale) o scegliere digitando una stringa univoca che distingue tra le tre opzioni (non ottimale).

.. o ..

Vorrei digitare pigramente solo "casa" e poi premere ripetutamente {{TAB}} fino a quando l'alias speciali Io voglio si presenta, quindi premere {{INVIO}} per eseguirlo.

Sentitevi liberi di essere creativi: Se si dispone di un modo per fare questo, anche se richiede di ricorrere a estremi aggiustamenti guru, non esitate a condividere e non esitate a spiegare il vostro aggiustamenti guru al livello di un bambino di cinque anni che dovranno cercare di attuare la tua idea per se stesso.

Collegamenti a pagine web o RTFMs esistenti sono i benvenuti.

È stato utile?

Soluzione

È possibile generare le corrispondenze per una stringa specificata con compgen -c -X'!*substring*'

Per includere questo nel completamento automatico bash è possibile creare un file .bash_completion nella propria home directory che contiene qualcosa di simile:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

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

}
complete -F _comp $nospace eval

Questa funzione match verrà eseguito quando si preme <TAB> sugli argomenti al comando eval. Non ho trovato un modo per includere una nuova funzione di corrispondenza per la prima ricerca di comando in bash, ho trovato solo la documentazione su come aggiungere completamenti personalizzati per un comando specifico, come <=> sopra.

Ma io sono un po 'scettico per quanto sia utile questo è ... Non v'è alcun modo semplice per selezionare quale corrispondenza desiderato dalla lista.

Altri suggerimenti

Se si vuole veramente cambiare il comportamento scheda s 'bash,

# ~/.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

Questo è documentato in La GNU Readline Biblioteca # Lasciando Readline Tipo Per È .

Probabilmente si può ottenere quello che vuoi con le impostazioni personalizzate bash_completion, ma io non ho intenzione di fare il lavoro per te, ok? : -)

Se non sapete di cosa sto parlando, vedi qui e qui per i dettagli. A proposito, avrei trovato molto fastidioso questo

  

Vorrei pigramente basta digitare   "Casa" e poi premere ripetutamente   {{TAB}} fino a quando la specifica alias I   vuole si presenta, quindi premere {{INVIO}} per   eseguirlo.

, che credo sia il M $ lo stile di "completamento" (vieni in ambiente DOS / Windows?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top