2012-05-15 9 views
28

Ho uno script che genera un file di log con codici colore ANSI in loro in questo modo:codici ANSI di colore in VIM

[2012-05-14 18:00:02] ^[[0mINF: -- Starting update script --^[[0m 
[2012-05-14 18:00:29] ^[[91mERR: Improper date, entry being ignored.^[[0m 

C'è un modo per ottenere Vim per capire questi codici colore?

Grazie per qualsiasi aiuto.

+0

Possibile duplicazione cross-site di: http://superuser.com/questions/358409/how-can-i-tell-vim-to-show-ansi-escape-codes-properly –

risposta

30

Usa Charles Campbell (Dr Chip) AnsiEsc plugin:

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

Prima:

before

:AnsiEsc<CR>

after

+1

Ho dovuto cambiare '91m' e' 93m' in '31m' e' 33m', rispettivamente, ma funzionava perfettamente. Grazie. – Blake

+0

Cambiarli dove? (il file vba è piuttosto peloso ...) Sto ancora ottenendo delle sequenze di escape invece dei colori ... – fakeleft

+0

Nevermind. I colori sono applicati, ma penso che ho bisogno di ricompilare vim con la funzione 'occultamento' per nascondere le sequenze di escape. – fakeleft

33

io non sono sicuro di vim, ma se sei solo la visualizzazione di un file di log (cioè non c'è bisogno di essere in grado di modificare) si potrebbe usare meno:

less -R 
+0

Grazie per il suggerimento! – Blake

3

AnsiEsc opere con i codici di base di colori ANSI, ma non altri codici. Il problema è che ci sono lotti di ANSI_escape_code s oltre il numero di base \033[31m red \033[0m; cos'è AnsiEsc, che cosa è un qualsiasi programma da fare con \033[... unrecognized? Sembra che AnsiEsc lasci solo questo, ma in modo diverso in Vim e mvim.

Un documento migliore su AnsiEsc sarebbe il benvenuto; I collegamenti a un piccolo parser ANSI di codice di escape in python sarebbero i benvenuti.

Un banco di prova per l'uscita colorata da GNU ls e grep, con TERM xterm-256color e MacOSX Terminal versione 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 

Vedi anche la bella script bash colors256.