1

在 zsh 中,如果一个人不小心中断了一个命令 (^C),有没有一种快速的方法来恢复完全中断的命令行?

例如,

PROMPT $ this is a long command ^C
PROMPT $ [cursor here]

我想在光标位置恢复“这是一个长命令”。

4

2 回答 2

2

一种解决方案是

zle-line-init () {
  if [[ -n $ZLE_LINE_ABORTED ]]; then
    local savebuf="$BUFFER" savecur="$CURSOR"
    BUFFER="$ZLE_LINE_ABORTED" 
    CURSOR="$#BUFFER" 
    zle split-undo
    BUFFER="$savebuf" CURSOR="$savecur" 
  fi
}
zle -N zle-line-init

然后,在新的输入行中,撤消(C-/在 emacs 模式下)将给出中止的行。

参考:http ://www.zsh.org/mla/users/2015/msg00652.html

我在这里添加了更详细的解释:https ://www.topbug.ne​​t/blog/2016/10/03/restore-the-previously-canceled-command-in-zsh/

于 2016-09-22T06:55:41.213 回答
0

它将在 $ZLE_LINE_ABORTED 中。

您可以专门绑定一个小部件来恢复它。或者在 zle-line-init 中为它创建一个撤消事件(使用 zle split-undo),以便可以通过按撤消来恢复它。

于 2016-09-21T11:08:01.897 回答