我如何只做 dp 或只做行,而不是 Vim diff 中的整个块?

hob*_*es3 31 vim macvim vimdiff

我目前正在使用 MacVim (Snapshot 64)“Split Diff by...”菜单选项。

该文件是 Djangosettings.py从 1.3.1 版到 1.4 版的新文件。

截屏

我知道两个基本命令

  1. do 从另一侧“获得”(并替换)一个块。
  2. dp 将一个块“放置”(并替换)到另一侧。

但是这两个命令会写入整个块,在 MacVim 中是紫色的亮点。

如果您查看第 2 个块,您可以看到第 2 行和第 3 行只有 2 个不同的单词:mysiteand hobbes3。我只想替换每行而不是整个块。

那么有什么命令可以将 dododpper line替换为与整个块相反的命令,还是我必须手动输入它?

额外问题:我注意到一旦我手动编辑一个块,我就会失去紫色突出显示。如何在不重新打开文件的情况下再次“刷新”差异以包含亮点?

请尽量保留 Vim-general 的答案,而不是 MacVim-specific。

gar*_*ohn 34

有多种方法可以做到这一点。

  1. 在目标缓冲区中选择要从源缓冲区获取的行范围并使用:diffget. 例如,您可以使用 直观地选择一系列行V,然后键入:diffget
  2. 在源缓冲区中选择要放入目标缓冲区的行范围并使用:diffput. 例如,要将当前行放入另一个缓冲区,请键入:.diffput
  3. 使用 yank 和 put。在源缓冲区中选择要复制到目标缓冲区的行范围,使用 猛拉它们Y,将光标移动到目标缓冲区并使用p或将它们放在您想要的位置P,然后删除您不想要的行。
  4. 如上所述,但在目标缓冲区中,以视觉方式选择要替换的行范围(不一定是相同数量的行)并键入"0p. 它使用 0(零)寄存器,该寄存器始终包含最近一次 yank 的文本。

要“刷新”显示以显示正确的突出显示,请执行:diffupdate:diffu。有时这还不够,您需要将光标移动到另一个窗口以完成刷新。

您可以阅读有关复制差异的更多信息

:help copy-diffs
Run Code Online (Sandbox Code Playgroud)