4

我有这个片段:

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”附加到行尾,而不是我预期的行首。请帮忙!

4

1 回答 1

5

尝试以下操作:

insert_sudo() { BUFFER="sudo $BUFFER"; zle end-of-line; }

这直接修改了$BUFFER包含命令行内容的特殊变量,方法是预先添加sudo 然后将光标放在行尾。

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

当前执行的小部件完成后,ZLE 将表现得好像字符串中的字符是由用户键入的一样。

于 2014-04-26T14:30:44.190 回答