如何在 Vimdiff 中展开/折叠差异部分?
Posted
技术标签:
【中文标题】如何在 Vimdiff 中展开/折叠差异部分?【英文标题】:How can I expand/collapse a diff sections in Vimdiff? 【发布时间】:2011-07-14 10:01:10 【问题描述】:我今天开始使用 vimdiff,并且想做一些我在基于 Windows 的差异编辑器上认为理所当然的事情(例如展开/折叠差异部分,具有完整的文件扩展/仅具有三个上下文的差异线上方或下方等)。我目前只知道以下命令:
键盘快捷键:
do - 从其他窗口获取更改到当前窗口。
dp - 将当前窗口的更改放入另一个窗口。
]c - 跳转到下一个更改。
[c - 跳转到上一个更改。
Ctrl+W, w - 切换到另一个分割窗口(Ctrl + W , Ctrl + W 做同样的事情,以防你稍后松开 Ctrl 键)
谁能指出我正确的方向,以便我可以复制类似的功能?
例如,如果我可以在差异周围展开/折叠线,那就太好了。
【问题讨论】:
有关添加/恢复一长串更改的快捷方式,请参阅***.com/q/6093746/212942 参见:Use vimdiff as git mergetool 和 vimdiff – the cool way to diff for vim users 看到这个问题在 4 年多后被关闭很有趣,当 'vimdiff' 被谷歌搜索时,它是前 3 个帖子! 见:vimdiff cheat sheet at GitHub Gist 【参考方案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>。它做同样的事情。
【讨论】:
我发现 ^W ^W 的打字速度比 ^W w 快很多。 认为这值得一提github.com/ankr/dotfiles/blob/master/files/vimrc#L103【参考方案4】:Ctrl + W, W 如前所述可用于在窗格之间导航。
现在您可以单独选择特定更改并将其粘贴到另一个窗格,如下所示。在这里,我给出了一个例子,好像我想将我的一段代码从窗格 1 更改为窗格 2,并且当前我的光标在窗格 1 中。
使用 Shift + V 突出显示一行并使用向上或向下键选择您需要的代码段,然后从下面编写的步骤 3 继续粘贴您的更改在另一个窗格中。
使用视觉模式,然后改变它
-
按 V。这将带您进入视觉模式
使用向上或向下键选择所需的代码
按 Esc
现在使用 yy 复制或 dd 剪切更改
执行 Ctrl + W、W 导航到窗格 2
按 P 将更改粘贴到您需要的位置
【讨论】:
您指定的全部内容(第一行除外)是 vim 本身的功能,而不是 vimdiff。以上是关于如何在 Vimdiff 中展开/折叠差异部分?的主要内容,如果未能解决你的问题,请参考以下文章
React:如何在内容大小未知时为展开和折叠 Div 设置动画