2010-05-10 19 views
12

ho aggiunto il completamento bash per Maven seguendo la documentazione:completamento Bash per Maven sfugge colon

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

Tutto funziona bene, tranne per gli obiettivi che utilizzano i due punti. Per esempio, invece di

mvn eclipse:eclipse 

completamento sfugge colon

mvn eclipse\:eclipse 

Eventuali suggerimenti come questo può essere fissato? Sto utilizzando Ubuntu 8.10 (2.6.27-17-generic) e

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

risposta

13

Da Bash FAQ E13.

Subito dopo il comando complete nello script si è collegato al, questo comando per rimuovere il colon dalla lista dei caratteri di interruzione di parola completamento:

COMP_WORDBREAKS=${COMP_WORDBREAKS//:} 
+0

Grazie! Questa cosa mi ha infastidito per un po 'di tempo :) – armandino

+2

Un avvertimento che probabilmente non dovresti farlo, in quanto interrompe le funzioni di completamento che si basano sul comportamento predefinito (come scp). Vedi https://bugs.launchpad.net/gvfs/+bug/290784 per la discussione – gfxmonk

+1

Accetto per @gfxmonk, questo non è appropriato in quanto interrompe il completamento per altre funzioni –

2

Eventuali suggerimenti come questo può essere risolto? Sto usando Ubuntu 8.10 (2.6.27-17-generico) e

La risposta di Dennis è sicuramente corretta.

Ma per la cronaca, c'è un problema registrato (MNG-3928) per migliorare la documentazione sull'integrazione di Maven con bash. Il problema ha uno script allegato che è una versione migliorata di quella attualmente online e funziona. Potresti provare.

Personalmente, io uso il Bash Completion script from Ludovic Claude's PPA (quello che è incluso nel pacchetto Maven da Ubuntu) che scarico direttamente da bazaar (la sua e è una diretta download link alla revisione HEAD). È semplicemente fantastico.

6

Ecco una questione connessa e un'altra soluzione suggerita:

How to reset COMP_WORDBREAKS without effecting other completion script?

Come detto prima, la soluzione più semplice è di alterare COMP_WORDBREAKS. Tuttavia, la modifica di COMP_WORDBREAKS nello script di completamento non è sicura (poiché è una variabile globale e ha l'effetto collaterale di influire sul comportamento di altri script di completamento, ad esempio scp).

Pertanto, il completamento di bash offre alcuni metodi di supporto che è possibile utilizzare per raggiungere il proprio obiettivo in un modo migliore e più sicuro.

Due metodi di supporto sono stati aggiunti in Bash completion 1.2 per questo:

  • _get_comp_words_by_ref con l'-n EXCLUDE opzione
    • ottiene la parola-per-completa senza prendere in considerazione i caratteri escludere per parola rompe
  • __ltrim_colon_completions

Quindi, ecco un esempio di base di come un gestire due punti (:) in termini di completamento:

_mytool() 
{ 
    local cur 
    _get_comp_words_by_ref -n : cur 

    # my implementation here 

    __ltrim_colon_completions "$cur" 
} 
complete -F _mytool mytool 

Utilizzando i metodi helper semplifica anche la sceneggiatura completamento e assicura che si ottiene lo stesso comportamento in qualsiasi ambiente (bash-3 o bash-4).

È anche possibile dare un'occhiata agli script di completamento man o perl in /etc/bash_completion.d per vedere come utilizzano i metodi di supporto sopra riportati per risolvere questo problema.

Problemi correlati