在终端中使用 vim 时,它基本上会清空终端窗口并为您提供一个新的窗口以开始编码,但当您退出 vim 时,终端之前的输出仍会列出。如何清除终端以便它只输出程序的输出,但在进程结束后返回到正常状态? (在 linux、fedora 中)
最佳答案
在低级别,您向终端程序发送一组控制字符,告诉它要做什么。这对于手动管理来说可能有点过于复杂。
因此,您可能想查看类似 ncurses 的控制台库,它可以为您管理所有这些复杂性。
具体到程序退出后神奇地出现的先前内容,这实际上是 vim 正在利用的 xterm 功能,大多数现代终端都支持该功能。它被称为“备用屏幕”或简称为“altscreen”。本质上,您告诉终端程序“好的,现在切换到一个全新的屏幕,我们稍后再回到另一个屏幕”。
切换到备用屏幕的命令通常是 \E[?47h
,而切换回来的命令是 \E[?47l
为了好玩试试这个:
echo -e "\033[?47h"
然后切换回来:
echo -e "\033[?47l"
或者一个更完整的解决方案,它对你的 shell 的依赖性稍低(这些是 vim 通常使用的序列):
echo -e "\0337\033[?47h" # Save cursor position & switch to alternate screen
# do whatever
#Clear alternate screen, switch back to primary, restore cursor
echo -e "\033[2J\033[?47l\0338"
关于C++程序控制终端窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919803/