Quando tenho um diff, como posso colori-lo para que fique bem? Eu quero isso para a linha de comando, por isso não há soluções de GUI.
unix
command-line
colors
diff
daniel kullmann
fonte
fonte
Respostas:
As páginas de
diff
manual para sugerem nenhuma solução para a coloração de dentro de si. Por favor, considere usarcolordiff
. É um invólucrodiff
que produz a mesma saída que o diff, exceto que aumenta a saída usando o realce de sintaxe colorido para aumentar a legibilidade:ou apenas:
Instalação:
sudo apt-get install colordiff
brew install colordiff
ouport install colordiff
fonte
less -R
, que exibe as seqüências de escape das cores corretamente.-y
opção para habilitar) ☹ Avimdiff
sugestão abaixo provavelmente a melhor maneiracolordiff
funciona bem parasvn diff | colordiff
(ou seja, em situações em que você só tem o diff, não os dois arquivos sendo diffed).-y
suporte lado a lado ( ).Use o Vim :
Ou melhor ainda, o VimDiff (ou
vim -d
, que é mais curto para digitar) mostrará diferenças entre dois, três ou quatro arquivos lado a lado.Exemplos:
fonte
ctrl-c
ectrl-x
tem outros usos no Vim.ctrl-q
é capturado por muitos terminais. Consulte Escrevendo e saindo para encontrar a melhor maneira de atender às suas necessidades.zsh
? Não reconheço=(...)
construção. Segundo, eu tinhadiff -ur a b
em mente.=(...)
é substituído pelo nome de um arquivo que contém sua saída.Na verdade, parece haver mais uma opção (que eu notei apenas recentemente, ao encontrar o problema descrito acima):
Se você tem o Git por perto (que você já pode estar usando de qualquer maneira), poderá usá-lo para comparação, mesmo que os arquivos em si não estejam sob controle de versão. Se não estiver habilitado para você por padrão, ativar o suporte a cores aqui parece ser consideravelmente mais fácil do que algumas das soluções alternativas mencionadas anteriormente.
fonte
git diff <(xxd file1) <(xxd filed)
não funciona.git help diff
. Portanto, se o seu diff git estiver vazio, tentecd
onde você está.git config color.diff auto
git diff --no-index
para comparar dois arquivos.diff --color
A opção foi adicionada ao GNU diffutils 3.4 (08-08 2016)Essa é a
diff
implementação padrão na maioria das distribuições, que em breve será obtida.O Ubuntu 18.04 possui
diffutils
3.6 e, portanto, possui.No 3.5, fica assim:
Testado:
Aparentemente adicionado ao commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (março de 2015).
Diferença no nível da palavra
Like
diff-highlight
. Parece impossível, solicitação de recurso: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlTópicos relacionados:
ydiff
faz isso, porém, veja abaixo.ydiff
nível de palavra lado a lado diffhttps://github.com/ymattw/ydiff
É o Nirvana?
Resultado:
Se as linhas forem muito estreitas (padrão de 80 colunas), ajuste para a tela com:
Conteúdo dos arquivos de teste:
uma
b
ydiff
Integração Gitydiff
integra-se ao Git sem nenhuma configuração necessária.De dentro de um repositório git, em vez de
git diff
, você pode fazer apenas:e em vez de
git log
:Veja também: Como posso obter uma comparação lado a lado quando faço o "git diff"?
Testado no Ubuntu 16.04, git 2.18.0, ydiff 1.1.
fonte
There is no word-highlighting, yet
- alguma atualização? Foi para isso que eu vim a esta pergunta (eu quero umagrep --color
saída diff).git diff --color
também funciona. Útil ao trabalhar com ssh.diff --color=always | less -R
E naquelas ocasiões em que um
yum install colordiff
ou umapt-get install colordiff
não é uma opção devido a alguma restrição insana além do seu controle imediato, ou você está apenas louco , pode reinventar a roda com uma linha de sed:Jogue isso em um script de shell e envie a saída diff unificada através dele.
Torna os marcadores do pedaço em azul e destaca os nomes de arquivos novos / antigos e as linhas adicionadas / removidas em fundo verde e vermelho, respectivamente. 1 E tornará as mudanças no espaço à direita 2 mais prontamente aparentes do que o colordiff.
1 Aliás, o motivo para destacar os nomes de arquivos da mesma forma que as linhas modificadas é que para diferenciar corretamente entre os nomes de arquivos e as linhas modificadas, é necessário analisar corretamente o formato diff, o que não é algo a ser abordado em uma regex. Destacar-lhes o mesmo funciona "suficientemente bem" visualmente e torna o problema trivial. Dito isto, existem algumas sutilezas interessantes .
2 Mas não abas à direita. Aparentemente, as guias não têm o fundo definido, pelo menos no meu xterm. Ele faz as alterações de tabulação versus espaço se destacarem um pouco.
fonte
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(embora eu espere que exista uma maneira melhor).Você pode alterar a configuração do subversion para usar o colordiff
~ / .subversion / config.diff
via: https://gist.github.com/westonruter/846524
fonte
Colorido, palavra de nível
diff
ouputAqui está o que você pode fazer com o script abaixo e o diff-realce :
(Crédito à resposta de @ retracile para o
sed
destaque)fonte
vim
, use um plugin, por exemplo diffchar .Eu uso
grc
(Colouriser genérico), que permite colorir a saída de vários comandos, inclusivediff
.É um script python que pode ser envolvido em qualquer comando. Então, em vez de invocar
diff file1 file2
, você invocariagrc diff file1 file2
para ver a saída colorida. Tenho aliasdiff
paragrc diff
torná-lo mais fácil.fonte
fork()
chamadas, embora provavelmente funcione com a WSL.Aqui é uma outra solução que invoca
sed
para inserir as sequências de escape ANSI apropriados para cores para mostrar as+
,-
e@
as linhas em vermelho, verde, e ciano, respectivamente.Diferente das outras soluções para essa pergunta, essa solução não explica explicitamente as seqüências de escape ANSI. Em vez disso, ele chama os comandos
tput setaf
etput sgr0
para gerar as seqüências de escape ANSI para definir uma cor apropriada e redefinir os atributos do terminal, respectivamente.Para ver as cores disponíveis para cada argumento
tput setaf
, use este comando:Aqui está como a saída se parece:
Aqui está a evidência de que os comandos
tput setaf
etput sgr0
geram as seqüências de escape ANSI apropriadas:fonte
Como
wdiff
aceita args, especificando a sequência no início e no final de inserções e exclusões, você pode usar sequências de cores ANSI como as seguintes:Por exemplo, este é o resultado da comparação de dois arquivos CSV:
Exemplo de https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
fonte
colordiff
agora (1.0.16) entendewdiff
, por isso, você também pode simplesmente pipe:wdiff -n f1 f2 | colordiff
.wdiff
deve ser mesclado em diffutils ...Eu sugiro que você dê diff-assim-fantasia uma tentativa. Eu uso durante o meu trabalho e com certeza parece ótimo a partir de agora. Ele vem com muitas opções e é realmente fácil configurar seus diffs da maneira que você deseja.
Você pode instalá-lo:
ou no Mac:
Posteriormente, você pode destacar suas diferenças assim:
fonte
Com o comando bat :
fonte
Nas versões recentes do git no Ubuntu, você pode ativar o destaque diferencial com:
E adicionando isso ao seu
.gitconfig
:É possível que o script esteja localizado em outro lugar em outras distros, você pode usar
locate diff-highlight
para descobrir onde.fonte
Diferença de cor no nível do caractere: Instale o ccdiff
fonte