☰ menu
Pavel Satrapa

Porovnání souborů

Existence svislých oken ve vim 6 mne sama o sobě do transu nepřivedla, ale umožnila jednu moc pěknou vychytávku: porovnání souborů. Určitě už jste byli v situaci, kdy máte dvě verze téhož souboru. Podle času změny sice víte, která je novější, ale nejste si tak úplně jisti, v čem se vlastně liší, a neradi byste o něco přišli. Chtělo by to nástroj pro vzájemné porovnání.

Takových nástrojů je celá řada. V Unixu diff a jeho grafické verze, v MS-DOSu fc. Ovšem žádný z nich se mi nelíbil tolik, jako porovnávání ve vim. Nyní stačí zadat příkaz

vimdiff soubor1 soubor2

případně

gvimdiff soubor1 soubor2

pokud dáváte přednost grafické verzi. Objeví se zhruba toto:

ukázka porovnání v gvim

Jak vidíte, obě verze jsou přehledně umístěny vedle sebe a jejich odlišnosti barevně vyznačeny. Vim zároveň využívá schopnosti skládání a složí nezajímavé (stejné) části textu, aby vám zůstaly na očích především změny.

Mezi jednotlivými odlišnostmi se můžete snadno pohybovat. Příkaz ]c přesune kurzor na začátek následující změny a příkaz [c jej vrátí na začátek změny předchozí.

Můžete také odstraňovat nalezené rozdíly. Nejjednodušším způsobem je přesunout kurzor na některou odlišnost a použít příkaz dp nebo do. První z nich (mnemotechnika: Diff Put) přepíše odpovídající řádky protějšího souboru obsahem editovaného souboru, aby změna označená kurzorem zmizela. Druhý (mnemotechnika: Diff Obtain) dělá to samé, ale v opačném směru. Přepíše část editovaného souboru obsahem protějšího souboru.

Totéž dělají řádkové příkazy :diffput a :diffget. Jedná se o běžné ex-příkazy, takže jim rozmezím řádků lze zadat, které části souboru se mají týkat. Například :%diffput pokryje celý soubor, vim upraví řádky protějšího souboru tak, aby se celý shodoval s editovaným. Neurčíte-li řádky, zpracují odlišnost označenou kurzorem, stejně jako příkazy dp a do.

Ovšem tyto služby už nejsou tak atraktivní. To nejdůležitější na porovnávání je vědět a tuto službu plní vim velmi dobře.