解决vim中的合并冲突

Shr*_*ain 4 vim visual-studio-code

vs-code如图所示,它具有解决合并冲突的惊人功能。

图片来源谷歌

我们可以轻松选择currentincoming或者both改变..但在情况下vim,我们必须做手工成为问题时,文件大小是大......有没有很好的方式来做到这一点vim?

rom*_*inl 10

您的问题中有几件事不清楚:

  1. 您如何“选择当前,传入或两者”?鼠标点击?
  2. 你发现 Vim 有什么问题,究竟是什么?

无论如何,以下是基本合并冲突解决方案的处理方式:

$ git mergetool --tool vimdiff
Run Code Online (Sandbox Code Playgroud)

Vim 中的三路合并

  • 左上角的窗口称为“LOCAL”,显示文件在您要合并到的分支中。这就是屏​​幕截图中所谓的“当前”。
  • 名为“REMOTE”的右上角窗口显示文件,因为它位于您正在合并的分支中。这就是屏​​幕截图中所谓的“传入”。
  • 顶部中间的窗口称为“BASE”,显示文件在进行上述任何更改之前的状态。我在你的截图中看不到它。
  • 底部窗口显示当前状态的文件,带有冲突标记。这相当于您当前的视图。除非您不必编辑冲突标记。

用法非常简单:

  • 要跳转到下一个更改(不是“冲突”),请按]c[c对于上一个更改,
  • 选择 LOCAL 更改,执行:diffget LOCAL(或:diffg L简称),
  • 选择BASE改变,做:diffg B
  • 选择远程更改,执行:diffg R
  • 要选择两个更改,请删除冲突标记,因为没有内置命令。

如果您仍然觉得它太“手动”,您可以简单地制作自己的映射:

" choose LOCAL
nnoremap <Left> :diffget LOCAL<Bar>diffupdate<CR>
" choose REMOTE
nnoremap <Right> :diffget REMOTE<Bar>diffupdate<CR>
" choose BASE
nnoremap <Up> :diffget BASE<Bar>diffupdate<CR>
" choose both
nnoremap <Down> :/>>>>>>>/;?<<<<<<<?,.g/^\(<<<<<<<\\|=======\\|>>>>>>>\)/d<CR>
Run Code Online (Sandbox Code Playgroud)