왜 이런 일이 일어나는 걸까요?
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> )