如何在Vimdiff中展开/折叠差异部分?


295

我今天开始使用vimdiff,并想做一些我在基于Windows的差异编辑器上理所当然的事情(例如,展开/折叠差异部分,具有完整的文件扩展/仅具有3条上下文行的差异或下方等)。我目前只知道以下命令:

键盘快捷键:

  • do -从其他窗口更改到当前窗口。

  • dp -将当前窗口中的更改放入另一个窗口。

  • ]c -跳至下一个更改。

  • [c -跳至上一个更改。

  • CTRL+ Ww-切换到另一个拆分窗口(CTRL+ WCTRL+ W做同样的事情,以防您CTRL稍后松开键)

有人可以指出我正确的方向,以便我可以复制类似的功能吗?

例如,如果我可以展开/折叠差异周围的线条,那将是很好的。


2
有关添加/还原一长串更改的快捷方式,请参阅stackoverflow.com/q/6093746/212942
TCSGrad,2011年


1
有趣的是,这个问题在4年多之后被关闭,当它被搜索到“ vimdiff”时,它是前三名!
TCSGrad

Answers:


241

除了您提到的内容,我仅在区别以下内容时经常使用:

  • :diffupdate :diffu->重新计算差异,在进行几次更改后vim不再显示最小更改时很有用。请注意,只有在vimdiff内修改了文件后,它才起作用。否则,请使用:
    • :e 如果在vimdiff外部对其进行了修改,则可以重新加载文件。
  • :set noscrollbind->暂时禁用同时在两个缓冲区上:set scrollbind滚动,并通过和滚动重新启用。

您所需要的大部分是折叠:vim用户手册中的折叠章节。在diff之外,我有时使用:

  • zo ->打开折叠。
  • zc ->折叠。

但是您可能会得到更好的服务:

  • zr ->降低​​折叠水平。
  • zm ->请再折叠一层。

甚至:

  • zR ->完全减少折叠,我说!
  • zM ->最折!

你问则使用n折叠线的另一件事,可以在发现上的选项VIM参考手册中,通过对差异部分

  • set diffopt=<TAB>,然后更新或添加context:n

您还应该查看diff用户手册部分


确实非常全面!我会检查您说过的链接,但请让问题多待几天,看看我是否能得到更多答复(我在一个周末发帖,届时活动的人并不多)。
TCSGrad 2011年

顺便说一句,您是否知道vimdiff是否可以用于合并/三路解析等?那真的很棒!
TCSGrad 2011年

1
@ shan23对于3路合并(针对GIT),检查出。svn上也有评论。但是,当您有4个缓冲区时,仍然尝试找出命令(do / dp无法正常工作)。
Quornian

为了:set noscrollbind生效,还必须:set nocursorbind使用默认值。因此,必须调整两个选项。
血腥的

4

设置vimdiff忽略大小写

开始了vim diff与

 gvim -d main.sql backup.sql &

我发现一个文件中的MySQL关键字小写,另一个大写,几乎每隔一行显示差异

:set diffopt+=icase

这会动态更新屏幕,您可以轻松地再次将其关闭


尽管这是一个不错的技巧,但我看不到它与当前问题(如何在vimdiff中扩展和折叠diff部分)之间有什么关系。
Paul Stelian


0

ctrl + w,如前所述,可用于在窗格之间导航。

现在您可以单独选择一个特定的更改,然后将其粘贴到另一个窗格,如下所示。在此,举一个例子,好像我想将代码从窗格1更改为窗格2一样,当前光标位于窗格1中。

  • 使用Shift-v突出显示一行,并使用向上或向下键选择所需的代码段,然后从下面编写的步骤3继续,以将所做的更改粘贴到另一个窗格中。

  • 使用视觉模式,然后更改它

    1单击“ v”,这将带您进入可视模式2使用向上或向下键选择所需的代码3单击,按Esc退出键4现在使用“ yy”复制或使用“ dd”剪切更改5做“ ctrl + w,w'导航到窗格2 6单击'p'将更改粘贴到需要的位置


1
您指定的全部内容(第一行除外)是vim本身的功能,而不是说的vimdiff。
TCSGrad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.