%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EC%9D%B8%EC%88%98%EC%97%90%20%EB%8C%80%ED%95%9C%20Zsh%20%EC%9E%90%EB%8F%99%20%EC%99%84%EC%84%B1%20%EA%B7%9C%EC%B9%99%EC%9D%84%20%EA%B8%B0%EC%A1%B4%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8C%80%ED%95%9C%20%EA%B7%9C%EC%B9%99%EC%9C%BC%EB%A1%9C%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%84%A4%EC%A0%95%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 가지고있다사용자 정의 Zsh 기능g
:
function g() {
# Handle arguments [...]
}
여기에서는 Git 명령을 실행하기 위한 짧은 인수를 처리합니다. 예를 들어:
g ls # Executes git ls-files ...
g g # Executes git grep ...
Git에 대한 짧은 매개변수 규칙으로 자동 완성 규칙을 설정할 수 있어야 하는데 어떻게 해야 할지 모르겠습니다.
예를 들어, 다음 매개변수를 제공하는 g ls <TAB>
탭이 있는 규칙을 완성 해야 합니다 .git ls-files <TAB>
git ls-files
$ g ls --<TAB>
--abbrev -- set minimum SHA1 display-length
--cached -- show cached files in output
--deleted -- show deleted files in output
# Etc...
사용자 정의 짧은 명령을 Git 명령에 매핑하기 g
때문에 이것은 자동 완성으로 설정된 것이 아닙니다 .git
답변1
나는 /usr/share/zsh/functions/Completion/Unix/_git
이와 같은 별칭에 대한 몇 가지 힌트를 발견하고 별칭에 대해 다음 함수를 정의하게 되었습니다.
_git-ls () {
# Just return the _git-ls-files autocomplete function
_git-ls-files
}
그런 다음 직선으로 compdef g=git
. 예를 들어 자동 완성 시스템은 사용자가 실행 중임을 확인 g ls
하고 _git-ls
자동 완성 기능을 사용합니다.
나를 올바른 방향으로 안내해 준 user67060에게 감사드립니다.
답변2
나는 매우 비슷한 일을 해야 했기 때문에 대략적으로 문제가 해결될 것입니다.
_g () {
case "${words[2]}" in
ls) words[1,2]=(git ls-files);;
g) words[1,2]=(git grep);;
*) return 1;;
esac
_git # Delegate to completion
}
compdef _g g
$CURRENT
한 가지 주의할 점은 매개변수 개수를 변경하면 변수도 조정해야 한다는 점입니다 .
답변3
이것이 내가하려는 일입니다.
_tg () {
local _ret=1
local cur cword prev
cur=${words[CURRENT]}
prev=${words[CURRENT-1]}
cmd=${words[2]}
let cword=CURRENT-1
case "$cmd" in
ls)
emulate ksh -c _git_ls_files
;;
g)
emulate ksh -c _git_grep
;;
esac
let _ret && _default && _ret=0
return _ret
}
compdef _tg tg
그러나 이는 zsh가 아닌 Git을 사용하여 완료됩니다.
https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-completion.zsh