2012-05-10 2 views
20

내가 몇 가지 기능을 달성하기 위해 /etc/bash_completion.d/다른 완료 스크립트에 영향을주지 않고 COMP_WORDBREAKS를 재설정하는 방법은 무엇입니까?

에 넣어거야 배쉬 자동 완성 기능을 구현할 때 무언가가 나를 혼동이있다, 나는 단어 나누기를 제거하려면 문자 $COMP_WORDBREAKS에서 콜론 (:)을 입력하고 시작 부분에 슬래시 (/)를 추가하십시오 ($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 

그러나, 나는 직접 COMP_WORDBREAKS를 재설정 할 수 없습니다. 완료 함수가 호출 될 때까지 변수 COMP_WORDS 배열이 이미 채워 졌으므로 로컬 변경은 COMP_WORDBREAKS이 적용되지 않습니다.

하나의 완료 스크립트에서 COMP_WORDBREAKS을 변경하기위한 해결책이 있습니까? 다른 스크립트에는 아무런 영향이 없습니까? (- 예를 들어 SSH에 대한이 전역 변수이며 다른 완료 스크립트의 동작에 영향을 미칠 수 있기 때문에) 당신의 완료 스크립트 수정

$ echo $BASH_VERSION 
4.2.10(1)-release 

답변

20

$COMP_WORDBREAKS은 권장되는 방법이 아닙니다.

그러나 bash 완성은 목표를 달성하는 데 사용할 수있는 몇 가지 도우미 방법을 제공합니다.

단어가 아닌 갱신 완료 단어에서 문자를 처리하기 위해 권장되는 방법은 두 가지 헬퍼 메소드 사용하는 것입니다 다음 -n EXCLUDE 옵션

    • _get_comp_words_by_ref을하지 않고 단어에 완성을 얻는다 단어로 배제의 문자를 고려하는 것은
  • __ltrim_colon_completions
      나누기
    • 는 COMPREPLY 항목에서
      접두사를 포함하는 대장 제거 -

그래서, 여기에 콜론을 처리 A와 방법에 대한 기본 예제입니다 (http://tiswww.case.edu/php/chet/bash/FAQ에 대한 해결 방법 E13)을 (:) 완료 단어에서 :

_mytool() 
{ 
    local cur 
    _get_comp_words_by_ref -n : cur 

    # my implementation here 

    COMPREPLY=($(compgen ..........my_implement......... -- $cur)) 

    __ltrim_colon_completions "$cur" 
} 
complete -F _mytool mytool 

마지막 도움말로 도우미 방법은 /etc/bash_completion에 있습니다. 각 방법에 대한 자세한 설명을 읽고 더 많은 도우미 방법을 알아 보려면 내부를 살펴보십시오.

+0

정말 고맙습니다. Ruby on Rails에서 내 레이크 작업 완료에 정말 유용했습니다! 또한 문서에서 E13 절을 지적 해 주셔서 감사합니다. – ndbroadbent

+0

이것은'cur = "$ {COMP_WORDS [COMP_CWORD]}"''이 줄을'_get_comp_words_by_ref -n : cur' 앞에 넣어두면 올바르게 작동합니다. 이전에 사용하고있는 경우에도이 줄을 추가 할 수 있습니다. end'_get_comp_words_by_ref -n : cur prev' – jmk

+0

모호한 완료를하고 탭을 두 번 누르면이 솔루션을 사용할 때 입력 한 내용을 기반으로 잘못된 제안이 표시됩니다. http : // stackoverflow를 참조하십시오.com/questions/28479216/내말이 정확한 ~ 제안 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 내 단어 포함 콜론 – toftis

관련 문제