在终端中使用vim时,它基本上消除了终端的窗口,并为您提供了一个新窗口开始编码,但是当您退出vim时,终端的上一个输出仍在列表中。如何清除终端,以便它只输出程序的输出,但一旦过程结束后又恢复到正常状态? (在linux中,fedora)控制终端窗口的C++程序
回答
调用一个新的终端在低级别,您向终端程序发送一组控制字符,告诉它该做什么。这可能有点复杂,无法手动管理。
因此,您可能需要查看一个控制台库,如ncurses,它可以为您管理所有这些复杂性。
对于在程序退出后神奇地出现的以前的内容,这实际上是vim正在利用的xterm特性,以及大多数现代终端支持的特性。它被称为“备用屏幕”或简称“altscreen”。基本上,你告诉终端程序“好的,现在切换到一个全新的屏幕,我们稍后再回到另一个屏幕”。
的命令切换到备用屏幕是典型\E[?47h
,而切换回所述命令是\E[?47l
为了好玩尝试:
echo -e "\033[?47h"
,然后切换回:
echo -e "\033[?47l"
或者一个更加完整的解决方案,它依赖于你的外壳少一些东西(这些是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"
由于各种原因,您可能想要使用1047,而不仅仅是47.实际上,最好还是使用1049,因为它可以保存/恢复光标位置以及屏幕状态。 – LeoNerd
@LeoNerd大概你会使用termcap来为你正在使用的终端找到最合适的序列,尽管我真的不知道你会去哪找到它。如果你知道有关于这个问题的任何其他信息,我很乐意将它包含在这个答案中。 – tylerl
你认为是错误的。 termcap/terminfo并没有真正赶上现代终端的许多能力。他们对鼠标,标题,超出8的颜色都没有任何了解,......我个人的工作模式是“所有的都像xterm”,坦率地说,你可能遇到的所有终端通常都会接受类似xterm的控制序列。 – LeoNerd
你可以输入“clear”,或者在程序中添加一个系统命令来调用“clear”。另外,如果你不知道,你可以在vim中运行系统命令,所以你不必退出并输入clear。您可以编译和Vim内运行您的程序以及,例如 - >
:!clear
:!make
:!./programName
而且,我从来没有使用这种技术,但我相信你可以有VIM使用:set terminal
我想这是问如何在自己的程序中实现相同的效果,而不是如何从vim中清除屏幕。 –
- 1. Objective-c如何从终端应用程序制作GUI窗口
- 2. C#客户端程序控制台窗口
- 3. 使用整个终端窗口的终端应用程序
- 4. COM端口终端程序
- 5. 从python控制rs232 windows终端程序
- 6. 在C/C++窗口终止进程
- 7. 终止C#控制台应用程序
- 8. 控制从C#应用程序的其他窗口
- 9. 隐藏C程序的控制台窗口
- 10. 如何打开Visual C++控制台应用程序的新控制台窗口?
- 11. netbeans使用终端窗口
- 12. 简单的原始终端程序窗口
- 13. Mac/Cocoa:在我的应用程序中嵌入终端窗口
- 14. BB10 - Cascades应用程序 - 控制台/终端应用程序
- 15. 蚀控制台窗口奇怪输出行驶C程序
- 16. 在C#窗口应用程序中控制用户权限
- 17. c#控制台应用程序子窗口
- 18. 如何编写C++控制台窗口程序
- 19. 在C#控制台中隐藏控制台窗口应用程序
- 20. 从Java程序运行在一个新的终端窗口的应用程序
- 21. 控制终端使用鼠标C++
- 22. C++终止窗口过程形成
- 23. 用Bash /终端杀死应用程序窗口
- 24. 隐藏Windows窗体应用程序中的控制台窗口
- 25. qt C++关闭窗口后终止线程/程序
- 26. 控件在C#窗口程序中隐藏窗体的事件
- 27. 控制台窗口中的C++像素
- 28. C#中的控制台窗口?
- 29. C#控制台窗口的问题()
- 30. 如何使Visual Basic控制台应用程序中的输出跨越终端窗口的整个宽度?
http://rosettacode.org/wiki/Terminal_control/Preserve_screen#C或使用ncurses。 –