我有一个脚本,它生成带有 ANSI 颜色代码的日志文件,如下所示:
[2012-05-14 18:00:02] ^[[0mINF: -- Starting update script --^[[0m
[2012-05-14 18:00:29] ^[[91mERR: Improper date, entry being ignored.^[[0m
有没有办法让Vim理解这些颜色代码?
感谢任何帮助。
我有一个脚本,它生成带有 ANSI 颜色代码的日志文件,如下所示:
[2012-05-14 18:00:02] ^[[0mINF: -- Starting update script --^[[0m
[2012-05-14 18:00:29] ^[[91mERR: Improper date, entry being ignored.^[[0m
有没有办法让Vim理解这些颜色代码?
感谢任何帮助。
我不确定vim是否适用,但如果你只是查看日志文件(即无需编辑),你可以使用less:
less -R
使用查尔斯·坎贝尔(Dr Chip)的 AnsiEsc 插件:
http://www.vim.org/scripts/script.php?script_id=302
在运行该插件之前:
:AnsiEsc<CR>
91m
和93m
分别更改为31m
和33m
,但除此之外它运行得非常好。谢谢。 - Blake由于被接受的答案中的链接似乎无法使用,我找到了这个链接:https://github.com/vim-scripts/AnsiEsc.vim
AnsiEsc
适用于基本 ANSI 颜色代码,但不适用于其他代码。
问题在于除了基本的 \033[31m 红色 \033[0m
之外,
还有很多ANSI_escape_code。
对于 \033[... 未识别
的代码,AnsiEsc
似乎只是将其留下,但在 Vim 和 mvim 中表现不同。
更好的关于 AnsiEsc
的文档将是受欢迎的;
同时,链接到一个小的 Python ANSI 转义代码解析器也将是受欢迎的。
使用 TERM xterm-256color
和 macOSX 终端版本2.3 进行 gnu ls 和 grep 的彩色输出测试案例:
#!/bin/bash
# test https://en.wikipedia.org/wiki/ANSI_escape_code#Colors from gnu ls and grep
mkdir bluedir 2> /dev/null
ls -d --color=always bluedir > ls.out
echo red-hot | grep --color=always red > grep.out
od -c ls.out
# 0000000 033 [ 0 m 033 [ 3 4 m b l u e d i r
# 0000020 033 [ 0 m \n
# Vim 7.3 :AnsiEsc "bluedir" blue, \033[0m as is
# mvim 8.0 :AnsiEsc "bluedir" works
od -c grep.out
# 0000000 033 [ 0 1 ; 3 1 m 033 [ K r e d 033 [
# 0000020 m 033 [ K - h o t \n
# both Vim and mvim display as is
还可以参考可爱的bash脚本colors256。
:term cat somefile
命令,这样就会得到一个解释了所有终端代码的缓冲区。相较于Colorizer,对于大文件而言,这种方式可能更为高效。在我让它处理一个6000行的文件时,Colorizer使我的Vim变得极其缓慢。 - sideshowbarker