在 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
或执行其他操作,因为该文件包含所有终端转义序列。