Comparação mais detalhada dentro de uma linha

17

Eu uso vimdiffpara inspecionar as diferenças entre os arquivos e, algumas vezes, perde um pouco. por exemplo, se eu tiver os dois arquivos a seguir:

//a.c
printf("Hello\n");

e:

//b.c
int i = printf("hello\n") + 3;

mostrá-los em vimdiffdá:

insira a descrição da imagem aqui

O que vou querer ver é que, em bc, o valor hnão é capitalizado.

Existe uma maneira de dizer vimdiff para comparar (nessa linha) apenas parte dela (quero dizer, ignore o int i =e + 3)?

elyashiv
fonte
4
O plugin diffchar é provavelmente o que você precisa, mas não tenho experiência com ele. Talvez alguém com experiência em usá-lo possa dar uma resposta boa e detalhada (ou talvez uma alternativa).
tokoyami

Respostas:

15

Eu não acho que isso possa ser feito pelo próprio Vim. De :h view-diffs(ênfase minha):

hl-DiffText DiffText Texto alterado dentro de uma linha alterada.  Vim
                                encontra o primeiro caractere diferente,
                                e o último caractere diferente
                                (pesquisando a partir do final da linha).   o
                                o texto intermediário é destacado.  Isso significa
                                que partes no meio que ainda são as
                                mesmos são destacados de qualquer maneira.   Somente "iwhite" de
                                'diffopt' é usado aqui.

A sugestão de Tokoyami nos leva um passo mais perto. 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
    
muru
fonte
+1, mas "um passo mais perto" parece excessivamente conservador para mim. Diffchar resolve totalmente esse problema IMO.
Sparhawk
@Sparhawk bem, não ignorar os elementos comuns em uma linha (OP quer apenas as mudanças destacadas)
Muru
Não tenho certeza se entendi. Os elementos comuns não são ignorados neste exemplo (por exemplo, printfe ello)?
Sparhawk
1
@ Sparhawk neste exemplo, sim. Mas com mudanças mais complexas, rapidamente se torna confuso.
Muru
Ah, tudo bem, então é um pouco complicado então ... obrigado pela informação.
Sparhawk 9/07