In quanti modi posso ottenere il completamento alias Bash su una stringa parziale?
-
21-08-2019 - |
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.
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?)