I've started using vimdiff today, and wanted to do some of the things that I've taken for granted on Windows based diff editors (like expand/collapse a diff section, have full file expansion/only diffs with 3 context lines above or below, etc.). I currently know only the following commands :
Keyboard Shortcuts:
do - Get changes from other window into the current window.
dp - Put the changes from current window into the other window.
]c - Jump to the next change.
[c - Jump to the previous change.
CTRL+W, w - Switch to the other split window (CTRL+W, CTRL+W does the same thing, in case you let go of the CTRL key a bit later)
Could someone point me to the right direction so I could replicate similar features?
It would be nice if I could expand/collapse lines around the diffs, for example.
This question is related to
linux
vim
diff
command-line-interface
vimdiff
Aside from the ones you mention, I only use frequently when diffing the following:
:diffupdate
:diffu
-> recalculate the diff, useful when after making several changes vim's isn't showing minimal changes anymore. Note that it only works if the files have been modified inside vimdiff. Otherwise, use:
:e
to reload the files if they have been modified outside of vimdiff. :set noscrollbind
-> temporarily disable simultaneous scrolling on both buffers, reenable by :set scrollbind
and scrolling.Most of what you asked for is folding: vim user manual's chapter on folding. Outside of diffs I sometime use:
zo
-> open fold.zc
-> close fold.But you'll probably be better served by:
zr
-> reducing folding level.zm
-> one more folding level, please.or even:
zR
-> Reduce completely the folding, I said!.zM
-> fold Most!.The other thing you asked for, use n lines of folding, can be found at the vim reference manual section on options, via the section on diff:
set diffopt=<TAB>
, then update or add context:n
.You should also take a look at the user manual section on diff.
Actually if you do Ctrl+W W
, you won't need to add that extra Ctrl
. Does the same thing.
ctrl + w, w as mentioned can be used for navigating from pane to pane.
Now you can select a particular change alone and paste it to the other pane as follows.Here I am giving an eg as if I wanted to change my piece of code from pane 1 to pane 2 and currently my cursor is in pane1
Use Shift-v to highlight a line and use up or down keys to select the piece of code you require and continue from step 3 written below to paste your changes in the other pane.
Use visual mode and then change it
1 click 'v' this will take you to visual mode 2 use up or down key to select your required code 3 click on ,Esc' escape key 4 Now use 'yy' to copy or 'dd' to cut the change 5 do 'ctrl + w, w' to navigate to pane2 6 click 'p' to paste your change where you require
set vimdiff to ignore case
Having started vim diff with
gvim -d main.sql backup.sql &
I find that annoyingly one file has MySQL keywords in lowercase the other uppercase showing differences on practically every other line
:set diffopt+=icase
this updates the screen dynamically & you can just as easily switch it off again
Source: Stackoverflow.com