вторник, мая 06, 2008

vim как удобный diff

Довольно обычная задача - сравнить два файла построчно. Можно конечно использовать diff (под виндой есть наверное что-то похожее, ну аналог точно есть - сам когда-то давно использовал), но вывод diff не очень красив, а для усталого ума ещё и не достаточно очевиден...

Пусть у нас есть два файла f1 и f2.
Файл f1 состоит из 5 следующих строк:
row1
row2
row3
row4
row5

Файл f2 получен из f1 закоментированием одной строки и добавлением двух новых:
row1
row2
#row3
newRow1
row4
newRow2
row5

Выполнение diff нам даёт следующий результат:
[***]# diff f1 f2
3c3,4
< row3
---
> #row3
> newRow1
4a6
> newRow2

В принципе понятно но не сказать что прямо сразу. Можно сделать чуть получше:
[***]# diff -u f1 f2
--- f1 2008-05-06 03:24:16.000000000 +0400
+++ f2 2008-05-06 03:24:41.000000000 +0400
@@ -1,5 +1,7 @@
row1
row2
-row3
+#row3
+newRow1
row4
+newRow2
row5
Но на больших файлах не очень это удобно смотреть будет, ну и если я сравниваю с целью поправить что-то то хотелось бы прямо на месте это сделать. И это можно сделать командой `vim -d f1 f2` что синонимично `vimdiff f1 f2`. После запуска этой команды получим следующую картину:


На мой взгляд весьма наглядно и удобно. Ну по крайней мере для тех кто умеет пользоваться vim. Тем кто не умеет - советую научится, так как vim обычно есть везде на *nix, там где нету - можно быстро поставить (даже под винды).

P.S. Если вдруг когда-нибудь сюда набегут emacs'овцы - на emacs'е я сидел, правда довольно давно. Со временем стал считать что он избыточен для одних задач и недостаточен/неудобен для других (это вовсе не значит что vim для этих задач достаточен), так же избегаю лишних наворотов в vim'е. Но своё мнение другим не навязываю. :)

2 комментария:

cencio комментирует...

под виндой как диф удобнее другии тулзы пользовать, например WinMege

Лаврентий Палыч комментирует...

Точно, WinMerge я и использовал когда под виндой жил. Под виндой удобнее наверное его использовать.

Но когда сидишь где-нибудь через ssh - удобнее vim.