zsh 완료 방법 디버깅

zsh 완료 방법 디버깅

완료 방법을 디버깅하려고 합니다. 이 방법을 사용하면 이 세 폴더 내의 모든 디렉터리가 표시됩니다. 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.). 그 외에는 코드가 매우 합리적으로 보입니다.

관련 정보