Voici une question connexe et une autre solution proposée:
How to reset COMP_WORDBREAKS without effecting other completion script?
Comme indiqué précédemment, la solution la plus simple consiste à modifier COMP_WORDBREAKS
. Cependant, modifier COMP_WORDBREAKS
dans votre script d'achèvement n'est pas sûr (car il s'agit d'une variable globale et cela a pour effet secondaire d'affecter le comportement d'autres scripts d'achèvement - par exemple, scp).Par conséquent, l'achèvement de bash offre certaines méthodes d'aide que vous pouvez utiliser pour atteindre votre objectif d'une manière meilleure et plus sûre.
Deux méthodes d'aide ont été ajoutées dans Bash completion 1.2 pour cela:
_get_comp_words_by_ref
avec l'option -n EXCLUDE
- obtient le mot à complet sans tenir compte des caractères EXCLURE comme mot casse
__ltrim_colon_completions
Donc, voici un exemple de base de comment une poignée de deux points (:) dans les mots d'achèvement:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
en utilisant les méthodes d'assistance simplifie également le script d'achèvement et veille à ce que vous obtenez le même comportement sur un environnement (bash-3 ou bash-4).
Vous pouvez également jeter un oeil à man
ou perl
scripts d'achèvement dans /etc/bash_completion.d
pour voir comment ils utilisent les méthodes d'assistance ci-dessus pour résoudre ce problème.
Merci! Cette chose m'inquiète depuis un certain temps :) – armandino
Un avertissement que vous ne devriez probablement pas faire cela, car il casse les fonctions de complétion qui s'appuient sur le comportement par défaut (comme scp). Voir https://bugs.launchpad.net/gvfs/+bug/290784 pour la discussion – gfxmonk
Accepter @gfxmonk, ce n'est pas approprié car il casse l'achèvement pour d'autres fonctions –