Mac OS X 终端如何清除除最后n行外的全部历史输出内容
问题
已知晓可通过以下任意一种方式清除 macOS 终端的整个缓冲区:
⌘+K快捷键- 执行命令:
printf '\33c\e[3J'
请问是否可以实现清除整个缓冲区、仅保留最后n行内容的需求?
解答
完全可以实现,有两种常用方案,按需选择即可:
方案1:固定保留行数(终端全局设置)
适合长期需要固定保留指定行数的场景:
- 打开终端「偏好设置」→ 选择你正在使用的描述文件 → 切换到「窗口」标签页
- 在「回滚」区域勾选「限制回滚内容至」,填写你需要保留的行数
- 后续执行清屏操作时,就会自动只保留你设定的行数内容
方案2:灵活指定保留行数(自定义shell命令)
适合需要临时调整保留行数的场景,把以下函数写入你当前shell的配置文件(zsh对应~/.zshrc,bash对应~/.bash_profile):
# 清除缓冲区仅保留最后n行,不传参数默认保留10行 clear_keep() { keep_lines=${1:-10} # 移动光标到倒数第keep_lines行的行首 tput cup $((LINES - keep_lines)) 0 # 清除光标上方所有内容 tput ed # 清除回滚缓冲区的冗余内容 printf '\e[3J' # 光标归位到当前输入行 tput cup $((LINES - 1)) 0 }
保存后执行source ~/.zshrc(或对应bash的配置文件)使配置生效。
使用示例:
- 执行
clear_keep 5,就会清除缓冲区仅保留最后5行内容 - 直接执行
clear_keep,默认保留最后10行内容
如果你使用的是iTerm2终端,还可以用快捷键⌘+⌥+B唤出历史内容选择框,手动框选需要删除的内容批量清除,灵活性更高。
内容的提问来源于stack exchange,提问作者dillon
相关产品推荐
相关产品推荐

