기능에서 줄 끝 위젯이 작동하지 않음(zsh-autosuggestions)

기능에서 줄 끝 위젯이 작동하지 않음(zsh-autosuggestions)

왜 이런 일이 일어나는 걸까요?

bindkey '^ ' end-of-line

작동하고 제안을 수락하지만

function accept {
  zle end-of-line
}
zle -N accept
bindkey '^ ' accept

이것은 작동하지 않습니다.

이유를 모르겠습니다. 함수 내에서도 교체를 시도했지만 end-of-line여전히 아무 일도 일어나지 않습니다.autosuggest-accept


내가 하려는 것은 두 가지 키 바인딩을 사용하는 것입니다.

  • Ctrl+스페이스바: 제안을 수락하고 쉽게 완성된 라인을 실행합니다.bindkey '^ ' autosuggest-accept
  • Ctrl+Alt+스페이스바: 제안을 수락하고, sudo처음에 추가하고 실행합니다. 나는 이것을 시도했습니다 :
function insert-sudo-accept {
  zle end-of-line
  LBUFFER="sudo $LBUFFER"
  zle accept-line
}

하지만 제가 말했듯이 zle end-of-line작동하지 않습니다. 도와주세요.

答え1

  • 키바운드 위젯을 활성화할 때 ZLE(Zsh Line Editor)는 $WIDGET매개변수를 활성화된 위젯의 이름으로 설정합니다.
  • 그러면 해당 값이 의 구성원인지 zsh-autosuggestions확인하기 위해 검사됩니다 . 그렇다면 제안을 받아들일 것입니다.$WIDGET$ZSH_AUTOSUGGEST_ACCEPT_WIDGETS
  • 그러나 위젯 기능 내에서 zle end-of-line호출할 때아니요값이 변경되었습니다 $WIDGET.

이 문제를 해결하는 방법에는 세 가지가 있습니다.

  • zsh-autosuggestion자신의 위젯을 autosuggest-accept다음에 바인딩하십시오 CtrlSpace.
    bindkey '^@' autosuggest-accept
    
  • 부르다 zle end-of-line -w. $WIDGET호출 중인 위젯의 이름으로 업데이트됩니다 .
  • 다음에 위젯을 추가하세요 $ZSH_AUTOSUGGEST_ACCEPT_WIDGETS:
    ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(
        <insert widget name here>
    )
    

関連情報