我需要模拟选择(突出显示)终端缓冲区中的文本。它已经过去很久了,所以所有 grep/awk/sed/重定向的东西都不相关。另外,我不希望在标准输出格式化期间突出显示它。我需要它以未突出显示的方式进入标准输出,然后突出显示它。模拟选择。
这是场景...
Bash 脚本调用“ls -1”并将以下内容输出到 stdout,然后输出到终端缓冲区?
$ ls -1
a.txt
b.txt
c.txt
现在我需要一个可以放入 Bash 脚本中的命令来查找并突出显示“b.txt”。
喜欢:
$ termsearch b.txt
a.txt
[b.txt]
c.txt
其中“termsearch”是一个我认为我需要的组成命令,它将 b.txt 转换为白色背景的黑色文本(突出显示),其余文本为黑色背景白色。我认为问题在于您无法像这样真正编辑缓冲区并更改文本样式。
我可以交互地使用屏幕来查找“b.txt”,但它没有突出显示(主要目标),而且我不知道是否可以编写屏幕命令脚本。所以我已经放弃了银幕。脚本命令只是将标准输出转储到文件,但我不想搜索文件。我需要搜索终端缓冲区并在屏幕上突出显示结果,而无需更多标准输出。我想要的已经出来了,只是需要突出显示。
我认为 ncurses 是可行的方法,但我从未用它编写过代码,而且它看起来很复杂。因此,在我深入研究之前,我想问是否有人可以想出另一种方法来做到这一点,并验证 ncurses 甚至可以做我想做的事情。
答案1
简短:不,你不能
更长:你不能这样做的原因是终端通常不允许程序复制文本从他们的屏幕。可以通过迂回路径让 GUI 应用程序从终端屏幕选择文本,然后您知道文本是什么是, 和在哪里是的,原则上您可以在终端中发出命令,告诉它使用任何颜色重新绘制屏幕的该部分。但这只是假设(除非有人最近编写了一个程序来做到这一点)。
顺便说一句,一旦文本滚动离开可见屏幕,终端也不会对其进行修改。
答案2
我会用vim
.
对于你的具体情况,我会做
vim .
然后vim
将向我显示一个窗口,其中包含目录中的所有文件。我可以使用 进行搜索/
,然后按 来打开文件Enter
。
只需确保搜索突出显示已启用
:set hlsearch
对于不同的命令,也许这就足够了:
echo "one\ntwo\nthree" | vim -