zsh 프롬프트에 있고 현재 "컨텍스트"(부분적으로 완료된 명령줄 명령)가 있는 경우
% man gr_
^ here I have used _ to represent the cursor
그런 다음 _complete_help
함수 를 호출하면CtrlXh
맥락이 이렇다고 말해준다
% man gr_
tags in context :completion::complete:man::
manuals (_man)
이 출력을 올바르게 읽으면 _man
알려진 모든 매뉴얼 페이지를 나열하는 완전한 함수가 있음을 알 수 있습니다. Tab이 시점에서 키를 누르면 해당 함수가 호출됩니다.
제 질문은 _man
완성 기능을 수동으로 호출할 수 있느냐는 것입니다. _man
compsys(자체적으로 호출됨 Tab) 에 의해 호출되는 대신 ?
zle minibuffer를 사용해 본 <Esc>x
후 를 입력해 보았는데 _man<Enter>
, minibuffer는 zle 명령만 이해하고 일반적인 기능을 수행할 수 없는 것 같습니다.
답변1
간단한 완성 함수로 가능하고 사용할 수 있다는 것을 알았지만 이 특정 함수는 _man
일부 구문 분석 및 유효성 검사 작업을 수행하기 때문에 예상되는 컨텍스트 외부에서 호출하면 오류가 발생합니다.
_man
수동으로 호출할 수 있도록 완성 함수를 키 조합에 바인딩하는 방법은 다음과 같습니다 .
필요한 옵션을 설정하려면 래퍼 함수를 정의하세요.
_man_autonomous () {
eval $_comp_setup
_man "$@"
}
줄 편집기를 사용하여 새 위젯을 등록합니다.
zle -C complete-man expand-or-complete _man_autonomous
Ctrl위젯을 + 에 바인딩T
bindkey '^T' complete-man
답변2
zsh가 왜 이 기능을 제공하지 않는지 모르겠습니다. 운 좋게도 누군가 해킹을 했습니다.https://github.com/Valodim/zsh-capture-completion
$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>