문자열 완성을 stdout으로 출력하는 방법은 무엇입니까?


15

일부 git명령에는 많은 옵션이 있으며 필요한 명령을 검색하는 것이 종종 유용합니다. TAB너비 를 제어하는 ​​옵션을 찾고 git-gui있었지만 약 200 개의 완성이 git config있습니다. 명백한 해결 방법은 모든 완성 물을 편집기로 복사하여 검색하는 것입니다.

[something] | grep tab

어떤이 없습니다 man또는 info를위한 페이지 compgen, help compgen심지어는 자신의 옵션을 설명하지 않습니다, 그리고 더 자동 완성은 거기 없다 compgen(방법의 그 아이러니?).

추신 : compgen -A작동하지 않습니다.

PPS :이 약 문제가 아닙니다 git-gui- 질문은 폭 탭으로 솔루션을 다른 곳이었다.

PPPS : 이것은 하지 자동 완성 명령 만에 대한 명령 매개 변수 .


이것은 "tab complete"의 출력을 파이프하는 방법 과 매우 유사합니다 . 그러나 받아 들여진 대답은 논쟁이 아닌 명령을 완수하기위한 것이 었습니다
Michael Mrozek

답변:


10

sudo자동 완성이 완료 목록을 생성하는 것과 동일한 방법을 사용하는 다음 기능을 사용할 수 있습니다 .

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

여기서 _command_offsetbash-completion (패키지)에 정의되어 있습니다.

참고 : 기능은 대화식 쉘에서 실행해야합니다 (예 : 파일에있는 경우 파일을 실행하는 대신 파일을 제공해야 함). 필요한 완료 규칙 / 기능을 정의하지 않습니다.

추신. compgen -A내장 된 작업에만 작동하며 시도해야하지만 작동하지 않는 것은 compgen -F(또는 실제로 compgen -o bashdefault -o default -o nospace -F _git)입니다. 이것이 작동하지 않는 이유 (및 compgen / complete를 포함한 bash 내장 명령에 대한 문서)는 bash (1) 에서 찾을 수 있습니다 .


@ l0b0은 모든 경우에 잘 작동합니다.
yuyichao

훌륭합니다! 나는 몇 가지 사소한 조정을했고 이제는 .bash_aliases 에 있습니다. 당신은 해결책 만 남도록 정리하고 싶을 수도 있지만, 현상금을 얻는 것은 의심의 여지가 없습니다. 더 이상 관련이 없으므로 토론 의견을 삭제하겠습니다.
l0b0

1
대화 형 쉘에서 이것을 사용하면 이미 완료 된 탭 완성을 파괴 할 수 있음을 발견했습니다. 각 변수를 함수에 대해 로컬로 만들면 해당 문제가 해결됩니다. (예 local COMP_LINE="$*")
AL 플래너

@ALFlanagan 좋은 지적입니다. 업데이트되었습니다.
yuyichao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.