为什么会这样
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
- 当激活键绑定的小部件时,Zsh 行编辑器 (ZLE) 会将
$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> )