Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么git mergetool在vimdiff中打开4个窗口?(我希望是3个)_Git_Vim_Vimdiff - Fatal编程技术网

为什么git mergetool在vimdiff中打开4个窗口?(我希望是3个)

为什么git mergetool在vimdiff中打开4个窗口?(我希望是3个),git,vim,vimdiff,Git,Vim,Vimdiff,当我遇到冲突时,我尝试使用git mergetool来解决它。我键入: >git mergetool -t vimdiff 它以4路而不是3路打开vimdiff。我在vimdiff中的拆分窗口如下所示: :ls 1 #a "Gemfile.lock" line 1 2 %a "Gemfile.lock.LOCAL.4828.lock" line 1 3 a "Gemfile.lock.BASE.4828.lock" line 0

当我遇到冲突时,我尝试使用
git mergetool
来解决它。我键入:

>git mergetool -t vimdiff
它以4路而不是3路打开
vimdiff
。我在vimdiff中的拆分窗口如下所示:

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

它们是什么?我想要一个3路差异:目标文件,合并文件和工作文件。我应该如何配置git或vimdiff?

作为替代方案,您考虑过使用吗

我不会对你撒谎;逃犯维姆很可能是最好的 Git包装器的所有时间

有一个很棒的vimcast,由Drew Neil制作。这是《逃犯》系列的一部分

该网站是了解vim更多信息的好地方

要在合并时使用逃犯工具,可以使用以下工具

git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
注意:您可能需要将
vim
更改为
mvim
gvim


“逃犯”不仅仅是一个合并工具脚本,还提供了很多功能,因此请务必阅读文档和/或查看Vimcast。

我支持“逃犯”的建议

你也可以试试。它是一个Vim插件,旨在充当git或mercurial mergetool的替代品。它允许您轻松地混合各种冲突视图。它也非常快速、直观,在使合并更直观方面做得很好。这是一个例子

您列出的文件包括:

  • 包含冲突的本地文件
  • 要合并到的分支中的文件
  • 从中合并的分支中的文件
  • 文件在两个分支节点中的原样。这个文件对于了解发生了什么非常有用
    希望这能有所帮助。

    稍微修改一下以下命令:

    • “合并”将是您的工作副本
    • “Local”您尝试进行更改的分支中的文件
    • “远程”您试图合并的分支中的文件
    然后执行命令:
    gitmergetool


    注意:我也使用了Sessional,并强烈推荐它。

    经过大量研究,发布了带有vimdiff且只有3个窗口的mergetool,我提出了此配置,允许我选择何时需要3个窗口或默认的4个窗口:

    git config --global merge.tool vimdiff
    git config --global alias.mt mergetool
    
    git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
    git config --global alias.m3 'mergetool -t merge3'
    
    现在,您可以启动3个窗口,只需键入:

    git m3
    
    默认设置(4个窗口)仍将在以下情况下正常工作:

    git mt
    
    另外,您可能希望在
    ~/.vimrc
    /etc/vim/vimrc

     " shortcuts to vimdiff
     let mapleader=','
     let g:mapleader=','
    
     if &diff
        map <leader>1 :diffget LOCAL<CR>
        map <leader>2 :diffget BASE<CR>
        map <leader>3 :diffget REMOTE<CR>
     endif
    

    我希望这对你(以及那些到这里的人)有所帮助。

    注意:虽然你只能使用3个窗口,如中所述
    vim-d-c“wincmd l”$LOCAL“$MERGED”$REMOTE“
    ),
    git 2.8增强了4-windows模式(2016年3月)

    参见(2016年1月29日)作者。
    (于2016年2月17日被合并)

    git mergetool
    ”的
    vimdiff
    后端已调整为 缓冲区的编号顺序应与 大多数人从左到右阅读,然后自上而下分配 缓冲区1 2 3 4“精神上”到本地基远程合并基于窗口 按那个命令

    在内部,git现在将使用:

    "$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
                "$LOCAL" "$BASE" "$REMOTE" "$MERGED"
    
    而不是:

    "$merge_tool_path" -f -d -c 'wincmd J' \
            "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
    
    mergetool
    :在三向差异中重新排序vim/gvim缓冲区 当调用默认(g)
    vimdiff
    triple-waymerge时,合并的文件是 作为第一个缓冲区加载,但作为第四个窗口移动到底部。
    这会导致在车窗上操作的vim命令之间断开 位置(例如CTRL-W_W)和在缓冲区索引上操作的位置(例如do/dp)

    此更改会重新排序缓冲区,使其索引与windows相同 将光标保留为合并结果的默认值作为底部窗口。


    对于Git2.31(2021年第1季度),mergetools只考虑3个面板,而不是4个

    参见作者(2021年2月13日)
    (于2021年2月25日合并)

    :添加vimdiff1合并工具变量 签字人:赛斯大厦
    测试人:David Aguilar

    这又增加了另一个vimdiff/gvimdiff变体,并将冲突表示为“本地”和“远程”之间的双向差异。
    “合并”未打开,这与正常情况不同,因此在启动时,用法文本作为Vim消息进行回显,指示用户如何继续和如何中止

    Vimdiff非常适合双向差异,因此这是一种更简单、更精简的冲突解决方案。
    例如:仅使用语法突出显示很难在两个以上的文件之间传递差异;当仅使用两个缓冲区时,用于在缓冲区之间获取和放置更改的默认vimdiff命令不需要用户手动指定源缓冲区或目标缓冲区

    与其他直接比较“本地”和“远程”的合并工具一样,此工具与新的
    mergetool.hideResolved
    设置搭配使用时将受益匪浅


    我可以将它与git mergetool一起使用吗??它告诉我打开冲突文件并调用
    :Gdiff
    @Lai-Yu-Hsuan:我已经编辑了我的帖子,包括一些mergetool-config选项。完美地解决了我的问题。也许这就省去了对我来说BeyondCompare的需要,谢谢这三个现在被称为splice.Vim似乎没有人向您指出这一点:如果您还想显示合并结果窗口,您需要四个窗口来执行三向差异。换句话说,您可以在基本、本地和远程(3个窗口)之间获得差异,并可以编辑结果合并(第4个窗口)。
    "$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
                "$LOCAL" "$BASE" "$REMOTE" "$MERGED"
    
    "$merge_tool_path" -f -d -c 'wincmd J' \
            "$MERGED" "$LOCAL" "$BASE" "$REMOTE"