【问题标题】:How can I expand/collapse a diff sections in Vimdiff?如何在 Vimdiff 中展开/折叠差异部分?
【发布时间】:2011-07-14 10:01:10
【问题描述】:

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

键盘快捷键:

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

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

  • ]c - 跳转到下一个更改。

  • [c - 跳转到上一个更改。

  • Ctrl+W, w - 切换到另一个分割窗口(Ctrl + W , Ctrl + W 做同样的事情,以防你稍后松开 Ctrl 键)

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

例如,如果我可以在差异周围展开/折叠线,那就太好了。

【问题讨论】:

标签: linux vim diff command-line-interface vimdiff


【解决方案1】:

除了你提到的之外,我只在比较时经常使用以下内容:

  • :diffupdate :diffu -> 重新计算差异。当进行几次更改后,Vim 不再显示最小更改时,它很有用。请注意,它仅在文件已在 vimdiff 中修改时才有效。否则,请使用:
  • :e 重新加载文件,如果它们已在 vimdiff 之外修改。
  • :set noscrollbind -> 暂时禁用两个缓冲区的同时滚动,:set scrollbind 重新启用并滚动。

您要求的大部分内容都是折叠:the Vim user manual's chapter on folding。在差异之外,我有时会使用:

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

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

  • zr -> 降低折叠级别。
  • zm -> 请再折叠一层。

甚至:

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

您要求的另一件事,使用 n 行折叠,可以在 Vim reference manual section on options 找到,通过 section on diff

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

您还应该看看user manual section on diff

【讨论】:

  • 确实非常全面!!我会查看您所说的链接,但将问题保持开放几天,看看我是否会收到更多回复(我在周末发布,那时没有多少人会活跃)。
  • 顺便问一下,你知道vimdiff是否可以用于合并/三向解析等吗?那就太好了!!
  • @shan23 对于 3 路合并(对于 git),请检查 this。 svn 上也有 cmets。当你有 4 个缓冲区时,仍然试图找出命令(do/dp 不起作用)。
  • 要使:set noscrollbind 生效,还必须使用:set nocursorbind,这不是默认值。所以这两个选项都必须调整。
  • "zm = one More folder level, please" 我不记得这个了,我喜欢这个描述 - 谢谢!
【解决方案2】:

设置 vimdiff 忽略大小写。

使用 vim diff 开始

 gvim -d main.sql backup.sql &

我发现一个文件的 MySQL 关键字是小写的,而另一个大写的关键字几乎每隔一行都显示出差异,这很烦人。

:set diffopt+=icase

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

【讨论】:

  • 虽然这是一个不错的提示,但我看不出它与手头的问题有什么关系(如何在 vimdiff 中展开和折叠 diff 部分)。
【解决方案3】:

其实,如果你使用 Ctrl + W, W,你就不需要再添加那个额外的Ctrl kbd>。它做同样的事情。

【讨论】:

【解决方案4】:

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

现在您可以单独选择特定更改并将其粘贴到另一个窗格,如下所示。在这里,我给出了一个例子,好像我想将我的一段代码从窗格 1 更改为窗格 2,并且当前我的光标在窗格 1 中。

  • 使用 Shift + V 突出显示一行并使用向上或向下键选择您需要的代码段,然后从下面编写的步骤 3 继续粘贴您的更改在另一个窗格中。

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

    1. V。这将带您进入视觉模式
    2. 使用向上或向下键选择所需的代码
    3. Esc
    4. 现在使用 yy 复制或 dd 剪切更改
    5. 执行 Ctrl + WW 导航到窗格 2
    6. P 将更改粘贴到您需要的位置

【讨论】:

  • 您指定的全部内容(第一行除外)是 vim 本身的功能,而不是 vimdiff。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多