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

6

我有这段代码:

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"添加到一行的末尾,而不是像我预期的那样添加到一行的开头。请帮忙!

1个回答

6
请尝试以下操作:
insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; }

这会直接修改特殊的$BUFFER变量,该变量包含命令行的内容,通过在开头添加sudo然后将光标放置在行末。

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

在当前小部件完成后,ZLE会像用户输入字符串一样处理。


@AdrieanKhisbe:好观点,谢谢 - 我已经更新了答案。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接