Цветная разность слов, как у Git?

8

Я долгое время использовал Git's (цветную), --word-diffчто я нахожу потрясающим. Сегодня я оказался в ситуации, когда у меня было две строки, которые мне нужно было сравнивать слово за словом, и я жаждал чего-то такого же, как git diff.

Я знаю о wdiff+ colordiff, но его результаты, конечно, не звездные:

me@me:~$ wdiff <(echo -e "abc\ndef") <(echo -e "dbcx\ndef") | colordiff
[-abc-]{+dbcx+}
def

Есть ли лучший вариант вокруг? Я не особенно нравятся те [-, -]и {+, +}.

пожрал Элизиум
источник

Ответы:

6

Вы можете использовать gitсобственный diff-highlight . Он может выделять различия слов в унифицированном diffвыводе, а также справляться с цветами ANSI при вводе. Таким образом, вы можете сделать что-то вроде этого:

colordiff -u <(echo -e "foo abc\ndef") <(echo -e "foo dbcx\ndef") | diff-highlight
Сату Кацура
источник
Это работает только для тривиального случая, когда в строке изменяется одно слово. Когда меняется несколько слов, неправильно растягивает обратное видео по словам, которые не изменились: colordiff -u <(echo -e "foo abc x y\ndef") <(echo -e "foo dbcx x z\ndef") | diff-highlight
Томас Дики
@ThomasDickey Кажется, для повторной синхронизации нужны два слова. Во всяком случае, это то , что gitделает. пожимает плечами
Satō Katsura