ZSH 和 ZLE,移动到行首,写入字符串,移动到行尾

ZSH and ZLE, move to the beginning-of-line, write string, move to the end

它不是必需的,但它让我有点烦恼, 这是我的 .zshrc

中的片段

a function/widget 调用 add_sudo,它将在行首,在那里写入 sudo 然后应该在行尾。

它绑定到 ctrl+f

但它不会走到行尾,它会忽略最后一条命令并在写入 sudo 后停在那里。

add_sudo() {
  zle beginning-of-line;
  zle -U "sudo ";
  zle end-of-line;
}

zle -N add_sudo
bindkey "^f" add_sudo

有什么解决办法吗?

这个我可以回答!我刚加入,很高兴能提供帮助.....我读错了问题,但现在我来这里是为了在@4ae1e1 的帮助下赎回自己,这一切都归功于他提到使用 BUFFER= 和 CURSOR=

add_sudo (){
prefix="sudo"
BUFFER="$prefix $BUFFER"
CURSOR=$(($CURSOR + $#prefix + 1))
}
zle -N add_sudo
bindkey "^f" add_sudo

做你想做的事,现在我也可以在每次忘记 sudo 后使用它!

EDITx2

值得注意的是,这实际上将光标放回了之前的位置,这是我的首选用法。正如 4aelel 所述,您可以使用 CURSOR+=5 将其放在行尾。

同样值得注意的是,我意识到我确实没有完成这个问题,因为问题是如何使用 zsh 和 zli 来完成,而不是如何完成。如果我遇到一个答案,我会附加 solutions.I zli 的新手和它的细微差别,最近刚搬到 zsh。