設定されたオプションの色が緑色で、設定されていないオプションの色が赤色のすべてのzshオプションのソートされたリストを印刷しようとしています。ただし、sort
カラーラインでは機能しません。次はすべての赤いオプションを印刷し、すべての緑色のオプションを印刷します。
print -lP "%F{green}"${^$(setopt)} "%F{red}"${^$(unsetopt)} | sort
各オプション行が赤と緑print -P
で始まるようにフォーマット文字列が拡張されたためです。見ている^[[31m
^[[32m
sort
マンページ、助けることができる2つのオプションがあります。
-i, --ignore-nonprinting 印刷可能文字のみを考慮する
-k, --key=POS1[,POS2] POS1 (開始点 1) でキーを開始し、POS2 (基本行末) で終了します。
だから私は次のことを試みます:
print -lP "%F{green}"${^$(setopt)} "%F{red}"${^$(unsetopt)} | sort -i
そして
print -lP "%F{green}"${^$(setopt)} "%F{red}"${^$(unsetopt)} | sort --key=<N>
<N>
さまざまな数字を設定してみました。すべての場合で同じ結果が得られます(すべての赤いオプションが緑の前に来ます)。この問題をどのように解決できますか?
ベストアンサー1
-k
ソートオプションは、フィールドと文字という2つの数値引数を使用します。最初のフィールドの6番目の文字に基づいてソートしようとしています。%F{green}
交換されてから6番目の文字ですESC[32m
。だからこれはうまくいきます:
print -lP "%F{green}"${^$(setopt)} "%F{red}"${^$(unsetopt)} | sort -k 1.6