如何使用 vimdiff 比较两个非常大的文件(例如 a.txt 和 b.txt)的前 1000 行

Che*_*ang 2 vim

正如标题所示,1000 行对于使用 diff 来说有点太多了,因此vimdiff是最好的选择。我的第一个想法是,是否vimdiff将其作为内置功能提供。vimdiff如果没有,则将和组合起来head作为单行走走,而不创建两个缓冲区文件。

Ada*_*atz 6

假设您正在运行 bash,您可以将其调用为

\n
$ vimdiff <(head -n 1000 "file1.txt") <(head -n 1000 "file2.txt")\n
Run Code Online (Sandbox Code Playgroud)\n

(或者gvimdiff)。这使用bash 进程替换来获取保存这些命令的输出的临时命名管道head,并将它们进行比较vimdiff.

\n

这些管道的名称将根据您的系统而有所不同。在我的 Linux 系统上,它们看起来像/proc/123456/fd/11/proc/123456/fd/12(其中 123456 是父 bash shell 的进程 ID)。请注意,这些不会共享原始文件的扩展名(您可能会混淆哪个是哪个;记住最左边的是第一个,最右边的是最后一个\xe2\x80\x94,我这么说是因为你可以放入第三个以及)。考虑一个命令,例如vimdiff -c \'windo set syn=bash\' <(head \xe2\x80\xa6) <(head \xe2\x80\xa6)将它们设置为使用 bash 格式突出显示。

\n

如果你想要更好的标签,你可以在其中添加一个回声,例如<(echo "file1.txt"; head \xe2\x80\xa6)它会出现在第一行一样。要将自定义名称分配给状态栏以便它们显示在标尺上,您可以像这样启动它:

\n
$ vimdiff -c "windo setlocal statusline=$file1" <(head -n 1000 "$file1") \\\n                  +"setlocal statusline=$file2" <(head -n 1000 "$file2")\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 但请注意,文件名中的空格在状态行中不起作用(它们必须被转义而不是引用)。

\n