macOSでは、manはポケットベル「/usr/bin/less -is」を使用します(manのマニュアルページを参照)。 manを入力すると、カラー出力が表示されます。しかし、私はmanを使用するときに端末のfindコマンドを使用することを好み、Lessのページング動作が邪魔になると思います。
ポケットベルを猫に設定すると、色が失われます。
ページングを無効にして着色を続けるには?
ベストアンサー1
たとえば、manの出力を別のプログラムにパイプすると、出力がフォーマットされていないように見えますが、たとえば、cat(1)
hexdumpプログラムを使用して出力を表示すると、フォーマットが保持されることがわかります。cat
xxd(1)
man man | xxd
0x08
書式は、太字の書式と下線に使用されるバックスペース文字を使用して表示されます。文字にアンダースコアを付けるには、まずアンダースコア文字を印刷してからバックスペース文字を印刷し、カーソルを1位置後ろに移動してからアンダースコアを付けたい文字を書き込みます。太字を作成するには、最初に文字を書き、次にカーソルを1つの位置に戻し、次に文字を書き換えます。ハードコピー端末の結果は期待される効果がありますが、端末エミュレータでは、2番目の文字が最初の文字を上書きしてフォーマットされていないようです。このプログラムを使用すると、この形式を端末が使用する形式に変換できますul(1)
。
man man | ul
ESC
このパイプ出力のバイトエンコーディングを確認すると、terminfo / termcap端末の説明がコードを使用するか、使用することを決定した他のコードを使用しているかを確認できます。ul
man man | ul | xxd
両方とも制御コードをユーザーに明確な形式にmore
変換するので、ユーザーは検査中のファイルに制御コードが含まれているかどうかを知ることができます。出力をページングして端末にコードを解釈させるには、生の文字コードを出力するようにページャを設定する必要があります。これを達成するには、またはオプションを使用できます。less
ESC
ul
ESC
-r
-R
less
more
man man | ul | less -r
less
これらのオプションは、呼び出し元に渡されるデフォルトオプションには含まれませんless -is
。
ESC
ページなしでコードを表示したい場合に使用できる-v
オプションですcat
。
man man | ul | cat -v
上で下線付きのテキストと太字の書式を復元する方法について説明しましたが、色を出力するように設定しても色は出力されませんless
。 (less
出力色は環境変数を使用して設定できますLESS_TERMCAP_*
。この機能は、MacOS Big Sur 11.7.3のマニュアルページには表示されていませんが、引き続き使用でき、更新されたless
ドキュメントless
に記載されています。https://github.com/gwsw/less/blob/919fcc8222ebbe8a25f3f81a735222b8fdc78433/less.nro.VER#L2252。おそらく、Big Surで配布されたマニュアルページは、less
実際のプログラムに比べて古いようです。バラよりhttps://www.2daygeek.com/get-display-view-colored-colorized-man-pages-linux/環境変数の使用例のいくつかLESS_TERMCAP_*
。 )しかし、使用する端末記述を指定するオプションがul
あるので-t
、希望の方法で太字と下線を表示する修正された端末記述を直接作成できます。以下は、terminfoの説明に基づくサンプルterminfoの説明ですxterm-256color
。
xterm-256color-manpipecolors|xterm-256color with preset colors for retaining color in piped manpages,
blink=\E[1;31m,
bold=\E[1;36m,
sgr0=\E[0m,
smso=\E[01;44;33m,
rmso=\E[0m,
smul=\E[1;32m,
rmul=\E[0m,
use=xterm-256color,
ファイル名が指定されていると仮定すると、xterm-256color-manpipecolors
次のコマンドを使用してコンパイルできます。~/.terminfo
tic xterm-256color-manpipecolors
terminfo 記述は、次のようにページされていない出力に使用できます。
man man | ul -t xterm-256color-manpipecolors
ただし、このパイプの出力をページングするには、生の文字を出力するようにページャーを設定する必要があります。
man man | ul -t xterm-256color-manpipecolors | less -r
環境変数を使用してこれをクリーンアップしMANPAGER
、結果がパイプで接続されている場合でも機能することを確認できるため、cat
ページングを回避できます。
MANPAGER='ul -t xterm-256color-manpipecolors | less -isr' man man
MANPAGER='ul -t xterm-256color-manpipecolors | less -isr' man man | cat
入れたら
export MANPAGER='ul -t xterm-256color-manpipecolors | less -isr'
~/.bashrc
シェルの先頭から呼び出されるので、man
ページが付けられた動作とページが付けられていない動作を非常にきれいな方法で取得できます。
man man # with color and paging
man man | cat # with color and without paging
less
私はこれがttyであることを確認しstdout
、ttyでない場合はttyコードを印刷したり、出力をページしないようにハードコーディングされているので動作すると思います。