diff caractere

9

Existe uma ferramenta estável (opção / plugin de uma ferramenta existente: vimdiff, diff, etc) no Linux para fazer a diferença entre dois arquivos de texto em caracteres?

Gostaria de ver a subsequência comum mais longa entre meus dois arquivos destacada. Existe um algoritmo clássico de tempo polinomial para isso, mas as ferramentas padrão parecem funcionar apenas linha por linha.

Valentas
fonte

Respostas:

2

O bom e velho cmpfaz um diff de caráter. Faz parte do UNIX há cerca de 40 anos. https://www.freebsd.org/cgi/man.cgi?query=cmp&apropos=0&sektion=0&manpath=Unix+Seventh+Edition&arch=default&format=html

Infelizmente, ele pára no primeiro caractere diferente, então não sei se essa resposta é útil para você.

Dominik R
fonte
Obrigado. Eu apenas corri cmp -bl ...depois de encontrar esta resposta e ela relatou várias diferenças e suas posições. Minha versão é cmp (GNU diffutils) 3.6.
Dzamo Norton
2

Instale diffchar( link do Github para aqueles que usam um carregador automático de plugins). Desde a v4.7, com o plug-in ativado, o Vim mostra automaticamente as diferenças mais exatas:

insira a descrição da imagem aqui

  • Você pode pressionar F7(o mapa de teclas padrão) para alternar entre o habitual e o plug-in. Reatribuir com:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    substituindo <key>por um código de chave apropriado.

  • Você pode usar mais cores:

    let g:DiffColors=100
    

Infelizmente, isso não funciona entre linhas, o melhor que posso dizer. No entanto, as regiões comuns são deixadas sem destaque (e dobradas, se crescerem demais), portanto, você poderá tirar vantagem disso.


Copiado da minha postagem do Vi e Vim Stack Exchange .

muru
fonte