Search code examples
linuxvimdiffvimdiff

Vimdiff: How to put all changes inside a particular function from one file to another?


In Vimdiff, I know I can use "do" or "dp" to move changes from one file to the other...but these are for individual changes. If I have to undo all changes inside a specific scope/selection (say undo all changes to a particular function, but leave the rest untouched), is there a way to do it in one go ?


Solution

  • You can use a visual selection and the ex command :diffget/:diffput

    So, for example to get the changes for just the current insides of a code block ( { ... } )

    Vi}:diffget<Enter>
    

    To put the changes for the two enclosing levels including the lines with the brackets:

    V2a}:diffput<Enter>
    

    Note that since these are ex commands the motions are linewise. Of course, you could use any range, so you can repeat the visual range, or use markers

    :'a,'bdiffput
    

    etc. Use your imagination, this is vim :)