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

如何在zsh小部件定义中移动光标位置,zsh,zsh-zle,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 但是\es只在一行的末尾追加“sudo”,而不是我所期望的行的开头。请帮忙 尝试以下操作: insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; } 这直接修改

我有一段话:

insert_sudo () { zle beginning-of-line; zle -U "sudo "; zle end-of-line; }
zle -N insert-sudo insert_sudo
bindkey "\es" insert-sudo
但是
\es
只在一行的末尾追加“sudo”,而不是我所期望的行的开头。请帮忙

尝试以下操作:

insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; }
这直接修改包含命令行内容的特殊
$BUFFER
变量,方法是在
sudo
前面加上前缀,然后将光标放在行的末尾

zle-U的问题在于它只在小部件完成后生效。从
zsh
手册:

在当前执行的小部件完成后,ZLE将表现为 字符串中的字符是由用户键入的


@阿德里安基斯贝:很好,谢谢-我已经更新了答案。