ターミナル バッファ内のテキストを検索して強調表示する Bash スクリプト コマンド

ターミナル バッファ内のテキストを検索して強調表示する Bash スクリプト コマンド

ターミナル バッファにあるテキストの選択 (強調表示) をシミュレートする必要があります。これは stdout をはるかに超えているため、grep/awk/sed/リダイレクトなどの操作は、私の知る限り関係ありません。また、stdout のフォーマット中に強調表示したくありません。強調表示されていない状態で stdout に出力し、その後強調表示する必要があります。選択をシミュレートしています。

シナリオはこうです...

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 を白い背景 (強調表示) の黒いテキストに変換し、残りのテキストは黒い背景に白になります。問題は、実際にはバッファを編集して、このようにテキスト スタイルを変更できないことだと思います。

screen を対話的に使用して「b.txt」を検索できますが、ハイライト表示されません (主な目的)。また、screen コマンドをスクリプト化できるかどうかもわかりません。そのため、screen は諦めました。スクリプト コマンドは stdout をファイルにダンプするだけですが、ファイルを検索するのは望ましくありません。端末バッファーを検索し、stdout を追加せずに画面上の結果を強調表示する必要があります。必要なのはすでに出力されており、強調表示する必要があるだけです。

ncurses を使うのがよいと思いますが、ncurses でコーディングしたことがなく、複雑そうです。そこで、実際に始める前に、これを実行する別の方法を思いついて、ncurses で私が望むことができるかどうかを確認できる人がいないか尋ねています。

答え1

短い:いいえ、できません

長くなりましたが、なぜそれができないかというと、端末は原則としてプログラムがテキストをコピーすることを許可していないからです。から端末の画面からテキストを選択するGUIアプリケーションを迂回的に作成することは可能ですが、そのテキストが何であるかがわかれば、、 そしてどこそうであれば、原理的には、端末でコマンドを発行して、画面のその部分を任意の色で再描画するように指示することができます。ただし、これは単なる仮説です (誰かが最近これを行うプログラムを書いていない限り)。

ちなみに、テキストが画面からスクロールされて表示されなくなると、端末はそれを変更できなくなります。

答え2

私は使うだろうvim

あなたの場合は、

vim .

すると、vimディレクトリ内のすべてのファイルを含むウィンドウが表示されます。 を使用して検索し/、 を押してファイルを開くことができますEnter

検索ハイライトが有効になっていることを確認してください

:set hlsearch

異なるコマンドの場合は、おそらくこれで十分でしょう:

echo "one\ntwo\nthree" | vim -

関連情報