Jak rozwinąć / zwinąć sekcje różnic w Vimdiff?


295

Dzisiaj zacząłem używać vimdiff i chciałem robić pewne rzeczy, które uznałem za oczywiste w edytorach różnic opartych na systemie Windows (takich jak rozwijanie / zwijanie sekcji różnic, pełne rozszerzenie pliku / tylko różnice z 3 liniami kontekstu powyżej lub poniżej itp.). Obecnie znam tylko następujące polecenia:

Skróty klawiszowe:

  • do - Pobierz zmiany z innego okna do bieżącego okna.

  • dp - Umieść zmiany z bieżącego okna w drugim oknie.

  • ]c - Przejdź do następnej zmiany.

  • [c - Przejdź do poprzedniej zmiany.

  • CTRL+ W, w- Przełącz do drugiego podzielonego okna ( CTRL+ W, CTRL+ Wrobi to samo, na wypadek, gdybyś puścił CTRLklawisz nieco później)

Czy ktoś mógłby wskazać mi właściwy kierunek, abym mógł odtworzyć podobne funkcje?

Byłoby miło, gdybym mógł na przykład rozwinąć / zwinąć linie wokół różnic.


2
Skrót do dodawania /
cofania


1
To zabawne, że pytanie zostało zamknięte po ponad 4 latach, ponieważ jest to 3 pierwsze posty, gdy „vimdiff” jest googleowany!
TCSGrad

Odpowiedzi:


241

Oprócz tych, o których wspominasz, używam tylko często, gdy różnicuję następujące elementy:

  • :diffupdate :diffu-> przelicz różnicę, przydatne, gdy po dokonaniu kilku zmian vim nie pokazuje już minimalnych zmian. Zauważ, że działa to tylko wtedy, gdy pliki zostały zmodyfikowane w vimdiff. W przeciwnym razie użyj:
    • :e przeładować pliki, jeśli zostały zmodyfikowane poza vimdiff.
  • :set noscrollbind-> tymczasowo wyłącz jednoczesne przewijanie na obu buforach, ponownie włącz :set scrollbindi przewijaj.

Większość tego, o co prosiłeś, to składanie: rozdział instrukcji składania vima na temat składania . Poza różnicami czasami używam:

  • zo -> otwórz krotnie.
  • zc -> zamknij krotnie.

Ale prawdopodobnie lepiej będzie ci służyć:

  • zr -> zmniejszenie poziomu składania.
  • zm -> proszę o jeszcze jeden poziom składania.

lub nawet:

  • zR -> Zmniejsz całkowicie składanie, powiedziałem !.
  • zM -> fold Most !.

Inną kwestię, o którą prosiłeś, użyj n linii składania, można znaleźć w instrukcji manuala vim na temat opcji , poprzez sekcję na diff :

  • set diffopt=<TAB>, a następnie zaktualizuj lub dodaj context:n.

Powinieneś także zajrzeć do instrukcji obsługi na diff .


Rzeczywiście bardzo kompleksowe !! Sprawdziłbym linki, które powiedziałeś, ale pozostawiłem pytanie otwarte przez kilka kolejnych dni, aby zobaczyć, czy otrzymam więcej odpowiedzi (opublikowałem w weekend i wtedy niewiele osób byłoby aktywnych).
TCSGrad

Nawiasem mówiąc, czy wiesz, czy vimdiff można wykorzystać do scalania / rozwiązywania 3-stronnego itp.? To byłoby naprawdę świetne !!
TCSGrad

1
@ shan23 W przypadku łączenia 3-drogowego (dla git) sprawdź to . Istnieją również komentarze na temat svn. Wciąż próbuję rozgryźć polecenia, gdy masz 4 bufory (do / dp nie działają).
quornian

Aby :set noscrollbindzadziałało, należy go również :set nocursorbindużyć, co nie jest ustawieniem domyślnym. Tak więc obie opcje muszą zostać dostosowane.
krwawy

4

ustaw vimdiff, aby ignorował wielkość liter

Po uruchomieniu vim diff z

 gvim -d main.sql backup.sql &

Uważam, że irytująco jeden plik ma słowa kluczowe MySQL pisane małymi literami, a inne wielkie litery pokazują różnice w praktycznie każdej innej linii

:set diffopt+=icase

To dynamicznie aktualizuje ekran i możesz równie łatwo go ponownie wyłączyć


Chociaż jest to fajna wskazówka, nie rozumiem, w jaki sposób ma ona związek z danym pytaniem (jak rozwijać i zwijać sekcje różnic w vimdiff).
Paul Stelian,


0

ctrl + w, w, jak wspomniano, może być używany do nawigacji z okienka do okienka.

Teraz możesz wybrać konkretną zmianę samodzielnie i wkleić ją do drugiego panelu w następujący sposób. Tutaj podaję np. Tak, jakbym chciał zmienić swój fragment kodu z panelu 1 na panel 2, a obecnie mój kursor znajduje się w panelu 1

  • Użyj Shift-v, aby podświetlić linię, i użyj klawiszy strzałek w górę lub w dół, aby wybrać wymagany fragment kodu i kontynuuj od kroku 3 napisanego poniżej, aby wkleić zmiany w drugim panelu.

  • Użyj trybu wizualnego, a następnie zmień go

    1 kliknięcie „v” spowoduje przejście do trybu wizualnego 2 za pomocą klawisza strzałki w górę lub w dół, aby wybrać wymagany kod 3 kliknięcie, klawisz Esc „Esc” 4 Teraz użyj „yy”, aby skopiować, lub „dd”, aby wyciąć zmianę 5 do ctrl + w, w ', aby przejść do panelu 2 6 kliknij „p”, aby wkleić zmianę tam, gdzie jest to wymagane


1
Całość tego, co określiłeś (oprócz pierwszego wiersza) jest cechą samego vima, a nie vimdiff na słowo.
TCSGrad
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.