Jak zapisać zmiany w buforze vim jako plik łatki?

21

Czy istnieje sposób na zapisanie zmian, które wprowadziłem w buforze vim jako plik łatki dla oryginalnego pliku, bez zapisywania go jako osobnego pliku i używania diff?

lesderid
źródło
2
Jest nowa strona SE w wersji beta dla Vi i Vima , możesz ją sprawdzić.
Roflo,

Odpowiedzi:

21

Można to zrobić bez wtyczki za pomocą wpolecenia, więc zawartość bufora można wykorzystać w poleceniu powłoki:

:w !diff -au "%" - > changes.patch

( %jest zastąpiony ścieżką edytowanego pliku, -odczytuje bufor ze standardowego wejścia)

lesderid
źródło
2
Możesz używać, diff -u "%" -ponieważ diffrozumie myślnik jako znaczenie czytane ze stdin
roaima,
1

Możesz także przefiltrować bufor diffużywając %!składni:

:%! diff -au "%" -

Spowoduje to wypełnienie bufora różnicą zamiast zapisywania go na dysku; możesz ustawić readonlytak, aby przypadkowo nie blokować oryginału (OTOH, nie powinno to stanowić poważnego problemu, ponieważ plik jest pod kontrolą wersji, prawda? ). Oczywiście pomaga mieć odwrotne polecenie:

:%! patch -o - "%"

To przekształca twój plik różnicowy z powrotem w zmodyfikowany plik.

Kevin
źródło