在我的例子中,我有两个文件file1和file2。使用vimdiff,我想按以下方式合并这些更改:
Listing 2在file2中和List 2中的区别应该是List 2,而在合并的文件中则应该是Listing 2。快照如下所示。

我们如何使用vimdiff实现这一点?
发布于 2015-01-08 07:38:33
您可以在窗口之间切换,复制和粘贴以解决差异,就像@David .在他的回答中所建议的那样,但是Vim还提供了专门的:diffput和:diffget命令来简化这个问题。使用这些命令(或相应的普通模式do和dp命令),您不必在窗口之间切换,范围默认为当前更改。
如果您需要添加而不是覆盖其他缓冲区的差异(这在典型的双向差异中是一个非常不寻常的情况),您仍然必须将原始行抽取出来,并将它们放在:diffget之后。
在一个地方完成之后,您可以使用]c,[c命令跳转到下一个差异。
发布于 2021-04-15 12:31:32
我使用以下映射来处理三方合并(当conflictstyle=diff3时)
nnoremap g1 :<C-U>call MergeKeepLeft()<CR>
nnoremap g2 :<C-U>call MergeKeepBoth()<CR>
nnoremap g3 :<C-U>call MergeKeepRight()<CR>
function! MergeKeepLeft()
let lastsearch = @/
let @/ = '<<<<<<<'
execute "normal! ?\<cr>dd"
let @/ = '|||||||'
execute "normal! /\<cr>V"
let @/ = '>>>>>>>'
execute "normal! /\<cr>d"
let @/ = lastsearch
endfunction
function! MergeKeepBoth()
let lastsearch = @/
let @/ = '<<<<<<<'
execute "normal! ?\<cr>dd"
let @/ = '|||||||'
execute "normal! /\<cr>V"
let @/ = '======='
execute "normal! /\<cr>d"
let @/ = '>>>>>>>'
execute "normal! /\<cr>dd"
let @/ = lastsearch
endfunction
function! MergeKeepRight()
let lastsearch = @/
let @/ = '<<<<<<<'
execute "normal! ?\<cr>V"
let @/ = '======='
execute "normal! /\<cr>d"
let @/ = '>>>>>>>'
execute "normal! /\<cr>dd"
let @/ = lastsearch
endfunctionhttps://stackoverflow.com/questions/27832630
复制相似问题