如何在zsh小部件定义中移动光标位置

Boh*_*ohr 4 zsh zsh-zle

我有这个片段:

insert_sudo () { zle beginning-of-line; zle -U "sudo "; zle end-of-line; }
zle -N insert-sudo insert_sudo
bindkey "\es" insert-sudo
Run Code Online (Sandbox Code Playgroud)

\es只是将"sudo"附加到一行的末尾,而不是我预期的行的开头.请帮忙!

mkl*_*nt0 5

请尝试以下方法:

insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; }
Run Code Online (Sandbox Code Playgroud)

$BUFFER通过预先添加sudo 然后将光标放在行的末尾来直接修改包含命令行内容的特殊变量.

问题zle -U是它只在小部件完成后才生效.从zsh手册:

在当前执行的窗口小部件完成后,ZLE的行为就像字符串中的字符是由用户键入的一样.