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

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

일부 git명령에는 많은 옵션이 있으며 필요한 옵션을 검색하는 것이 유용한 경우가 많습니다. 하지만 TAB매체의 너비를 제어하는 ​​옵션을 찾고 있는 것뿐입니다 git-gui. 완성 항목은 약 200개입니다 git config. 확실한 해결 방법은 모든 완성 항목을 편집기에 복사하여 검색하는 것입니다.

[something] | grep tab

man또는 에 info대한 페이지 compgen도 없고 help compgen설명할 옵션도 없으며 자동 완성 기능도 없습니다 compgen(비꼬는 말인가요?).

첨부된:compgen -A작동하지 않습니다.

git-gui조달청: 이것은 -에 관한 질문 이 아닙니다 .탭 너비 문제에 대한 해결책다른 곳.

구매력 평가: 이것이다아니요자동 완성 명령에 대해서만명령 매개변수.

답변1

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 내장 명령에 대한 문서)는 다음에서 찾을 수 있습니다.큰 타격(1).

관련 정보