当我有一个差异时,我如何给它上色,使它看起来更好?
我想它的命令行,所以请没有GUI解决方案。
当我有一个差异时,我如何给它上色,使它看起来更好?
我想它的命令行,所以请没有GUI解决方案。
当前回答
我最喜欢的选择是vdiff <file1> <file2>函数(我忘记从哪里得到它)。
它将在Vim中并排打开两个窗口,以清楚地看到两个文件之间的差异。
vdiff () {
if [ "${#}" -ne 2 ] ; then
echo "vdiff requires two arguments"
echo " comparing dirs: vdiff dir_a dir_b"
echo " comparing files: vdiff file_a file_b"
return 1
fi
local left="${1}"
local right="${2}"
if [ -d "${left}" ] && [ -d "${right}" ]; then
vim +"DirDiff ${left} ${right}"
else
vim -d "${left}" "${right}"
fi
}
将这个脚本放在您的(.alias)或(.zshrc)中,然后使用 Vdiff <file1> <file2>. Vdiff <file1>。
例子
结果如下:
其他回答
当yum install colordiff或apt-get install colordiff由于一些超出你直接控制的疯狂限制而不是一个选项时,或者你只是感觉疯狂,你可以用一行sed来重新发明轮子:
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
把它扔到一个shell脚本中,并通过它管道统一的差异输出。
它使大块标记为蓝色,突出显示新/旧文件名和添加/删除的行,分别为绿色和红色背景它将使尾随空格2的变化比colordiff更明显。
顺便说一句,突出显示与修改行相同的文件名的原因是,要正确区分文件名和修改行,需要正确解析diff格式,这不是用正则表达式可以解决的问题。突出显示它们在视觉上“足够好”,使问题变得微不足道。也就是说,有一些有趣的微妙之处。
2但不是尾随制表符。显然制表符没有得到它们的背景设置,至少在我的xterm中是这样。它确实使制表符与空格的变化脱颖而出。
diff——颜色选项(添加到GNU diffutils 3.4在2016-08-08)
这是大多数发行版的默认差异实现,很快就会得到它。
Ubuntu 18.04 (Bionic Beaver)有困难3.6,因此有它。
在3.5版本中是这样的:
测试:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
显然是在提交c0fa19fe92da71404f809aafb5f51cfd99b1bee2(2015年3月)中添加的。
也能进行比较
像diff-highlight。这似乎是不可能的,但有一个功能请求:https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
相关问题:
使用'diff'(或其他任何东西)来获取文本文件之间的字符级差异 https://unix.stackexchange.com/questions/11128/diff-within-a-line https://superuser.com/questions/496415/using-diff-on-a-long-one-line-file
不过Ydiff就是这么做的。见下文。
Ydiff并排字级别差异
https://github.com/ymattw/ydiff
这是涅槃吗?
python3 -m pip install --user ydiff
diff -u a b | ydiff -s
结果:
如果行太窄(默认为80列),适合屏幕:
diff -u a b | ydiff -w 0 -s
测试文件内容:
a
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
b
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
西cyff退出
ydiff与Git集成,无需任何配置。
在Git存储库中,你可以做的不是Git diff,而是:
ydiff -s
而不是git log:
ydiff -ls
请参见:当我执行“git diff”时,我如何获得一个并排diff ?
在Ubuntu 16.04 (Xenial Xerus), Git 2.18.0和ydiff 1.1上测试。
使用Vim:
diff /path/to/a /path/to/b | vim -R -
或者更好的是,VimDiff(或vim -d,打字更短)将并排显示两个、三个或四个文件之间的差异。
例子:
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
你可以改变Subversion配置使用colordiff:
~ / .subversion / config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
通过https://gist.github.com/westonruter/846524
使用bat命令:
diff file1 file2 | bat -l diff