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

mic*_*lpm 12 keyboard-shortcuts zsh

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

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

Kev*_*vin 12

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

  • ...并且“Alt + y”将循环,尽管您之前猛拉过所有 (2认同)

小智 12

看一下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.
Run Code Online (Sandbox Code Playgroud)

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


Gil*_*il' 5

您正在寻找push-line命令,该命令绑定到Ctrl+Q并且Esc 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
Run Code Online (Sandbox Code Playgroud)

一种适用于任何 shell 的低技术方法是在#当前行的开头添加 a并按Enter