완료 방법을 디버깅하려고 합니다. 이 방법을 사용하면 이 세 폴더 내의 모든 디렉터리가 표시됩니다. compinit가 올바르게 로드되었는지 확인했습니다. 추적을 시도했지만 대부분을 해독할 수 없었습니다.
이것은 나의 완성 기능입니다
#compdef c
_files -W $PROJECT/repos -/
_files -W $PROJECT/helm -/
_files -W ~/Code -/
그리고 함수 자체, c
#!/bin/zsh
cd "$PROJECTS/$1"
나는 아무것도 얻지 못합니다. _files에 먼저 무엇이 들어 있는지 알아내기 위해 이것을 디버깅하는 방법을 모르겠습니다.
답변1
실행 대신 ^X?
( )를 누르세요 .Ctrl+X ?Tab_complete_debug
. 그러면 완성된 코드의 추적이 를 눌러 볼 수 있는 파일에 기록됩니다 Up Enter.
또는 디버깅하는 동안 특정 함수의 추적을 생성하려면 함수 시작 부분에 다음을 추가하여 실행 추적을 가져옵니다.
setopt local_options xtrace
추적은 매우 장황하므로 터미널보다는 파일에 저장하는 것이 더 나을 수도 있습니다. 이렇게 하려면 코드를 도우미 함수에 넣고 해당 함수의 stderr을 리디렉션하세요.
#compdef c
function _c_do_complete {
_files -W $PROJECT/repos -/
_files -W $PROJECT/helm -/
_files -W ~/Code -/
}
function _c {
setopt local_options xtrace
_c_do_complete 2>|~/_c.trace
}
_c "$@"
$PROJECT
완료 코드에 있지만 함수에 있습니다 $PROJECTS
(실제로는 스크립트이므로 스크립트에만 있는 것은 무의미하므로 아무 작업도 수행하지 않습니다 cd
.). 그 외에는 코드가 매우 합리적으로 보입니다.