如何在人类语言文本中使用单词diff(中文)?
我在git存储库中有一些中文的纯文本。文本已被编辑,我想看看哪些单词已被添加/删除。文件中的一行代表整段文字,所以一个简单的git diff是不够的:我们知道某些段落中的某些内容发生了变化,但我们无法看到哪些句子/单词发生了变化。
更糟糕的是,正如我所说,文字是中文的。与英语和其他印欧语言不同,中文不使用空格作为单词分隔符。整段与中文标点符号一起构成统一区块,不包含任何空格。因此,git diff --word-diff根本没有帮助。
有没有办法在中文的两个版本的文本中使用人类可读的差异?每个角色是否有相应的--word-diff?
答案 0 :(得分:0)
我发布这个作为我自己问题的答案,但是,它只包含解决方案的一部分,指向正确的方向。仍然缺少一些东西。
从 How can I visualize per-character differences in a unified diff file? 尝试使用任一命令:
git diff --word-diff-regex=.
git diff --color-words=.
上面两个命令中的任何一个让我非常接近。但是,我有两个问题。 如果我只是输入上面的命令并查看控制台中的输出,我只会显示每个段落的开头。整行不适合控制台,git截断结尾(即大部分!)。
或者,如果我尝试重定向到文件:
git diff --color-words=. > diff.patch
然后使用vim查看文件,我得到一些混乱的混乱,看起来更像二进制代码而不是人类可读的东西。
更新:
我终于使用了这个解决方案:
wget https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight --no-check-certificate
chmod u+x diff-highlight
git diff --color=always | ./diff-highlight | less -R
答案 1 :(得分:0)
逐字diff
应该作为您自己的答案。从doc开始,--word-diff-regex
和--color-words
之间的关系如下。
--color-words[=<regex>
Equivalent to --word-diff=color plus (if a regex was specified) --word-diff-regex=<regex>.
实际上,您可以将word-diff
模式设置为porcelain
,以便更好地查看控制台中的diff
输出。
git diff --word-diff-regex=. --word-diff=porcelain
要将输出重定向到文件,您不应使用--color-words
(默认--word-diff
为color
),因为生成的文本文件无法识别以某种方式编码的颜色信息由git diff
作为你得到的乱七八糟的混乱。您可以使用--word-diff-regex=.
,默认--word-diff
模式为plain
。
git diff --word-diff-regex=. > diff.patch
答案 2 :(得分:0)
icdiff可以满足您的需求。比较中文文本时,此工具可以逐字显示差异。