Завершение Bash для Maven избегает толстой кишки - PullRequest
13 голосов
/ 10 мая 2010

Я добавил завершение bash для Maven, следуя документам:

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

Все работает хорошо, кроме целей, которые используют двоеточие. Например, вместо

mvn eclipse:eclipse

завершение ускользает от двоеточия

mvn eclipse\:eclipse

Есть предложения, как это можно исправить? Я использую Ubuntu 8.10 (2.6.27-17-generic) и

$ bash -version
GNU bash, версия 3.2.39 (1) -релиз (i486-pc-linux-gnu)

Ответы [ 4 ]

13 голосов
/ 11 мая 2010

С Часто задаваемые вопросы по Bash E13 .

Сразу после команды complete в сценарии, на который вы ссылаетесь, введите эту команду, чтобы удалить двоеточие из списка символов завершения слова завершения:

COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
8 голосов
/ 19 сентября 2012

Вот связанный вопрос и другое предлагаемое решение:

Как сбросить COMP_WORDBREAKS, не затрагивая другой скрипт завершения?

Как указывалось ранее, самое простое решение - изменить COMP_WORDBREAKS. Однако изменение COMP_WORDBREAKS в вашем скрипте завершения небезопасно (так как это глобальная переменная, которая имеет побочный эффект, влияющий на поведение других скриптов завершения - например, scp).

Таким образом, bash complete предлагает несколько вспомогательных методов, которые вы можете использовать для достижения своей цели более эффективным и безопасным способом.

Два вспомогательных метода были добавлены в Завершение Bash 1.2 для этого:

  • _get_comp_words_by_ref с опцией -n EXCLUDE
    • возвращает слово для завершения без учета символов в ИСКЛЮЧЕНИИ как разрывов слов
  • __ltrim_colon_completions

Итак, вот базовый пример того, как обрабатывать двоеточие (:) в словах завершения:

_mytool()
{
    local cur
    _get_comp_words_by_ref -n : cur

    # my implementation here

    __ltrim_colon_completions "$cur"
}
complete -F _mytool mytool

Использование вспомогательных методов также упрощает сценарий завершения и обеспечивает одинаковое поведение в любой среде (bash-3 или bash-4).

Вы также можете взглянуть на сценарии завершения man или perl в /etc/bash_completion.d, чтобы увидеть, как они используют вышеуказанные вспомогательные методы для решения этой проблемы.

2 голосов
/ 04 сентября 2010

Есть предложения, как это можно исправить? Я использую Ubuntu 8.10 (2.6.27-17-generic) и

Ответ Дениса определенно правильный.

Но, к сведению, существует зарегистрированная проблема ( MNG-3928 ) для улучшения документации по интеграции Maven с bash. К проблеме прикреплен скрипт, который является улучшенной версией того, который в данный момент находится в сети и работает. Возможно, вы захотите попробовать.

Лично я использую сценарий Bash Completion из PPA Людовика Клода (тот, который входит в пакет maven из Ubuntu), который я загружаю прямо с базара (ее прямая загрузка) ссылка на версию HEAD). Это просто потрясающе.

1 голос
/ 03 декабря 2010

Я бы пошел с файлом завершения Bash Maven2 на willcodeforbeer.com .

  • прекрасно работает
  • обрабатывает двоеточия
  • не портит глобальную переменную COMP_WORDBREAKS (тем самым нарушая scp и т. Д.)
  • легко редактировать и понимать

Надеюсь, это поможет!

...