Lee Byron

tilvim time travel

To undo and redo in Vim, use u and ⌃⇧R (“CTRL-R” in Vim lingo, note the capital R) respectively. This works as you’d expect, but there are a few shortcomings:

Fortunately Vim has a very powerful undo feature called “undo trees” which you might understand as similar to git branching. Undoing and then starting a new change is just a separate branch in the undo tree. There are a number of ways of interacting with the undo tree1, but a comparatively simple one is undo time travel.

To go to an earlier state, use g-, to go to a later state, g+. If you mess up with undo and redo, you can usually just try g- repeatedly until you’re back where you want to be. While this is not quite as easy to remember as u for undo, I find “go earlier” and “go later” as pretty great mnemonics and really appreciate the symmetry.

These are shorthand for the :earlier and :later commands, which are quite flexible. As an example, :earlier 5m will go to whatever version you were looking at five minutes ago. Amazing.

  1. Another example of interacting with the undo tree is :undolist, which shows all leafs in the tree. To learn more about undo, try :help undo-redo.