如何在 zsh 上保存当前命令?

如何在 zsh 上保存当前命令?

我正在输入一个命令,我记得我必须检查一些内容,如果我按Ctrl+,U命令就会消失,我可以输入其他内容,但是我输入的命令不在历史记录中。

有没有办法恢复该命令,或者我可以按其他快捷方式将命令保存在某处?

答案1

看一下push-lineZLE 命令。该命令将该行的当前内容推送到缓冲区堆栈并清除该行。然后,您可以输入另一个命令,当 ZLE 再次启动时,该行将从缓冲区堆栈弹出到行缓冲区中。

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

默认情况下,该命令在 emacs 模式下绑定到Alt/ 。Escq您可以使用该命令将此命令绑定到不同的键bindkey。例如,为了将其绑定到Alt/ Escv,请将其添加bindkey '^[V' push-line到您的zshrc.

答案2

Ctrl+Y将粘贴您剪切的最后一个项目(使用Ctrl+ UCtrl+ KCtrl+W等)。

答案3

您正在寻找push-line命令,默认绑定到Ctrl+QEsc Q。该命令清除输入并让您输入另一个命令;一旦执行或取消此命令,就会返回上一个命令进行编辑。

使用多行命令,push-line仅清除当前行,并将其他行保留在输入缓冲区中。还有另一个命令push-input它会清除整个输入缓冲区,默认情况下不绑定到任何键。

我使用这个命令的包装器。我输入Ctrl+Z以“暂停”我正在输入的命令并输入另一个命令。在我运行该命令(或使用Ctrl+中止它C)后,挂起的命令将返回进行编辑(甚至记住光标位置)。作为一个额外的便利,如果当我键入Ctrl+时命令行为空Z,则该键会调用bg内置命令(因此双Ctrl+Z会将正在运行的命令直接发送到后台)。

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

#在任何 shell 中都有效的低技术方法是在当前行的开头添加 a并按Enter

相关内容