C'è qualcosa che mi confondere quando implementare una funzione di auto-completamento bash che mi metterò in /etc/bash_completion.d/Come resettare COMP_WORDBREAKS senza influenzare altri script di completamento?
Al fine di raggiungere qualche caratteristica, voglio rimuovere l'interruzione di parola caratteri due punti (:
) dalla variabile $COMP_WORDBREAKS
e aggiungere una barra (/
) all'inizio di $COMP_WORDBREAKS
.
COMP_WORDBREAKS=" /'><=;|&("
_mytool()
{
local cur=${COMP_WORDS[COMP_CWORD]}
compopt -o nospace
# my implement here
COMPREPLY=($(compgen ..........my_implement......... -- $cur))
}
complete -F _mytool mytool
Tuttavia, non riesco a ripristinare COMP_WORDBREAKS
direttamente perché il valore è condiviso con altri script di completamento. Quando viene chiamata la funzione di completamento, l'array variabile COMP_WORDS
è già stato compilato, quindi le modifiche locali COMP_WORDBREAKS
non hanno alcun effetto.
Esiste una soluzione per la modifica di COMP_WORDBREAKS
in uno script di completamento e nessun effetto per altri script?
$ echo $BASH_VERSION
4.2.10(1)-release
Grazie mille, questo è stato davvero utile per i miei completamenti di attività rake in Ruby on Rails! Inoltre, grazie per aver segnalato la sezione E13 nei documenti. – ndbroadbent
ha funzionato correttamente, quando ho messo questa riga 'cur =" $ {COMP_WORDS [COMP_CWORD]} "' prima di '_get_comp_words_by_ref -n: cur' anche a sapersi, se usi anche prev, puoi aggiungerlo al fine '_get_comp_words_by_ref -n: cur prev' – jmk
Quando ho completamenti ambigui e ho premuto due volte la scheda ricevo suggerimenti errati basati su ciò che ho digitato quando uso questa soluzione. Vedi http: // StackOverflow.it/questions/28479216/how-to-give-correct-suggestions-to-tab-complete-when-my-words-contains-colons – toftis