완성파일을 확인할 수 있는 방법이 있나요?

완성파일을 확인할 수 있는 방법이 있나요?

bash, zsh 및 Fish에 대한 완성 파일을 생성하는 도구가 있습니다. 저는 보통 zsh를 사용하는데 이 완성 파일을 zsh에서 작동시킬 수 없습니다. 그래서 테스트로 fish를 설치하고 fish에 대한 완성 파일을 만들었습니다. 그리고 나는 일하러 갈 수 없습니다. 다른 모든 완성은 zsh 및 Fish에서 잘 작동하므로 도구가 손상된 완성 파일을 생성하는 것으로 의심됩니다. 완성 파일에서 구문 오류를 확인하는 방법이 있나요?

답변1

내 대답에는 zsh("새로운" 완성 시스템 사용, 즉 호출 후 compinit)와 bash가 포함됩니다. 생선에 대해서는 참조NotTheDr01ds의 답변.

완성 파일에 구문 오류가 있는 경우 완성 코드가 로드될 때 오류 메시지가 표시됩니다. Bash에서는 /etc/bash_completion로드 타임에 이런 일이 발생합니다. zsh에서는 완성 함수가 처음 호출될 때 이런 일이 발생합니다. 하지만통사론오류는 거의 발생하지 않습니다. 대부분의 오류는 구문 오류가 아니며 완성 함수를 호출하는 것 외에는 유효한지 확인할 수 있는 방법이 없습니다.

완료를 생성하는 동안 실제 오류가 발생하면 터미널에 오류 메시지가 표시됩니다. 그러나 코드가 오류를 트리거하지 않지만 필요한 완료를 생성하지 않으면 오류가 표시되지 않습니다.

가장 먼저 확인해야 할 것은 원하는 완성 함수가 실제로 호출되는지 여부입니다. zsh의 경우 확인하세요.

echo $_comps[foo]

foo옵션/인수를 완료할 명령은 어디에 있습니까? bash의 경우 확인하십시오.

complete -p foo

사용자 정의 완성 기능이 로드되지 않는 경우 다음을 참조하세요.사용자 정의 명령에 대한 동적 zsh 자동 완성또는사용자 정의 bash 탭 완료.

완료 코드를 디버깅하려면 zsh에서 실행 대신 ^X?( )를 누르십시오.Ctrl+X ?Tab_complete_debug. 그러면 완성된 코드의 추적이 를 눌러 볼 수 있는 파일에 기록됩니다 Up Enter.

답변2

아마도 내가 모르는 기술이 더 있을 수 있지만 이에 대해서는 다음 fish부터 시작하겠습니다.

complete -c <appname>

...지금까지 로드된 완성 옵션을 봅니다. 완료한 항목이 없다면 현재 비어 있는 상태일 수 있습니다.

그런 다음 계속하세요.

fish --debug=complete

stdout에서 출력을 보는 데 문제가 있는 경우(완료 중 팝업 메시지에 문제가 있을 수 있음) 로그의 파일 이름을 지정할 수 있습니다.

fish --debug='complete' --debug-output=/tmp/fish.log

<toolname>.fish그리고 완성함수는 어디서 생성되는지 아시나요 ? 그것~해야 한다나는 믿는다 /usr/share/fish/vendor_completions.d/. 그러나 일부기타 위치검색완성 기능.

이 기능이 있으면 다음을 <toolname>.fish시도해 볼 수 있습니다.

fish_trace=1 source /path/to/<toolname>.fish

답변3

완성 파일에서 구문 오류를 확인하는 방법이 있나요?

파일의 구문 오류를 확인하려면 해당 파일을 실행할 수 있습니다 fish --no-execute. 예를 들어

fish --no-execute /path/to/file.fish

그러나 이는 complete문 내부를 살펴보지는 않습니다. 예를 들어

complete -c mycommand --condition 'banana; && rama' --short f

&& rama나중에 요청이 완료되면 평가될 문자열 안에 있기 때문에 불평하지 않습니다 .

가짜 명령줄을 사용하여 완성을 실행하는 방법은 다음과 같습니다 complete --do-complete. 예를 들어

 complete --do-complete="mycommand someoption"

그러면 명령줄에 대해 fish가 생성한 완성 후보가 인쇄됩니다 mycommand someoption.

관련 정보