看来clear
和 bash Ctrl-L是有很大不同的;clear
完全删除以前的所有终端信息(因此您无法向上滚动) while Ctrl-L只是滚动屏幕,使光标位于页面顶部,以便您仍然可以向上滚动并查看以前的信息。我更喜欢Ctrl-L系统。有没有办法覆盖clear
,以便它执行Ctrl-L而不是擦除所有以前的终端信息?这不是一个大问题,但我只是出于好奇而想知道是否有一种方法可以使用别名clear
来指向我喜欢的Ctrl功能L。
顺便说一句,我刚刚注意到 PowerShell 也有一个绑定Ctrl-L并且它的执行方式与Ctrl-L在 bash 上相同;看起来 PowerShell 设计者从 bash 中借鉴了很多,而cmd.exe
控制台没有这个功能。
答案1
有没有办法覆盖清除,以便它执行 Ctrl-L 而不是擦除所有以前的终端信息?
alias clear='tput -x clear'
是的,Ctrl-L
在 bash 中(在模式下set -o emacs
)做完全相同的事情。
或者,您可以只是硬连线转义,alias clear='printf "\033[H\033[2J"'
它应该在大多数终端仿真器中工作,并且不假设您已经ncurses
或bash
安装了。
注意:clear
busybox 中的小程序不会擦除回滚缓冲区,因此如果您使用某些基于 busybox 的系统(就像大多数嵌入式 Linux 系统一样),则无需执行任何特殊操作。
答案2
clear
是一个终端命令,摘录如下man clear
:
clear
如果可能的话, 描述 将清除您的屏幕,包括其回滚缓冲区(如果定义了扩展的“E3”功能)。clear
在环境中查找由环境变量 TERM 指定的终端类型,然后在 terminfo 数据库中确定如何清除屏幕。clear
写入标准输出。您可以将标准输出重定向到一个文件(这会阻止clear实际上清除屏幕),然后将cat
文件重定向到屏幕,并在此时清除它。
Ctrl+l是一个键绑定readline
的clear-screen
命令( man 3 readline
)。
清空屏幕,然后重新绘制当前行,将当前行保留在屏幕顶部。使用参数时,刷新当前行而不清除屏幕。
我找不到clear
给 readlineclear-screen
命令起别名的方法,而且可能根本不可能。