title | author | styles | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
How to time-travel using undo branches in Vim |
Saud |
|
________ ++ ________
/VVVVVVVV\++++ /VVVVVVVV\
\VVVVVVVV/++++++\VVVVVVVV/
|VVVVVV|++++++++/VVVVV/'
|VVVVVV|++++++/VVVVV/'
+|VVVVVV|++++/VVVVV/'+
+++|VVVVVV|++/VVVVV/'+++++
+++++|VVVVVV|/VVVVV/'+++++++++
+++|VVVVVVVVVVV/'+++++++++
+|VVVVVVVVV/'+++++++++
|VVVVVVV/'+++++++++
|VVVVV/'+++++++++
|VVV/'+++++++++
'V/' ++++++
++
I'm Saud
OpenShift Developer Console @ Red Hat
Vim user
I've been thinking a lot about undo
- Simple
- Everywhere
- Used all the time
Undoing is like working on a stack
.-------.
_|~~ ~~ |_
=(_|_______|_)=
|:::::::::|
|:::::::[]|
|o=======.|
jgs `"""""""""`
...
^
|
____
/ \
| e3 | ^
\____/ |
^ | Ctrl + Shift + Z
| |
____
/ \
| e2 |
\____/ |
^ | Ctrl + Z
| |
____ v
/ \
| e1 |
\____/
Basic stuff
- Undo with
u
- Redo with
<C-r>
What does a single edit mean?
- Moving insert mode creates a single chunk of edit
- Can be separated with
<C-g>u
- Using counts
:earlier
and:later
Using :earlier x{T}
and :later x{T}
Where {T}
:
s
- Secondsm
- Minutesh
- Hoursd
- Daysf
- Last saves
###Step 1:
Open vim
###Step 2:
:later 8h
###Step 3:
Close vim
(No)
...
Nothing is lost in vim
It's actually a tree!
...
^ ...
| ^
____ |
/ \ |
| e3 | ____
\____/ / \
^ | e4 |
| \____/
____ /
/ \ /
| e2 |--
\____/
^
|
____
/ \
| e1 |
\____/
__________________
| |
| ALWAYS HAS BEEN! |
__________________
_..._ | /
.' '. |/
/ .-""-\
.-| /:. | ,_______^
| \ |:. /.-'-./ _____)
| .-'-;:__.' =/ /_/
.'= *=|==== _.='__/
/ _. | ;
;-.-'| \ |
/ | \ _\ _\
\__/'._;. ==' ==\
\ \ |
/ / /
/-._/-._/
jgs \ `\ \
`-._/._/
Switch to a older branch with g-
.
Switch to an newer branch with g+
.
It acts like regular undo until a split is encountered.
^
| ...
| <> |
| | <>
^ | <> <> <> |
| | | | | <>
<C-R>| | <> <> <> /
| | | | / /
| <> <> - ' /
| | | | /
u | | <> <> - '
| | | /
v | <>- '
| |
| <>
*------------------>
<--- --->
g- g+
- List branches with
:undol[ist]
- Jump with
:u {num}
_____
_.'_____`._
.'.-' 12 `-.`.
/,' 11 1 `.\
// 10 / 2 \\
;; / ::
|| 9 ----O 3 ||
:: ;;
\\ 8 4 //
\`. 7 5 ,'/
'.`-.__6__.-'.'
((-._____.-))
_)) ((_
'--'SSt '--'
Maximum changes: undolevels
Have persistence: undofile
and undodir