Как сохранить изменения в буфере vim в виде файла патча?

21

Есть ли способ сохранить сделанные мной изменения в буфере vim как файл патча для исходного файла, не сохраняя его как отдельный файл и не используя diff?

lesderid
источник
2
Существует новый бета-сайт SE для Vi и Vim , вы можете проверить его.
Roflo

Ответы:

21

Это можно сделать без плагина с помощью wкоманды, поэтому содержимое буфера можно использовать в команде оболочки:

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

( %заменяется путем пути редактируемого файла, -считывает буфер из stdin)

lesderid
источник
2
Вы можете использовать, diff -u "%" -поскольку diffпонимает черту как значение, прочитанное с stdin
roaima
1

Вы также можете отфильтровать буфер, diffиспользуя %!синтаксис:

:%! diff -au "%" -

Это заполнит буфер diff, а не записывает его на диск; Вы можете захотеть установить, readonlyчтобы случайно не заглушить оригинал (OTOH, это не должно быть серьезной проблемой, потому что у вас есть файл с контролем версий, верно? ). Конечно, полезно иметь обратную команду:

:%! patch -o - "%"

Это преобразует ваш diff обратно в измененный файл.

Kevin
источник