zsh: Git 명령 완성 기능을 이용한 탭 완성

zsh: Git 명령 완성 기능을 이용한 탭 완성

zsh에서는 다음 명령을 사용합니다.로컬 및 원격 지점 삭제 기능다음 명령을 사용하십시오.

gpDo () {
    git branch -d "$1" && git push --delete origin "$1"
}

현재 Git 브랜치에 대한 자동 완성은 작동하지 않습니다. 전체 지점 이름을 수동으로 입력해야 합니다. 이러한 유형의 기능을 사용하려면 탭 완성을 어떻게 해야 합니까?

답변1

나는 당신이 사용하고 있다고 가정합니다"새로운" 완성 시스템에 의해 활성화되었습니다 compinit. oh-my-zsh를 사용한다면 그렇습니다.

git 브랜치 이름을 사용하도록 zsh에 지시해야 합니다 gpDo. Git은 이미 브랜치 이름을 완성하는 방법을 제공합니다. zsh 5.0.7부터 이것은 기능이지만 __git_branch_names안정적인 인터페이스가 아니므로 다른 버전에서는 변경될 수 있습니다. 이 기능을 사용하려면 다음 줄을 다음 줄에 입력하세요 .zshrc.

compdef __git_branch_names gpDo

이 문을 사용하면 gpDo명령줄에서 작업을 한 번 이상 완료한 후에만 완료가 적용됩니다 git. 이는 zsh의 기능 자동 로딩 문제 때문입니다. 또는 _git 2>/dev/null귀하의 것에서 실행하세요 .zshrc. 완료 함수가 잘못된 컨텍스트에서 호출되기 때문에 오류가 발생하지만 오류는 무해하며 로드 및 관련 함수(__git_branch_names 포함)의 부작용은 _git그대로 유지됩니다.

또는 자체 git 분기 완료 기능을 정의하세요. 빠르고 더러운 방법:

_JJD_git_branch_names () {
  compadd "${(@)${(f)$(git branch -a)}#??}"
}

관련 정보