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

DoT*_*Evo 3 zsh oh-my-zsh prezto zsh-zle

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

一个名为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
Run Code Online (Sandbox Code Playgroud)

任何解决方案?

joe*_*odo 5

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

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

你想要什么,现在我也可以在每次忘记sudo之后使用它!

EDITx2

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

另外值得注意的是,我再次意识到我真的没有完成这个问题,因为它是如何使用zsh和zli来完成的,而不是如何做到这一点.如果我遇到一个答案,我会附加两个解决方案.我是zli的新手,它的细微差别,最近才转向zsh.

  • 我注意到你有这个标记为Prezto,如果你确实使用它,看来这个功能已经存在于keyboard.zsh中,请参阅此提交https://github.com/sorin-ionescu/prezto/commit/9f8b41aaec63076d25b41b41c85c9244576c2cdb (2认同)