gpt4 book ai didi

vimdiff:强制逐行比较(忽略据称丢失/额外的行)

转载 作者:行者123 更新时间:2023-12-04 01:05:34 28 4
gpt4 key购买 nike

如何强制 vimdiff 始终逐行比较两个文件而不识别添加或删除的行?

问题是,如果两个文件之间的差异很大,但碰巧文件中的两行匹配,vimdiff 认为这些行是相同的,只是将其余行视为添加或删除的行,结果差异完全无法使用。就我而言,file1 中的第 i 行始终对应于 file2 中的第 i 行,因此 vimdiff 没有业务查找添加或删除的行。

以下是一个小示例,其中包含两个文件,每个文件包含三个变量的值。 Vimdiff 错误地将 file1/line1 与 file2/line3 匹配,并认为它周围的某些行已被添加或删除。差异(减去颜色)然后看起来像这样:

              |  1 foo 8.1047  < del/new
| 2 bar 6.2343 < del/new
1 foo 0.0000 | 3 foo 0.0000 < match
2 bar 5.3124 | 4 bar 1.4452 < wrong
3 foo 4.5621 | < new/del
4 bar 6.3914 | < new/del
5 foo 1.0000 | 5 foo 1.0000 < match
6 bar 6.3212 | 6 bar 7.2321 < wrong

但是,我想要的是以下内容,除了匹配的第 5 行之外,所有行都标记为错误:
1 foo 0.0000  |  1 foo 8.1047 < wrong
2 bar 5.3124 | 2 bar 6.2343 < wrong
3 foo 4.5621 | 3 foo 0.0000 < wrong
4 bar 6.3914 | 4 bar 1.4452 < wrong
5 foo 1.0000 | 5 foo 1.0000 < match
6 bar 6.3212 | 6 bar 7.2321 < wrong

最佳答案

当我复制这个例子来尝试时,我注意到 vimdiff如果您有与每行相关联的行号,就会做您想做的事情。

因此,您可以使用 cat添加行号,然后比较:

  cat -n file1 > file1_with_line_no
cat -n file2 > file2_with_line_no

vimdiff file1_with_line_no file2_with_line_no

然后输出如您所愿(显示为 diff 以便于复制到此处):
 diff file1_with_line_no file2_with_line_no --side-by-side
1 foo 0.0000 | 1 foo 8.1047
2 bar 5.3124 | 2 bar 6.2343
3 foo 4.5621 | 3 foo 0.0000
4 bar 6.3914 | 4 bar 1.4452
5 foo 1.0000 5 foo 1.0000
6 bar 6.3212 | 6 bar 7.2321

在 bash 中,您可以将此添加到您的 .bashrc所以你可以使用 linediff从命令行正常调用两个文件之间的差异:
linediff() { 
if [ -z "$1" ] || [ -z "$2" ]; then return; fi
f1=$(basename "$1")
f2=$(basename "$2")
cat -n "$1" > "/tmp/$f1"
cat -n "$2" > "/tmp/$f2"
vimdiff "/tmp/$f1" "/tmp/$f2"
rm "/tmp/$f1" "/tmp/$f2"
}

现在 linediff file1 file2将执行上述操作并在之后进行清理。

关于vimdiff:强制逐行比较(忽略据称丢失/额外的行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27781235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com