2010-05-10 2 views
12

J'ai ajouté bash completion pour Maven suivant les docs:achèvement Bash pour Maven échappe côlon

http://maven.apache.org/guides/mini/guide-bash-m2-completion.html

Tout fonctionne bien sauf pour les objectifs qui utilisent deux points. Par exemple, au lieu de

mvn eclipse:eclipse 

achèvement échappe côlon

mvn eclipse\:eclipse 

Toute suggestion comment cela peut être résolu? J'utilise Ubuntu 8.10 (2.6.27-17-générique) et

bash $ -version
bash GNU version 3.2.39 (1) -release (i486-pc-linux-gnu)

Répondre

13

De Bash FAQ E13.

Juste après la commande complete dans le script lié à, exécutez cette commande pour supprimer les deux points de la liste des mots d'achèvement caractères de saut:

COMP_WORDBREAKS=${COMP_WORDBREAKS//:} 
+0

Merci! Cette chose m'inquiète depuis un certain temps :) – armandino

+2

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

+1

Accepter @gfxmonk, ce n'est pas approprié car il casse l'achèvement pour d'autres fonctions –

2

Toute suggestion comment cela peut être résolu? J'utilise Ubuntu 8.10 (2.6.27-17-générique) et

La réponse de Dennis est définitivement correcte.

Mais pour l'enregistrement, il y a un problème enregistré (MNG-3928) pour améliorer la documentation sur l'intégration de Maven avec bash. Le problème a un script attaché qui est une version améliorée de celui actuellement en ligne et fonctionne simplement. Vous pourriez vouloir essayer.

Personnellement, j'utilise le Bash Completion script from Ludovic Claude's PPA (celui qui est livré dans le paquet maven d'Ubuntu) que je télécharge directement depuis bazaar (son e est un direct download link à la révision HEAD). C'est juste génial.

6

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.