使用 VI/Vim 如何删除颜色编码?我发现了这个:Removing ANSI Color Codes from a Stream
来自 @adam-katz @olibre 的回答
cat colored.logs | sed 's/\x1b\[[0-9;]*m//g'
Run Code Online (Sandbox Code Playgroud)
我以为我可以将其翻译为 vim 中的命令行,但它失败了,没有找到匹配项
>vim colored.logs
: s/\x1b\[[0-9;]*m//g
Run Code Online (Sandbox Code Playgroud)
转义\x1b序列(适用于sed,也适用于 C 源代码和 shell,如bash)对应于 ESC(如ESC键。)
请参阅ascii(7)的联机帮助页:
Oct Dec Hex Char
------------------------------
033 27 1B ESC (escape)
Run Code Online (Sandbox Code Playgroud)
\xNN识别的C 风格序列sed采用字符的十六进制表示形式,在 ESC 的情况下是1B,所以这就是它的\x1b来源。
Vim 无法识别\xNNC 风格的序列,但它实际上可以识别语法略有不同的类似序列:\%xNN,因此您可以将 ESC 序列转换为\%x1b. Vim 上的工作原理如下:
:s/\%x1b\[[0-9;]*m//g
Run Code Online (Sandbox Code Playgroud)
但你可以简化它。由于 ESC 是一个经常使用的符号,因此有一个特殊的快捷转义序列:\e。所以这也行得通:
:s/\e\[[0-9;]*m//g
Run Code Online (Sandbox Code Playgroud)
最后,正如您所注意到的,可以在匹配中插入文字ESC 字符。
在 Vim 中,通常可以通过在其前面加上Ctrl+V组合来插入文字字符。
因此,使用Ctrl+ V,ESC是输入此序列的一种方法。它将显示为^[,但通常以不同的颜色显示,以指示它代表单个字符。另外,当移动光标时,它只会停在 的顶部^而不是 , 上[,以与单个字符保持一致。
您可能已经注意到,在 + 之后使用+也是可能Ctrl的,这是因为+与相同。事实上,无论您在何处按下该键(例如退出插入模式),您都可以等效地按+来代替,这样就可以了。如此之多,由文字 ESC 生成的字符 ,实际上是+的表示(该符号通常用于,例如在插入模式下尝试+ , +来查看文字字符的 a 。)[CtrlVCtrl[ESCESCCtrl[^[Ctrl[^CtrlCtrlVCtrlA^ACtrl-A
一般来说,使用反斜杠序列(例如\e或 稍差\%x1b)应该更好,因为将它们存储在文本文件(例如您的.vimrc)中比字面特殊字符(例如字面 ESC)更容易。
从search-and-replace-control-characters vi 我发现我可以使用 CTRL-V 后跟 CTRL-[ 来替换
\x1b
Run Code Online (Sandbox Code Playgroud)
这导致 :
: %s/^[\[[0-9;]*m//gc
Run Code Online (Sandbox Code Playgroud)
这成功地剥离了 ^[[35m, ^[[39m, ^[[37m ... 等等。
| 归档时间: |
|
| 查看次数: |
9165 次 |
| 最近记录: |