例子
终端屏幕上显示的内容如下:
user@host ~ % ls
dir1
dir2
dir3
user@host ~ % whoami
user
user@host ~ % date
Wed May 24 16:25:26 -03 2023
user@host ~ % [CURSOR IS HERE]
我正在尝试实现一种方法来仅清除 las 命令的输出(在示例中date
)。它可以是一个脚本(我正在尝试使用 bash/zsh 和 perl)或一个快捷方式。
因此,继续这个例子,我们应该看到:
user@host ~ % ls
dir1
dir2
dir2
user@host ~ % whoami
user
user@host ~ % [CURSOR IS HERE]
如果我再次这样做,它应该删除whoami
:
user@host ~ % ls
dir1
dir2
dir2
user@host ~ % [CURSOR IS HERE]
在 Terminal.app (macOS) 上有一个快捷方式cmd+L
(清除至上一个标记)
我认为在某些情况下它很方便。经过彻底的搜索,我找不到在其他终端仿真器上实现它的方法。
我能得到的答案是这样的。我放弃了尝试,但可能走在正确的轨道上:
#!/usr/bin/perl
use strict;
use warnings;
print "\e[1F\e[0J";
# zsh function
function clear_until_previous_command() {
local previous_output_lines=$(( $(tput lines) - $(fc -l -1 | wc -l) ))
echo -ne "\033[${previous_output_lines}F\033[0J"
}
但两者都清除了整个屏幕。
我使用 Alacritty 但我认为可以为这项任务制定一个便携式解决方案?
有任何想法吗?