annotate runtime/doc/undo.txt @ 2231:aa6412cab544 vim73

Various improvements to undo file code to make it more robust.
author Bram Moolenaar <bram@vim.org>
date Sat, 29 May 2010 20:33:07 +0200
parents 81b83a19e127
children dc2e5ec0500d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2154
7c8c7c95a865 First step in the Vim 7.3 branch. Changed version numbers.
Bram Moolenaar <bram@zimbu.org>
parents: 2033
diff changeset
1 *undo.txt* For Vim version 7.3a. Last change: 2009 Apr 12
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 VIM REFERENCE MANUAL by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 Undo and redo *undo-redo*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 The basics are explained in section |02.5| of the user manual.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 1. Undo and redo commands |undo-commands|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 2. Two ways of undo |undo-two-ways|
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
13 3. Undo blocks |undo-blocks|
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
14 4. Undo branches |undo-branches|
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
15 5. Undo persistence |undo-persistence|
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
16 6. Remarks about undo |undo-remarks|
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 1. Undo and redo commands *undo-commands*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 <Undo> or *undo* *<Undo>* *u*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 u Undo [count] changes. {Vi: only one level}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 *:u* *:un* *:undo*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 :u[ndo] Undo one change. {Vi: only one level}
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
26 *E830*
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
27 :u[ndo] {N} Jump to after change number {N}. See |undo-branches|
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
28 for the meaning of {N}. {not in Vi}
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
29
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 *CTRL-R*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 CTRL-R Redo [count] changes which were undone. {Vi: redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 screen}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 *:red* *:redo* *redo*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 :red[o] Redo one change which was undone. {Vi: no redo}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 *U*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 U Undo all latest changes on one line. {Vi: while not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 moved off of it}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 The last changes are remembered. You can use the undo and redo commands above
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 to revert the text to how it was before each change. You can also apply the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 changes again, getting back the text before the undo.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 The "U" command is treated by undo/redo just like any other command. Thus a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 "u" command undoes a "U" command and a 'CTRL-R' command redoes it again. When
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 mixing "U", "u" and 'CTRL-R' you will notice that the "U" command will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 restore the situation of a line to before the previous "U" command. This may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 be confusing. Try it out to get used to it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 The "U" command will always mark the buffer as changed. When "U" changes the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 buffer back to how it was without changes, it is still considered changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 Use "u" to undo changes until the buffer becomes unchanged.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 2. Two ways of undo *undo-two-ways*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 How undo and redo commands work depends on the 'u' flag in 'cpoptions'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 There is the Vim way ('u' excluded) and the vi-compatible way ('u' included).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 In the Vim way, "uu" undoes two changes. In the Vi-compatible way, "uu" does
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 nothing (undoes an undo).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 'u' excluded, the Vim way:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 You can go back in time with the undo command. You can then go forward again
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 with the redo command. If you make a new change after the undo command,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 the redo will not be possible anymore.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 'u' included, the Vi-compatible way:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 The undo command undoes the previous change, and also the previous undo command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 The redo command repeats the previous undo command. It does NOT repeat a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 change command, use "." for that.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 Examples Vim way Vi-compatible way ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 "uu" two times undo no-op
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 "u CTRL-R" no-op two times undo
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 Rationale: Nvi uses the "." command instead of CTRL-R. Unfortunately, this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 is not Vi compatible. For example "dwdwu." in Vi deletes two
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 words, in Nvi it does nothing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 ==============================================================================
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
81 3. Undo blocks *undo-blocks*
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
82
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
83 One undo command normally undoes a typed command, no matter how many changes
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
84 that command makes. This sequence of undo-able changes forms an undo block.
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
85 Thus if the typed key(s) call a function, all the commands in the function are
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
86 undone together.
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
87
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
88 If you want to write a function or script that doesn't create a new undoable
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
89 change but joins in with the previous change use this command:
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
90
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 834
diff changeset
91 *:undoj* *:undojoin* *E790*
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
92 :undoj[oin] Join further changes with the previous undo block.
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
93 Warning: Use with care, it may prevent the user from
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 834
diff changeset
94 properly undoing changes. Don't use this after undo
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 834
diff changeset
95 or redo.
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
96 {not in Vi}
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
97
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
98 This is most useful when you need to prompt the user halfway a change. For
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
99 example in a function that calls |getchar()|. Do make sure that there was a
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
100 related change before this that you must join with.
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
101
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
102 This doesn't work by itself, because the next key press will start a new
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
103 change again. But you can do something like this: >
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
104
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
105 :undojoin | delete
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
106
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
107 After this an "u" command will undo the delete command and the previous
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
108 change.
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
109
2033
de5a43c5eedc Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents: 1702
diff changeset
110 To do the opposite, break a change into two undo blocks, in Insert mode use
de5a43c5eedc Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents: 1702
diff changeset
111 CTRL-G u. This is useful if you want an insert command to be undoable in
de5a43c5eedc Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents: 1702
diff changeset
112 parts. E.g., for each sentence. |i_CTRL-G_u|
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
113 Setting the value of 'undolevels' also breaks undo. Even when the new value
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
114 is equal to the old value.
2033
de5a43c5eedc Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents: 1702
diff changeset
115
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 7
diff changeset
116 ==============================================================================
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 825
diff changeset
117 4. Undo branches *undo-branches* *undo-tree*
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
118
793
8c0b00d50acf updated for version 7.0231
vimboss
parents: 772
diff changeset
119 Above we only discussed one line of undo/redo. But it is also possible to
8c0b00d50acf updated for version 7.0231
vimboss
parents: 772
diff changeset
120 branch off. This happens when you undo a few changes and then make a new
8c0b00d50acf updated for version 7.0231
vimboss
parents: 772
diff changeset
121 change. The undone changes become a branch. You can go to that branch with
8c0b00d50acf updated for version 7.0231
vimboss
parents: 772
diff changeset
122 the following commands.
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
123
799
6beb2c667935 updated for version 7.0b
vimboss
parents: 793
diff changeset
124 This is explained in the user manual: |usr_32.txt|.
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
125
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
126 *:undol* *:undolist*
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
127 :undol[ist] List the leafs in the tree of changes. Example:
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
128 number changes time ~
856
8cd729851562 updated for version 7.0g
vimboss
parents: 842
diff changeset
129 4 10 10:34:11
8cd729851562 updated for version 7.0g
vimboss
parents: 842
diff changeset
130 18 4 11:01:46
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
131
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
132 The "number" column is the change number. This number
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
133 continuously increases and can be used to identify a
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
134 specific undo-able change, see |:undo|.
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
135 The "changes" column is the number of changes to this
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
136 leaf from the root of the tree.
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
137 The "time" column is the time this change was made.
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
138
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
139 *g-*
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
140 g- Go to older text state. With a count repeat that many
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
141 times. {not in Vi}
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
142 *:ea* *:earlier*
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
143 :earlier {count} Go to older text state {count} times.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
144 :earlier {N}s Go to older text state about {N} seconds before.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
145 :earlier {N}m Go to older text state about {N} minutes before.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
146 :earlier {N}h Go to older text state about {N} hours before.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
147
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
148 *g+*
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
149 g+ Go to newer text state. With a count repeat that many
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
150 times. {not in Vi}
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
151 *:lat* *:later*
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
152 :later {count} Go to newer text state {count} times.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
153 :later {N}s Go to newer text state about {N} seconds later.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
154 :later {N}m Go to newer text state about {N} minutes later.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
155 :later {N}h Go to newer text state about {N} hours later.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
156
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 758
diff changeset
157
758
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
158 Note that text states will become unreachable when undo information is cleared
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
159 for 'undolevels'.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
160
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
161 Don't be surprised when moving through time shows multiple changes to take
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
162 place at a time. This happens when moving through the undo tree and then
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
163 making a new change.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
164
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
165 EXAMPLE
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
166
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
167 Start with this text:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
168 one two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
169
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
170 Delete the first word by pressing "x" three times:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
171 ne two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
172 e two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
173 two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
174
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
175 Now undo that by pressing "u" three times:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
176 e two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
177 ne two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
178 one two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
179
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
180 Delete the second word by pressing "x" three times:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
181 one wo three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
182 one o three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
183 one three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
184
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
185 Now undo that by using "g-" three times:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
186 one o three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
187 one wo three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
188 two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
189
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
190 You are now back in the first undo branch, after deleting "one". Repeating
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
191 "g-" will now bring you back to the original text:
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
192 e two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
193 ne two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
194 one two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
195
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
196 Jump to the last change with ":later 1h":
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
197 one three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
198
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
199 And back to the start again with ":earlier 1h":
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
200 one two three ~
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
201
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
202
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
203 Note that using "u" and CTRL-R will not get you to all possible text states
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
204 while repeating "g-" and "g+" does.
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
205
d591d4ceeaee updated for version 7.0224
vimboss
parents: 697
diff changeset
206 ==============================================================================
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
207 5. Undo persistence *undo-persistence* *persistent-undo*
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
208
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
209 When unloading a buffer Vim normally destroys the tree of undos created for
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
210 that buffer. By setting the 'undofile' option, Vim will automatically save
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
211 your undo history when you write a file and restore undo history when you edit
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
212 the file again.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
213
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
214 The 'undofile' option is checked after writing a file, before the BufWritePost
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
215 autocommands. If you want to control what files to write undo information
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
216 for, you can use a BufWritePre autocommand: >
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
217 au BufWritePre /tmp/* setlocal noundofile
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
218
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
219 Vim saves undo trees in a separate undo file, one for each edited file, using
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
220 a simple scheme that maps filesystem paths directly to undo files. Vim will
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
221 detect if an undo file is no longer synchronized with the file it was written
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
222 for (with a hash of the file contents) and ignore it when the file was changed
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
223 after the undo file was written, to prevent corruption.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
224
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
225 Undo files are normally saved in the same directory as the file. This can be
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
226 changed with the 'undodir' option.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
227
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
228 You can also save and restore undo histories by using ":wundo" and ":rundo"
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
229 respectively:
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
230 *:wundo* *:rundo*
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
231 :wundo[!] {file}
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
232 Write undo history to {file}.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
233 When {file} exists and it does not look like an undo file
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
234 (the magic number at the start of the file is wrong), then
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
235 this fails, unless the ! was added.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
236 If it exists and does look like an undo file it is
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
237 overwritten.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
238 {not in Vi}
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
239
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
240 :rundo {file} Read undo history from {file}.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
241 {not in Vi}
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
242
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
243 You can use these in autocommands to explicitly specify the name of the
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
244 history file. E.g.: >
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
245
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
246 au BufReadPost * rundo %:h/UNDO/%:t
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
247 au BufWritePost * wundo %:h/UNDO/%:t
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
248
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
249 You should keep 'undofile' off, otherwise you end up with two undo files for
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
250 every write.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
251 Note: I did not verify this always works!
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
252
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
253 Note that while reading/writing files and 'undofile' is set most errors will
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
254 be silent, unless 'verbose' is set. With :wundo and :rundo you will get more
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
255 error messages, e.g., when the file cannot be read or written.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
256
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
257 NOTE: undo files are never deleted by Vim. You need to delete them yourself.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
258
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
259 Reading an existing undo file may fail for several reasons:
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
260 *E822* It cannot be opened, because the file permissions don't allow it.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
261 *E823* The magic number at the start of the file doesn't match. This usually
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
262 means it is not an undo file.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
263 *E824* The version number of the undo file indicates that it's written by a
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
264 newer version of Vim. You need that newer version to open it. Don't
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
265 write the buffer if you want to keep the undo info in the file.
2215
cccb71c2c5c1 Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
266 "File contents changed, cannot use undo info"
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
267 The file text differs from when the undo file was written. This means
2215
cccb71c2c5c1 Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
268 the undo file cannot be used, it would corrupt the text. This also
cccb71c2c5c1 Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
269 happens when 'encoding' differs from when the undo file was written.
2231
aa6412cab544 Various improvements to undo file code to make it more robust.
Bram Moolenaar <bram@vim.org>
parents: 2223
diff changeset
270 *E825* The undo file does not contain valid contents and cannot be used.
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
271
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
272 Writing an undo file may fail for these reasons:
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
273 *E828* The file to be written cannot be created. Perhaps you do not have
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
274 write permissions in the directory.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
275 "Will not overwrite with undo file, cannot read"
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
276 A file exists with the name of the undo file to be written, but it
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
277 cannot be read. You may want to delete this file or rename it.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
278 "Will not overwrite, this is not an undo file"
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
279 A file exists with the name of the undo file to be written, but it
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
280 does not start with the right magic number. You may want to delete
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
281 this file or rename it.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
282 *E829* An error occurred while writing the undo file. You may want to try
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
283 again.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
284
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
285 ==============================================================================
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
286 6. Remarks about undo *undo-remarks*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 The number of changes that are remembered is set with the 'undolevels' option.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 If it is zero, the Vi-compatible way is always used. If it is negative no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 undo is possible. Use this if you are running out of memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 Marks for the buffer ('a to 'z) are also saved and restored, together with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 text. {Vi does this a little bit different}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 When all changes have been undone, the buffer is not considered to be changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 It is then possible to exit Vim with ":q" instead of ":q!" {not in Vi}. Note
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 that this is relative to the last write of the file. Typing "u" after ":w"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 actually changes the buffer, compared to what was written, so the buffer is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 considered changed then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 When manual |folding| is being used, the folds are not saved and restored.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 Only changes completely within a fold will keep the fold as it was, because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 the first and last line of the fold don't change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 The numbered registers can also be used for undoing deletes. Each time you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 delete text, it is put into register "1. The contents of register "1 are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 shifted to "2, etc. The contents of register "9 are lost. You can now get
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 back the most recent deleted text with the put command: '"1P'. (also, if the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 deleted text was the result of the last delete or copy operation, 'P' or 'p'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 also works as this puts the contents of the unnamed register). You can get
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 back the text of three deletes ago with '"3P'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 *redo-register*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 If you want to get back more than one part of deleted text, you can use a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 special feature of the repeat command ".". It will increase the number of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 register used. So if you first do ""1P", the following "." will result in a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 '"2P'. Repeating this will result in all numbered registers being inserted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 Example: If you deleted text with 'dd....' it can be restored with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 '"1P....'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 If you don't know in which register the deleted text is, you can use the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 :display command. An alternative is to try the first register with '"1P', and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 if it is not what you want do 'u.'. This will remove the contents of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 first put, and repeat the put command for the second register. Repeat the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 'u.' until you got what you want.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 vim:tw=78:ts=8:ft=help:norl: