Merge 从命令行在vim中混合垂直和水平拆分

Merge 从命令行在vim中混合垂直和水平拆分,merge,diff,split,vim,Merge,Diff,Split,Vim,标题真的说明了一切。有-O选项用于垂直打开拆分,而-O选项用于水平打开拆分,但是尝试混合它们似乎不起作用 我的目标是使用g/vimdiff在mercurial中进行3路文件合并,方式更像kdiff3。此方法将要合并的3个文件在顶部拆分为3个垂直选项卡(我的本地版本、合并文件的另一个版本以及两者之间的基础版本),而“输出”或合并结果,是一个横跨底部的大型水平选项卡。尽管Vim允许您提供两个以上的文件进行差异,但它在处理两个以上的差异时并不特别有效 无论如何,您可以正确地指出,不能同时使用-O和-O

标题真的说明了一切。有-O选项用于垂直打开拆分,而-O选项用于水平打开拆分,但是尝试混合它们似乎不起作用


我的目标是使用g/vimdiff在mercurial中进行3路文件合并,方式更像kdiff3。此方法将要合并的3个文件在顶部拆分为3个垂直选项卡(我的本地版本、合并文件的另一个版本以及两者之间的基础版本),而“输出”或合并结果,是一个横跨底部的大型水平选项卡。

尽管Vim允许您提供两个以上的文件进行差异,但它在处理两个以上的差异时并不特别有效

无论如何,您可以正确地指出,不能同时使用
-O
-O
指定不同的分割方式。最好的方法是(通过
-s3way.vim
)获取要运行的脚本,或者使用
--cmd
参数设置拆分并更改这些拆分中显示的缓冲区

假设您以
vim-S 3way.vim本地文件otherversion baseversion merged
的形式调用vim,则可能是一个3way.vim

botright vsplit +b2  " Opens a split and focuses otherversion
botright vsplit +b3  " Opens a split and focuses baseversion
botright split +b4   " Opens a split and focuses merged
wincmd =             " Resize all windows so they share space equally

这有点笨拙,但它是有效的:

vim -c "wincmd J" -O base diff1 diff2
(这是一个逐字记录控件-W)


也许有一种更优雅的方法,但这只是将所有的方法都垂直加载,然后将活动的(第一个)方法移到底部。

更优雅的方法是使用
wincmd J
。好吧,你的方法更像我所认为的优雅,尽管你是对的。(当然,我不确定
wincmd{arg}
normal^W{arg}
之间的内部差异有多大)我喜欢好的乱七八糟,这就可以了。特别是在.hgrc:filemerge.args=-c“wincmd J”-g-d-O$output$local$other$base中添加一点这一点,以防其他任何人在试图让TortoiseSVN使用Vim作为合并工具时发现它,并以与
git mergetool
相同的方式显示它,@user17925解决方案中的参数转换为:
-c“wincmd J”-g-d-O%合并%base%mine%他们的