如何在Vim中同步查看和垂直滚动分割的缓冲区?

43

我在Vim中有两个垂直分割的缓冲区,显示两个不同的文件,希望它们都能同步显示和滚动。通过在两个缓冲区顶部使用:set scrollbind,可以实现滚动部分(当我在一个缓冲区中按下zt时,当前行会在两个缓冲区中跳转到顶部),但遗憾的是,显示不会同步。

这意味着,如果文件中的行长度不同,则两个缓冲区将无法在视觉上对齐。我希望Vim在显示中添加额外的换行符,以确保长换行的行不会影响两个缓冲区的垂直同步显示。

谢谢!


你要比较它们吗?最好使用diff来完成这个任务。 - Andrew
@Andrew:不,我要编辑它们。双语文本。 - Ahmed Fasih
很棒的问题,对齐缓冲区的运用很酷! - Cascabel
3个回答

21

除了在两个缓冲区中设置scrollbind之外,您需要发出命令:syncbind。这将同步滚动。如果您打开换行并且两个文件具有不同长度的行,则我不知道它是否会完美地执行。但是,如果关闭换行,它应该保持相同的行号。


谢谢。我通常手动在每个缓冲区上调用“scrollbind”,因此尽管“:syncbind”可以为我节省一些按键,但在存在不相等和长换行线的情况下,我仍然面临对齐问题。 - Ahmed Fasih
4
Syncbind不是滚动绑定(scrollbind)的替代品,它会在两个窗口都启用滚动绑定时改变行为。例如,如果我打开了两个垂直的窗口并加载了同一个文件,但其中一个窗口很窄,因此需要自动换行,那么我认为我唯一能让两个窗口中的文本始终“对齐”的方法就是使用syncbind命令。当然,文本行并不能完美地对齐(除非像diff视图那样添加空白行),但当我在一个窗口上下滚动时,窗口顶部的两条文本行总是完美匹配的。我不知道这是否足够清楚,但最顶部的文本行确实总是匹配的。 - Herbert Sitz

3

您可以使用

:set nowrap

为了防止长行被换行,从而使您的缓冲区同步。虽然不完全是您所要求的,但很接近。

谢谢。这些文件有很长的行(同一本书的不同语言版本),所以我想我必须换行。 - Ahmed Fasih

0

我怀疑如果你需要换行,Vim 是否真的适合垂直比较具有非常长文本行的缓冲区,但是,我是一个真正的 Vim 爱好者。

我可以向您建议的是:

  • 使用 vim,在每一行前插入行号,并将文件双倍间隔(:g/^/put _)。如果您正在翻译,则行号不应该真正受到更改的影响?
  • 使用 Kompare 或 Meld 打开两个具有图形技巧的文件,以平滑地绑定不等长度的行。然后调整颜色方案,使其表现得像不是 diff 工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接