4

在终端中使用 vim 时,它实质上会清空终端窗口并为您提供一个新窗口以开始编码,但当您退出 vim 时,仍会列出终端的先前输出。如何清除终端,使其仅输出程序的输出,但在进程结束后返回正常状态?(在 linux、fedora 中)

4

2 回答 2

12

在底层,您向终端程序发送一组控制字符,告诉它要做什么。这可能有点太复杂而无法手动管理。

因此,您可能希望查看像ncurses这样的控制台库,它可以为您管理所有这些复杂性。

特别是关于程序退出后神奇地出现的先前内容,这实际上是 vim 正在利用并且大多数现代终端支持的 xterm 功能。它被称为“替代屏幕”或简称为“替代屏幕”。基本上你告诉终端程序“好的,现在切换到一个全新的屏幕,我们稍后会回到另一个屏幕”。

切换到备用屏幕的命令通常是\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" 
于 2012-10-16T17:13:26.063 回答
-2

您可以键入“clear”,或在程序中添加系统命令来调用“clear”。另外,如果您不知道,您可以从 vim 内部运行系统命令,这样您就不必退出并键入 clear。你也可以从 vim 内部编译和运行你的程序,例如 ->

:!clear
:!make
:!./programName

另外,我从不使用这种技术,但我相信您可以使用 vim 调用新终端:set terminal

于 2012-10-16T17:09:42.863 回答