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

时间:2014-04-26 13:49:05

标签: 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”附加到一行的末尾,而不是我预期的行的开头。请帮忙!

1 个答案:

答案 0 :(得分:5)

尝试以下方法:

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

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

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

  

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