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