在zsh中恢复中断的命令

时间:2016-09-21 07:30:28

标签: zsh zsh-zle

在zsh中,如果有人意外中断命令(^ C),是否有一种快速恢复完全中断命令行的方法?

例如,

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

我想恢复"这是一个很长的命令"在光标位置。

2 个答案:

答案 0 :(得分: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

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

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

我在此处添加了更详细的说明:https://www.topbug.net/blog/2016/10/03/restore-the-previously-canceled-command-in-zsh/

答案 1 :(得分:0)

它将在$ ZLE_LINE_ABORTED。

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