![vim:比较两个文件中的两个部分,但不是整个文件?](https://linux22.com/image/1312076/vim%EF%BC%9A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E4%B8%A4%E4%B8%AA%E9%83%A8%E5%88%86%EF%BC%8C%E4%BD%86%E4%B8%8D%E6%98%AF%E6%95%B4%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我将系统从 Nagios 2 升级到 Nagios 3,现在正在比较新旧配置文件的一些差异。
配置文件有重大变化,我不想对整个文件执行差异比较,因为 vimdiff 显示了太多不相关的差异,并且#
在处理行首的注释等时遇到困难。
我可以使用 vim 或类似 vimdiff 的功能对两个不同文件中的两个特定部分执行差异比较吗?
例如,我只想比较类似这样的行:
# Define a service to check the load on the local machine.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Blah Blah
check_command Blah Blah
}
答案1
这听起来像行差异可能是您想要的:“对两个文本块执行交互式差异比较”。
您可以使用其命令指定每个块(行范围):Linediff
(例如:4,10Linediff
,或先进行视觉选择,然后键入:Linediff
(显示为:'<,'>LineDiff
))。范围可以来自同一文件/缓冲区,也可以来自不同文件/缓冲区。指定两个范围后,它会打开一个新选项卡,其中包含两个新的差异模式缓冲区(拆分为指定范围)。您可以:w
在任一缓冲区中编辑和以更新原始范围。完成后,:q
退出差异缓冲区并:LinediffReset
删除原始缓冲区中的范围说明符。
这Stackoverflow 答案我第一次了解 linediff.vim 的地方也提出了一些映射。其他答案那个问题还提到了一个自定义解决方案和另一个可以解决同一问题的插件。
答案2
我还没有找到一个真正直接的方法来做到这一点,但我用 NrrwRgn(窄区域)插件取得了相当不错的成功,http://www.vim.org/scripts/script.php?script_id=3075。它允许您选择缓冲区的某个区域并在新缓冲区中打开该区域。您可以编辑该新缓冲区,当您关闭它时,插件会自动将您编辑的文本复制回原始文件中的原区域。您还可以将一个或多个文件的不同区域复制到新缓冲区中,然后比较这些新缓冲区的差异。这就是我通常使用插件的方式——检查一个文件中定义的类似函数之间的差异。
就您而言,您可以在 Vim 中打开这两个文件,然后使用V
选择第一个文件中感兴趣的部分并键入\nr
将该部分复制到新缓冲区。对另一个文件中的类似部分重复上述操作。然后在两个新缓冲区中分别执行:diffthis
。
答案3
spotdiff.vim 怎么样(http://www.vim.org/scripts/script.php?script_id=5509) 我最近发布了什么?