有没有办法 vim 仅区分两个文件中的某些块?

有没有办法 vim 仅区分两个文件中的某些块?

我使用 vimdiff 作为我的首选 diff 工具。我想知道是否有办法 vimdiff 两个文件之间的某些块(最好不使用插件)。

例如,将 file1.py 中第 14 至 26 行的 getValues() fn 与 file2.py 中第 30 至 60 行的 getValues() fn 进行比较

答案1

插件解决方案

正如前面提到的,有几个插件:

  • BlockDiff工具是一个古老而简约的插件,用于在单独的选项卡页面中查看文本块之间的差异。
  • 行差异是一种现代的、更强大的变体,它还可以同步更改,甚至处理合并冲突、用符号显示范围等。
  • spotdiff.vim采用了不同的方法:它不是将区域临时复制到单独的缓冲区(在新标签页中),而是在原始窗口中进行差异处理,然后淡出不相关的部分。
  • 我自己的AdvancedDiffOptions 插件有一个:DiffIRange命令可以通过自定义方式排除 diff 中的某些行'diffexpr'通过 shell 命令过滤文件。该插件还可以按行和模式进行过滤。

自制

在 Unix 上,你可以将 shell(例如 Bash)功能与常用工具(sed)结合起来,将提取的文本内容提供给 vim:

vimdiff <(sed -n '14,26p' file1.py) <(sed -n '30,60p' file2.py)

这使用流程替代( <(command)) 运行command,并将其输出作为临时文件描述符提供,Vim 可以像读取任何其他文件一样读取它。sed默认输出抑制 ( -n) 用于有选择地选择行(通过{range}print 命令);您还可以根据情况使用headtail甚至。grep

这与我的插件类似;缺点是仅有的选定的范围可以在 Vim 内部访问。

相关内容