Wil*_*ont 13 windows bash windows-subsystem-for-linux
最近,我从 Mac 切换到了 Windows 10 PC,并且正在试验 Microsoft 的新 Linux 子系统(又名“Bash on Ubuntu on Windows”)。我每天使用它最大的烦恼是清理一大堵文字。也许其他人可以忍受屏幕上堆满文字,但这让我发疯。我只能处理一次留下大量文本转储的命令,这意味着我更喜欢简单地滚动到顶部以查看最后一个命令的所有输出的开始位置,然后当我完成它时我清除它并继续执行下一个命令。我不喜欢搜索多个命令输出转储来查找上次执行的命令的输出开始的位置。是的,我知道这并不难,我想我
在 Windows Bash/Ubuntu 应用程序上。最接近清除文本的是 Ctrl+L,但它只清除当前可见的文本屏幕,并不会清除整个回滚。单独使用“重置”命令是行不通的。我必须滚动到顶部,按 Ctrl+L,然后输入“重置”以删除所有文本。这已经够烦人了,但最重要的是,“重置”命令总是使窗口比我的偏好更窄,将其设置为 80 列宽。通过单击应用程序图标然后单击“属性”设置的我的首选项是 145 列宽度。我什至尝试进入“默认值”并将其设置为 145,但“重置”仍然是 80。它必须是在 Ubuntu 子系统中某处配置的东西。那个宽度对我来说太窄了。
此处最高投票的答案建议使用 GNOME 终端,因为它允许您映射“重置和清除”快捷方式,但提问者使用的是成熟的 Ubuntu,而不是 Windows Ubuntu 子系统,所以我有点怀疑。这对后者有用吗?我可能得看看这是否可行。第二个答案建议像这样制作“cls”别名:
alias cls="echo -ne '\033c'"
Run Code Online (Sandbox Code Playgroud)
但可惜这没有用。我尝试单独运行别名的内容,但也没有做任何事情,同样将“echo -ne”替换为“printf”。
我最后的希望是该页面上的第三个答案:“将缓冲区设置为 0 行”。我猜这是我必须更改的 Ubuntu 子系统中的一个配置,或者我必须将一个配置文件放在我的主目录中(我希望他们已经准确解释了他们的意思)。在任何情况下,进入 Windows 应用程序的“属性”并弄乱缓冲区设置都无济于事。
至于正在使用什么终端程序,回显 $TERM 给我“xterm”。哦,Ubuntu 版本是 14.04。(我听说下一个主要的 Windows 10 更新将使您能够升级到更新的 Ubuntu,但我不想跃跃欲试安装 Windows Insider“预览版”。)
我发现的最可靠和便携的命令1是:
printf '\033c\e[3J'
Run Code Online (Sandbox Code Playgroud)
显然,每次都输入它太长且太复杂。解决方案是定义一个 alias,以便可以使用更简单的名称来运行它。我的建议是选择cls,这是此命令在 Windows 上的 cmd shell 中的名称。
要设置cls为别名,请输入以下行:
alias cls="printf '\033c\e[3J'"
Run Code Online (Sandbox Code Playgroud)
这将在当前 shell 中启用别名。如果您希望每次打开新终端时都可以使用它,请将该行添加到您.bashrc的主目录中的文件中。
1.我之前建议使用clear && echo -en "\e[3J",如Stack Overflow 中所述,但对于某些用户它不起作用,所以我更新了我的答案。
我没有关于 Windows 默认 Ubuntu 终端的答案。根据 DavidPostill 的链接,开发团队似乎已经意识到了这个问题,所以我认为它将在未来的版本中修复。与此同时,我只是转而使用 MinTTY 进行 WSL ( https://github.com/mintty/wsltty )。“重置”命令在该终端中完美运行,它完全清除所有文本输出,同时保留窗口尺寸。