解决vim中的合并冲突

时间:2018-08-11 01:47:26

标签: vim visual-studio-code

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

image source google

我们可以轻松选择currentincomingboth的更改。 但是如果使用vim,我们必须手动进行操作,这会在文件很大时出现问题... vim?

中是否有任何不错的方法

2 个答案:

答案 0 :(得分:2)

有些问题在您的问题中不清楚:

  1. 您如何“选择当前,传入或两者”?鼠标单击?
  2. 您认为Vim有什么问题吗?

无论如何,这是基本合并冲突解决方法的解决方案:

$ git mergetool --tool vimdiff

Three-way merge in Vim

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

用法非常简单:

  • 要跳至下一个更改(不是“冲突”),请按]c,然后按[c进行上一个更改,
  • 要选择本地更改,请执行:diffget LOCAL(或简称为:diffg L
  • 要选择基本更改,请执行:diffg B
  • 要选择“远程更改”,请执行:diffg R
  • 要选择两个更改,请删除冲突标记,因为没有内置命令。

如果您仍然觉得它太“手工”,则可以简单地进行自己的映射:

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

答案 1 :(得分:0)

我的ConflictMotions plugin提出了下一个冲突[标记](]x]=),相应的文本对象以及一个:ConflictTake命令的动议通过选择某些部分([none this ours base theirs both all range query])解决冲突。