在 Bash 或 ZSH 中,有没有与“clear”命令相反的命令?

在 Bash 或 ZSH 中,有没有与“clear”命令相反的命令?

在 shell 中输入内容clear会创建一堆新行,直到上面的输出历史记录几乎被隐藏。是否有命令或方法可以执行与清除相反的操作?这实际上会将您正在编辑的当前行移动到屏幕的中间或底部,并在其上方显示 shell 的最新历史记录?

这件事的背景是,我试图在 bash/zsh 的 vi 模式中映射一个键来显示以前的历史记录或以前的输出,但不会丢失我正在编辑的当前命令。

答案1

浏览输出历史记录不是 shell(Bash/ZSH)的工作;它们不保存其中命令产生的输出记录。输出历史记录由终端处理,目前终端通常是 GNOME 终端或 xterm。这两个终端都至少支持这些快捷方式,如@kos 提到

  • Shift-Page Up最多向上移动$LINES一位
  • Shift-Page Down最多$LINES向下移动一位

答案2

在 bash 中,您可以将一个键绑定到一条命令,例如,在输入新命令的过程中列出命令历史记录。命令运行后,您的输入行将恢复到您最初的输入点。

例如,发出命令

bind -x '"\C-a": history'

然后controla将转储历史记录。

为了永久保存,请将其添加到您的 ~/.inputc 文件

"\C-a": history

您可以history使用任何命令进行替换。


在 zsh 中,你有一个内置机制,它将当前输入缓冲区推送到堆栈上,并允许你发出新命令。完成后,将恢复上一个输入缓冲区。因此你输入:escapeq history return

如果你愿意,你可以设置一个 zsh 小部件绑定来显示历史记录以下您正在输入的当前输入缓冲区。例如,controla再次(在您的中~/.zshrc):

zle -N myhistory  
myhistory(){zle -M "$(history)";}
bindkey '^a' myhistory

要保留输出历史记录,您可能希望使用screen -L将所有输出的日志保存在一个文件中,然后可以使用上述绑定对其进行跟踪。您可能希望进行筛选cat -e或执行其他操作,因为该文件包含所有终端转义序列。

相关内容