Comparaison plus détaillée au sein d'une ligne

17

J'utilise vimdiffpour inspecter les différences entre les fichiers, et parfois il manque un peu. par exemple, si j'ai les deux fichiers suivants:

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

et:

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

les montrer en vimdiffdonne:

entrez la description de l'image ici

Ce que je veux voir, c'est qu'en Colombie-Britannique, le hn'est pas capitalisé.

Existe-t-il un moyen de dire à vimdiff de comparer (dans cette ligne) une partie seulement (je veux dire, ignorer le int i =et le + 3)?

elyashiv
la source
4
Le plugin diffchar est probablement ce dont vous avez besoin mais je n'ai aucune expérience avec lui. Peut-être qu'une personne expérimentée peut-elle donner une bonne réponse détaillée (ou peut-être une alternative).
tokoyami

Réponses:

15

Je ne pense pas que cela puisse être fait par Vim lui-même. De :h view-diffs(souligné par moi):

hl-DiffText DiffText Texte modifié à l'intérieur d'une ligne modifiée.  Vigueur
                                trouve le premier caractère différent,
                                et le dernier caractère différent
                                (recherche depuis la fin de la ligne).   le
                                le texte entre les deux est mis en surbrillance.  Ça signifie
                                que les parties au milieu qui sont encore
                                les mêmes sont de toute façon mis en évidence.   Seulement "iwhite" de
                                «diffopt» est utilisé ici.

La suggestion de Tokoyami nous rapproche un peu plus. Installer diffchar( lien Github pour ceux qui utilisent un plugin autoloader). Depuis la v4.7, avec le plugin activé, Vim affiche automatiquement des différences plus précises:

entrez la description de l'image ici

  • Vous pouvez appuyer sur F7(le clavier par défaut) pour basculer entre l'habituel et le plugin. Réaffectez avec:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    remplacement <key>par un code clé approprié.

  • Vous pouvez utiliser plus de couleurs:

    let g:DiffColors=100
    
muru
la source
+1 mais "un pas de plus" me semble trop conservateur. Diffchar résout totalement ce problème OMI.
Sparhawk
@Sparhawk bien, il n'ignore pas les éléments communs d'une ligne (OP veut juste que les changements soient mis en évidence)
muru
Je ne suis pas sûr de comprendre. Les éléments communs ne sont-ils pas ignorés dans cet exemple (par exemple printfet ello)?
Sparhawk
1
@Sparhawk dans cet exemple, oui. Mais avec des changements plus complexes, cela devient rapidement désordonné.
muru
Ah d'accord, c'est donc un peu bogué alors… merci pour l'information.
Sparhawk