前言
在使用Linux终端时,难免会遇到有时候会输出大量的内容,特别是在编译软件的时候,特别特别是在使用GCC的时候。GCC居然没法输出带有颜色的编译信息,满屏的警告、注意、错误交织在一起,简直让人蛋碎,花费了大量时间去找真正的错误所在行。。。
一直在 Ubuntu 终端上使用 clear 命令 “清屏”,但我发现我被愚弄了。因为 clear 命令但不是真正的清屏,它只是把终端的提示符所在的行滚动到了屏幕的最上面,所以,看似屏幕是被清空了,实但没有,滚动条往上面一滚,内容就又全部摆在眼前了,有个蛋用啊!但我居然还用了几个月的此命令!今天写下这篇文章,极有可能是因为我受不了了。
解决方案
Google了一番发现,不同版本 Linux 的 Distribution 的操作方式并不通用。而我使用的是 Ubuntu,所以其它的我就不能测试了,但依然可以列出来让大家试试。
这些方法都来自于 StackOverflow 上的一个问答。
用 printf 终端重置控制字符 清屏
这种方法的原理是很好理解的:Linux的终端的底层支持控制字符(别以为很神奇,你应该知道 '\n' 能控制换行吧?知道就好,类似了。)。
printf '\033c'
八进制的转义字符 \033 就是十六进制的 \x1b,就是十进制的27,也就是ASCII码为27的字符:ESC!
ESC字符属于控制字符所在范围(0 ~ 31),而控制序列 <ESC>c 的作用就是重围终端,这下明白了吧?更多的控制序列参考文后的外部链接。
其它版本:
printf "\ec" #\e 在bash中代表 ESC
echo -en "\ec"
# -e 使能终端转义字符
# -n 不要在最后自动加上换行符
用 reset 命令
这个命令蛮简洁,效果也蛮好。
reset
用 tput 命令
这个命令不太了解(还有那个 tset,靠,命令不少,相似的命令也不少),但有效果:
tput reset
KDE 终端
很意外,上面的操作貌似都不能在KDE终端(Konsole)上工作,但可以使用下面的命令来代替:
clear && echo -en "\3[3J"
PuTTY
貌似上面的方法都没法在 PuTTY 上面工作。但可以在设置中设置快捷键(暂时没用Putty,以后再补上;这不是坑!)。
笨人笨方法
看到这个方法,也许大家都笑了,但这个方法确实有“一定”的效果!
#include <iostream>
#include <cstring>
int main()
{
char str[1000];
memset(str, '\n', 999);
str[999] = 0;
std::cout << str << std::endl;
return 0;
}
但看得出来,楼主对 linux 的 seq命令 不熟,下面是 seq 的实现:
seq 999 | tr -d '[0-9]'
设置命令别名
如果 reset 命令不能工作,而又要输入长长的 printf,不妨为命令设置一个简短的别名吧:
- $ vim ~/.bashrc
- 加入一行:alias cls='printf "\033c"'
- 保存并退出
- 立即生效:source ~/.bashrc