zsh 완료 기능을 수동으로 호출할 수 있습니까?

zsh 완료 기능을 수동으로 호출할 수 있습니까?

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완성 기능을 수동으로 호출할 수 있느냐는 것입니다. _mancompsys(자체적으로 호출됨 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

하나 있다_fileszsh FAQ에서 이 기술을 사용하는 예.

답변2

zsh가 왜 이 기능을 제공하지 않는지 모르겠습니다. 운 좋게도 누군가 해킹을 했습니다.https://github.com/Valodim/zsh-capture-completion

$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>

관련 정보