Diff-ing vinduer i vim

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på et script, der er blevet ret forvirret. Jeg formoder, at der er flere sektioner, der har næsten identisk kode. Kan jeg (og hvordan kan jeg) åbne filen i vim, med to (eller flere) vinduer på bufferen, og diffind indholdet af windows på den samme fil? vimdiff synes kun at arbejde på to filer. Hvis jeg laver en kopi af filen og forsøger at vimdiffre de to versioner, forbliver diff-oprindelsen låst i begyndelsen af ​​filen. Selvom jeg kan afskalere-lås windows, og flytte vinduerne til de dele af filen, jeg vil sammenligne, så kommer diffs ikke op. Eventuelle tip eller tip? Jeg kunne klippe og indsætte de sektioner, jeg vil sammenligne med forskellige filer og derefter anvende vimdiff, men så risikerer jeg at gå tabt i hvilken sektion der kom fra, hvor jeg forsøger at patch de separate filer sammen, og jeg er sikker på, at der skal være en mere ligetil , lettere måde.

Bedste reference


Det jeg normalt gør er diff til en kopi


:\%w \%.alt
:vert diffsplit \%.alt


Og så reorganiserer happiliy 'alt' -versionen, så de pseudo-matchende bits bliver justeret.





Bemærk at (formodentlig) git indeholder spiffy fusion/diff ko-magt, der skal kunne registrere underfil flyttede blokændringer .


Selvom jeg ikke har det til at praktisere dette, har jeg en anelse om, at den meget flinke git plugin fugitive for vim måske vil kunne udnytte nogle af denne hestekræfter for at gøre det lettere. Bemærk: Forvent det fuldt ud at kræve scriptinh, før det kan bruges , men jeg synes stadig, det ville være rart at dele denne ide (måske kan du dele et script, hvis du først kommer til det!)

Andre referencer 1


Som en alternativ løsning, som jeg har brugt lejlighedsvis, og som virker meget pænt efter min mening er linediff.vim. [3]


Det giver dig mulighed for at bruge visuel tilstand til at vælge to tekstfel fra vilkårlig buffere (eller det samme for den sags skyld) og køre vimdiff på dem. Skønheden i det er, at når du redigerer og gemmer de midlertidige diff buffere, opdaterer du de oprindelige buffere med ændringerne uden at gemme.


Et af mine brugssager er, at jeg løser sammenfletningsproblemer i forbindelse med scriptrefactoring og omplacering, hvor en funktion er blevet flyttet og måske også ændret. For at sikre, at du ikke mister nogen af ​​de ændringer, der kommer fra enten forfader , du diffider kun de to versioner af funktionen ved visuelt at vælge dem og kører linediff-kommandoen.