VI/Vimを使用して色分けを削除するにはどうすればよいですか?私はこれを見つけました: ストリームからのANSIカラーコードの削除
@ adam-katz @ olibreからの回答
cat colored.logs | sed 's/\x1b\[[0-9;]*m//g'
これをvimのコマンドラインに変換できると思いましたが、一致するものが見つからずに失敗します
>vim colored.logs
: s/\x1b\[[0-9;]*m//g
from search-and-replace-control-characters vi CTRL-Vの後にCTRL- [を使用して代わりに使用できることがわかりました
\x1b
につながる:
: %s/^[\[[0-9;]*m//gc
これにより、^ [[35m、^ [[39m、^ [[37m ...などが正常に削除されます。
\x1b
エスケープシーケンス(sed
で機能し、Cソースコードとbash
のようなシェルも)はESC( ESC キー。)
ascii(7) のマンページを参照してください:
Oct Dec Hex Char
------------------------------
033 27 1B ESC (escape)
sed
によって認識されるCスタイルの\xNN
シーケンスは、文字の16進表現を取ります。これは、ESCの場合は1B
であるため、\x1b
の由来です。
Vimは\xNN
Cスタイルのシーケンスを認識しませんが、実際には構文が少し異なる類似のシーケンスを認識します: \%xNN
したがって、そのESCシーケンスを変換する1つの方法\%x1b
へ。以下はVimで動作します:
:s/\%x1b\[[0-9;]*m//g
しかし、あなたはそれを単純化することができます。 ESCはやや頻繁に使用されるシンボルであるため、特別なショートカットエスケープシーケンスがあります: \e
。したがって、これも機能します。
:s/\e\[[0-9;]*m//g
最後に、お気づきのように、マッチにliteralESC文字を挿入することができます。
Vimでは、通常、リテラル文字の前に を付けることで、リテラル文字を挿入できます。Ctrl+V 組み合わせ。
だから使用する Ctrl+V、 ESC このシーケンスを入力する1つの方法です。 ^[
として表示されますが、通常は異なる色で表示され、単一の文字を表していることを示します。また、カーソルを移動すると、^
ではなく、[
の上でのみ停止し、単一の文字であることに一貫性があります。
お気づきかもしれませんが Ctrl+[ 後に Ctrl+V それも可能です Ctrl+[ はと同じ ESC。実際、どこを押しても ESC キー(挿入モードを終了するなど)を押すと、同等に押すことができます Ctrl+[ 代わりに、それはうまくいくでしょう。リテラルESCによって生成される文字^[
は、実際には次の表現です。 Ctrl+[ (^
記号はよく使用されます Ctrl、たとえば試してみてください Ctrl+V、 Ctrl+A 挿入モードで、リテラル^A
文字のCtrl-A
を表示します。)
一般に、バックスラッシュシーケンス(\e
またはわずかに劣る\%x1b
など)を使用する方が、テキストファイル(.vimrc
など)に保存するよりも簡単であるため、より適切です。リテラルESCなどのリテラル特殊文字。