VIM 中的 ANSI 颜色代码

Posted

技术标签:

【中文标题】VIM 中的 ANSI 颜色代码【英文标题】:ANSI Color Codes in VIM 【发布时间】:2012-05-22 11:47:34 【问题描述】:

我有一个脚本可以生成一个带有 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 理解这些颜色代码?

感谢您的帮助。

【问题讨论】:

可能跨站重复:superuser.com/questions/358409/… 在vi.stackexchange.com/a/20496/3324 上查看答案:“如果你有一个足够现代的 vim,它具有 +terminal 功能,你可以使用:term cat somefile,你会得到一个包含所有终端代码解释。这在大文件上可能比例如在大文件上效果更好。着色器,当我在 6000 行文件上放开 vim 时,它让我的 vim 变得异常缓慢。” 【参考方案1】:

我不确定 vim,但如果您只是查看日志文件(即您不需要能够编辑),您可以使用 less:

less -R

【讨论】:

【参考方案2】:

使用 Charles Campbell 的 (Dr Chip) AnsiEsc 插件:

http://www.vim.org/scripts/script.php?script_id=302

之前:

:AnsiEsc<CR>

【讨论】:

我不得不将91m93m 分别更改为31m33m,但除此之外效果很好。谢谢。 在哪里换? (vba 文件很复杂......)我仍然得到一些转义序列而不是颜色...... 没关系。颜色已应用,但我认为我需要使用“隐藏”功能重新编译 vim 以隐藏转义序列。 无法让它与 vim 7.4 一起使用 -- 是否有其他解决方案? Alex Efros 的 Charles Campbell (Dr Chip) AnsiEsc 有一个更新的分支:Improved AnsiEsc (github)。【参考方案3】:

由于接受的答案中的链接似乎不起作用,我找到了这个链接:https://github.com/vim-scripts/AnsiEsc.vim

【讨论】:

新的分叉版本:github.com/powerman/vim-plugin-AnsiEsc【参考方案4】:

AnsiEsc 适用于基本的 ANSI 颜色代码,但不适用于其他代码。 问题是 有 很多 个 ANSI_escape_code s 超越基本\033[31m red \033[0mAnsiEsc 是什么,与 \033[... unrecognized 有什么关系? 似乎AnsiEsc 只是不理会这些,但在 Vim 和 mvim 中有所不同。

欢迎在AnsiEsc 上提供更好的文档; 欢迎链接到 python 中的小型 ANSI 转义代码解析器。

来自 gnu ls 和 grep 的彩色输出的测试用例,带有TERM xterm-256color 和 macOS 终端 2.3 版:

#!/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。

【讨论】:

这个!我阅读了您的评论,并一直看到我的“基本”代码没有被脚本翻译。我遇到的问题是我认为 3x 和 9x 代码是基本的(常规和明亮)。 AnsiEsc 只处理 3x 代码。

以上是关于VIM 中的 ANSI 颜色代码的主要内容,如果未能解决你的问题,请参考以下文章

在最新的VScode中运行Minitest - 显示Ansi颜色代码

如何阻止 ANSI 颜色代码弄乱 printf 对齐?

将 ANSI 转义(终端格式/颜色代码)转换为 HTML 的库 [关闭]

markdown 整个ANSI颜色代码表。

如何在Vim插件输出中为单词着色

如何让vim 有颜色