2011-04-25 11 views
5

Pracuję nad scenariuszem, który stał się dość zawiły. Podejrzewam, że istnieje kilka sekcji, które mają prawie identyczny kod. Czy mogę (i jak mogę) otworzyć plik w vimie, używając dwóch (lub więcej) okien w buforze i zmienić zawartość okien w tym samym pliku? vimdiff wydaje się działać tylko na dwóch plikach. Jeśli zrobię kopię pliku i spróbuję vimdiff dwóch wersji, początek źródła pozostaje zamknięty na początku pliku. Chociaż mogę odłączyć-zablokować okna i przenieść okna do części pliku, które chcę porównać, nie pokazują się różnice. Wszelkie wskazówki lub porady? Mogłem wycinać i wklejać sekcje, które chcę porównać z różnymi plikami, a następnie zastosować vimdiff, ale wtedy ryzykuję zagubienie się w tym, co pochodzi z sekcji, kiedy próbuję załatać osobne pliki razem i jestem przekonany, że musi być prostsze łatwiejszy sposób.Rozproszone okna w vim

Odpowiedz

2

Co ja zwykle nie jest diff do kopii

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

A potem happiliy zmienić 'Alt' wersję tak, że bity pseudo-dopasowując się wyrównane.


Zauważ, że (prawdopodobnie) git zawiera wystrzałowych seryjnej/diff krowy uprawnień, które powinny być w stanie wykryć sub-file przeniósł blok zmienia.

Chociaż tego nie zrobiłem (jeszcze) w praktyce, mam przeczucie, że bardzo ładna wtyczka git fugitive dla vima może być w stanie wykorzystać niektóre z tych koni mechanicznych, aby ułatwić to. Uwaga: w pełni spodziewałem się tego wymagać scriptinh przed użytkować, ale wciąż myślał, że byłoby miło, aby udostępnić tę ideę

+0

Okej, użycie% w odniesieniu do nazwy pliku bieżącego bufora jest miłe, nie byłem tego świadomy! Ale nadal nie jestem pewien, jak zmienić aranżację na prawą, aby pasujące bity były wyrównane. : se noscrollbind wydaje się pomagać, ale jak mogę uzyskać vim, aby podkreślić różnice między tymi dwoma oknami? – ChrisDR

+0

Mam na myśli dosłownie przegrupowanie (używam C/C#, więc 'd2] M' usuwa dwie metody, nawiguje do punktu wstawienia,' P' i voila); Również "prawidłowa wersja alt" była literówką dla "alternatywnej wersji". Wiem, że to wciąż ręczna praca, ale (oprócz idei wykorzystującej wykrywanie kopii/ruchu Gita) nie znam lepszego sposobu. Sztuczka polegająca na użyciu tymczasowej kopii jest całkiem zgrabna. – sehe

1

Jako alternatywę (być może można udostępnić skrypt, jeśli się do niego pierwszy!) rozwiązanie, które używam od czasu do czasu i które działa bardzo ładnie moim zdaniem jest linediff.vim.

Pozwala na użycie trybu wizualnego w celu wybrania dwóch ciał tekstu z arbitralnych buforów (lub tego samego) i uruchomienia vimdiff na nich. Jego piękno polega na tym, że podczas edycji i zapisywania tymczasowych buforów diff aktualizujesz oryginalne bufory zmianami, bez zapisywania.

Jednym z moich przypadków użycia jest rozwiązywanie problemów scalania związanych z refaktoryzacją skryptów i zmianą kolejności, w których funkcja została przeniesiona i być może zmodyfikowana. Aby upewnić się, że nie utracisz żadnej z modyfikacji przychodzących z przodka, możesz różnicować dwie wersje tej funkcji, wizualnie wybierając je i uruchamiając polecenie linediff.

Powiązane problemy