在使用该clear
命令时,屏幕会清除。完全。我再也无法访问以前出现在屏幕上的任何内容。
有没有办法“清除”屏幕(即让提示转到屏幕顶部)而不擦除屏幕上的所有内容?理想情况下,我想“清除”屏幕,但能够向上滚动以查看其他所有内容。
我正在使用 Windows 终端程序和 PowerShell shell,但我也想知道 Windows 命令行的答案。
我说我想保持向上滚动的能力——我的意思是我希望能够看到在我点击“清除”命令之前出现的所有内容,所以......是的,我想保持所有出现的内容之前,不是命令历史。
PSReadline(PowerShell 的标准输入处理程序)具有CtrlL在大多数 Unix shell 中找到的热键,它可以清除屏幕,就像您强制所有文本滚动出来一样(就像 ASCII“换页”字符一样)。
在 PS5 中,虽然它仍然会完全擦除显示的文本——但是已经进入回滚的所有内容都将保留在回滚中。
作为一种解决方法,您可以输出足够的空行以将所有内容推入回滚:
...然后将光标移到顶部:
这也可以使用
Set-PSReadlineKeyHandler -ScriptBlock
.Cmd 没有等价物——它以行模式读取输入,而仅使用 Conhost 提供的一些快捷方式。但是,您仍然可以创建一个批处理脚本(甚至是 Conhost DOSKEY 别名),它会输出相同的 VT 序列。
虽然清除屏幕是一个终端功能(通过 ANSI 终端控制代码),但发送这些代码的方式可能因外壳而异。总体思路是:
ESC[2J
清除屏幕,但留下回滚ESC[3J
清除屏幕,包括所有回滚... 其中
ESC
表示 ASCII 字符代码 27。根据
man clear
Linux 上的说法,该2J
代码最初(在 1999 年)是 XTerm 的扩展,2011 年被 Linux 内核用于控制台驱动程序。一段时间后,Windows 控制台主机选择了它,它可能从一开始就在 Windows 终端中。Windows 终端(适用于所有 shell)
Windows 终端包括可以绑定到任何热键的
clearBuffer
操作。但是,它会影响所有 shell,无论其中可能运行什么应用程序。出于这个原因,我建议不要使用它,除非您确定在类似vi
(或更糟)的情况下不会意外按下热键。也就是说,这绝对是在 CMD 中获得此功能的最简单方法。
如果您确实想使用它,该
clearBuffer
操作允许您指定以下clear
目标:screen
scrollback
all
使用该
screen
选项将清除屏幕的当前内容,但保持回滚不变。您需要
settings.json
直接编辑您的 Windows 终端,因为 UI 无法设置clear
目标:电源外壳
对于PowerShell,因为user1684 击败了我 Ctrl+L发送正确的转义序列。
另一方面, PowerShell 上的
Clear-Host
(aliasclear
) 发送一个ESC[3J
(也清除回滚)。如果你在输入
clear
PowerShell 时有肌肉记忆,你可以简单地改变它的定义:如果您希望它是永久性的,请将其放在您的 PowerShell 配置文件中。
命令
这是可能的,但在 CMD 中这样做也很棘手。
CMD 中最大的问题实际上是打印 ESC 字符(ASCII 27)。我在这里粘贴了实际的“字符”,它将通过复制/粘贴传输到 CMD,但是当我第一次对这篇文章进行另一个编辑时,它被删除了。该角色仍然存在于此答案的(源)编辑历史记录中,但让我们找到一种更好的方法来做到这一点。
在PowerShell中,使用它来创建CMD批处理文件:
在 CMD 中执行生成的
clear.cmd
批处理文件应该清除屏幕(但不是回滚)。如果您对此有任何疑问,任何可以打印 ASCII 27 的方法都可以
[2J
。例如,如果您安装了 PowerShell Core:并且只是为您的评论之一提供一些额外的细节:
所以是的,我们想出了一个解决方法,但如果我们没有,老实说我不会感到惊讶。请记住,Windows 控制台主机(默认情况下在其中运行 CMD)可以追溯到 Windows 95(现在已经 27 年),远在 XTerm 甚至添加这些代码之前。
虽然 Windows Terminal 更加现代,但我认为 CMD(需要生成代码)自 2006 年 PowerShell 发布之前没有看到任何实质性更新。
真的,我很幸运我们有一个解决方法;-)。
适用于 Linux 的 Windows 子系统
ESC[2J
(离开回滚)。clear
将像在 PowerShell 上一样,清除屏幕和回滚 (ESC[3J
)。clear -x
将离开回滚 (ESC[2J
)作为一种解决方法,在 CMD 中您可以按住Ctrl↓ (Down arrow)直到屏幕为空。它会很快向下滚动,因此可能滚动太多。在这种情况下,您可以按Ctrl→ (Right arrow)或开始输入,提示行会重新显示在视图中。任何移动光标的东西都可以。
不幸的是,这似乎在 Powershell 中不起作用。
对 CMD 和 PowerShell 使用 clear screen 命令。
进入 :
cls