首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vimdiff合并更改

使用vimdiff合并更改
EN

Stack Overflow用户
提问于 2015-01-08 03:53:09
回答 2查看 72.7K关注 0票数 73

在我的例子中,我有两个文件file1和file2。使用vimdiff,我想按以下方式合并这些更改:

  1. 在第一个差异,位置线从file1以上线从file2。这意味着Listing 2在file2中和List 2中的区别应该是List 2,而在合并的文件中则应该是Listing 2
  2. 在另一个变化中反转情况。

快照如下所示。

我们如何使用vimdiff实现这一点?

EN

回答 2

Stack Overflow用户

发布于 2015-01-08 07:38:33

您可以在窗口之间切换,复制和粘贴以解决差异,就像@David .在他的回答中所建议的那样,但是Vim还提供了专门的:diffput:diffget命令来简化这个问题。使用这些命令(或相应的普通模式dodp命令),您不必在窗口之间切换,范围默认为当前更改。

如果您需要添加而不是覆盖其他缓冲区的差异(这在典型的双向差异中是一个非常不寻常的情况),您仍然必须将原始行抽取出来,并将它们放在:diffget之后。

在一个地方完成之后,您可以使用]c[c命令跳转到下一个差异。

票数 18
EN

Stack Overflow用户

发布于 2021-04-15 12:31:32

我使用以下映射来处理三方合并(当conflictstyle=diff3时)

代码语言:javascript
复制
  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
  endfunction
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27832630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档