在 zsh 中恢复中断的命令
Recover an interrupted command in zsh
在zsh中,如果一个人不小心中断了一个命令(^C),有没有一种快速的方法来恢复完整中断的命令行?
例如,
PROMPT $ this is a long command ^C
PROMPT $ [cursor here]
我想在光标位置恢复"this is a long command"。
它将在 $ZLE_LINE_ABORTED.
中
您可以专门绑定一个小部件来恢复它。或者在zle-line-init(使用zle split-undo)中为它创建一个undo事件,这样它可以通过按undo来恢复。
一个解决方案是
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.net/blog/2016/10/03/restore-the-previously-canceled-command-in-zsh/
在zsh中,如果一个人不小心中断了一个命令(^C),有没有一种快速的方法来恢复完整中断的命令行?
例如,
PROMPT $ this is a long command ^C
PROMPT $ [cursor here]
我想在光标位置恢复"this is a long command"。
它将在 $ZLE_LINE_ABORTED.
中您可以专门绑定一个小部件来恢复它。或者在zle-line-init(使用zle split-undo)中为它创建一个undo事件,这样它可以通过按undo来恢复。
一个解决方案是
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.net/blog/2016/10/03/restore-the-previously-canceled-command-in-zsh/