web-dev-qa-db-ja.com

VIのテキストファイルからのANSIカラーコードの削除

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
2
mancocapac

from search-and-replace-control-characters vi CTRL-Vの後にCTRL- [を使用して代わりに使用できることがわかりました

\x1b

につながる:

: %s/^[\[[0-9;]*m//gc

これにより、^ [[35m、^ [[39m、^ [[37m ...などが正常に削除されます。

1
mancocapac

\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などのリテラル特殊文字。

0
filbranden