修改终端中已经存在的文本

时间:2019-03-25 19:34:28

标签: c linux terminal console-application curses

是否可以在终端中修改文本,但是与通过\r清除简单的进度条不同,可以通过完全修改文本来

例如

user@machine$ grep -R 'mystuff' .
result1
result2
result3
user@machine$ 

使用箭头例如移动“虚拟”光标(|)

user@machine$ grep -R 'mystuff' .
|result1
result2
result3
user@machine$ 

最重要的是,清除终端?

不,它不是Modifying text in the terminal的副本,因为它要求使用其他类型的文本操作,而其他问题的描述专门要求使用进度条示例。

2 个答案:

答案 0 :(得分:4)

您可以使用转义序列在linux终端上执行各种操作。您可以从以下参考资料中了解这一点:

使用转义序列直接控制终端非常棘手,因为您必须处理各种边框情况和副作用,具体取决于终端的实际内容和终端上显示的文本类型(ASCII,UTF-8)或其他外来变体...)

您的用例使您变得更加困难,因为您必须首先确定由不相关的命令(例如grep)产生的终端内容,而且还取决于终端的特定宽度和高度,shell提示等。

作为qemacs的合著者和维护者,我可以告诉您,使进程缓冲区正确运行,透明地处理shell和程序输出以及用户输入,已经经历了多少完整的噩梦同时在编辑器的缓冲区和窗口中自由编辑所有这些内容。如果您不太熟悉,可以查看源文件tty.cshell.c

因此,我敦促您从另一个角度重新考虑您的问题:

  • 您要达到什么目标?
  • 可以通过过滤命令输出来做到吗?
  • 您能否通过创建将对命令输出进行后处理的shell别名或shell脚本来做到这一点?
  • 您可以使用emacs,qemacs或其他具有Shell功能的IDE来实现所需的功能吗?

答案 1 :(得分:-1)

是的,您可以使用ANSI escape sequences在终端周围移动。

注意:如果启用了ANSI支持,在Windows上也可以使用。