blob: 2c8c60c9aac7294cc2ce2d0219d07960bf876815 [file] [log] [blame]
Bram Moolenaarfff2bee2010-05-15 13:56:02 +02001*undo.txt* For Vim version 7.3a. Last change: 2009 Apr 12
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Undo and redo *undo-redo*
8
9The basics are explained in section |02.5| of the user manual.
10
111. Undo and redo commands |undo-commands|
122. Two ways of undo |undo-two-ways|
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000133. Undo blocks |undo-blocks|
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000144. Undo branches |undo-branches|
155. Remarks about undo |undo-remarks|
Bram Moolenaar071d4272004-06-13 20:20:40 +000016
17==============================================================================
181. Undo and redo commands *undo-commands*
19
20<Undo> or *undo* *<Undo>* *u*
21u Undo [count] changes. {Vi: only one level}
22
23 *:u* *:un* *:undo*
24:u[ndo] Undo one change. {Vi: only one level}
25
Bram Moolenaarefd2bf12006-03-16 21:41:35 +000026:u[ndo] {N} Jump to after change number {N}. See |undo-branches|
27 for the meaning of {N}. {not in Vi}
28
Bram Moolenaar071d4272004-06-13 20:20:40 +000029 *CTRL-R*
30CTRL-R Redo [count] changes which were undone. {Vi: redraw
31 screen}
32
33 *:red* *:redo* *redo*
34:red[o] Redo one change which was undone. {Vi: no redo}
35
36 *U*
37U Undo all latest changes on one line. {Vi: while not
38 moved off of it}
39
40The last changes are remembered. You can use the undo and redo commands above
41to revert the text to how it was before each change. You can also apply the
42changes again, getting back the text before the undo.
43
44The "U" command is treated by undo/redo just like any other command. Thus a
45"u" command undoes a "U" command and a 'CTRL-R' command redoes it again. When
46mixing "U", "u" and 'CTRL-R' you will notice that the "U" command will
47restore the situation of a line to before the previous "U" command. This may
48be confusing. Try it out to get used to it.
49The "U" command will always mark the buffer as changed. When "U" changes the
50buffer back to how it was without changes, it is still considered changed.
51Use "u" to undo changes until the buffer becomes unchanged.
52
53==============================================================================
542. Two ways of undo *undo-two-ways*
55
56How undo and redo commands work depends on the 'u' flag in 'cpoptions'.
57There is the Vim way ('u' excluded) and the vi-compatible way ('u' included).
58In the Vim way, "uu" undoes two changes. In the Vi-compatible way, "uu" does
59nothing (undoes an undo).
60
61'u' excluded, the Vim way:
62You can go back in time with the undo command. You can then go forward again
63with the redo command. If you make a new change after the undo command,
64the redo will not be possible anymore.
65
66'u' included, the Vi-compatible way:
67The undo command undoes the previous change, and also the previous undo command.
68The redo command repeats the previous undo command. It does NOT repeat a
69change command, use "." for that.
70
71Examples Vim way Vi-compatible way ~
72"uu" two times undo no-op
73"u CTRL-R" no-op two times undo
74
75Rationale: Nvi uses the "." command instead of CTRL-R. Unfortunately, this
76 is not Vi compatible. For example "dwdwu." in Vi deletes two
77 words, in Nvi it does nothing.
78
79==============================================================================
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000803. Undo blocks *undo-blocks*
81
82One undo command normally undoes a typed command, no matter how many changes
83that command makes. This sequence of undo-able changes forms an undo block.
84Thus if the typed key(s) call a function, all the commands in the function are
85undone together.
86
87If you want to write a function or script that doesn't create a new undoable
88change but joins in with the previous change use this command:
89
Bram Moolenaar57657d82006-04-21 22:12:41 +000090 *:undoj* *:undojoin* *E790*
Bram Moolenaare224ffa2006-03-01 00:01:28 +000091:undoj[oin] Join further changes with the previous undo block.
92 Warning: Use with care, it may prevent the user from
Bram Moolenaar57657d82006-04-21 22:12:41 +000093 properly undoing changes. Don't use this after undo
94 or redo.
Bram Moolenaare224ffa2006-03-01 00:01:28 +000095 {not in Vi}
96
97This is most useful when you need to prompt the user halfway a change. For
98example in a function that calls |getchar()|. Do make sure that there was a
99related change before this that you must join with.
100
101This doesn't work by itself, because the next key press will start a new
102change again. But you can do something like this: >
103
104 :undojoin | delete
105
106After this an "u" command will undo the delete command and the previous
107change.
108
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100109To do the opposite, break a change into two undo blocks, in Insert mode use
110CTRL-G u. This is useful if you want an insert command to be undoable in
111parts. E.g., for each sentence. |i_CTRL-G_u|
112
Bram Moolenaare224ffa2006-03-01 00:01:28 +0000113==============================================================================
Bram Moolenaar18144c82006-04-12 21:52:12 +00001144. Undo branches *undo-branches* *undo-tree*
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000115
Bram Moolenaar76916e62006-03-21 21:23:25 +0000116Above we only discussed one line of undo/redo. But it is also possible to
117branch off. This happens when you undo a few changes and then make a new
118change. The undone changes become a branch. You can go to that branch with
119the following commands.
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000120
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000121This is explained in the user manual: |usr_32.txt|.
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000122
Bram Moolenaarefd2bf12006-03-16 21:41:35 +0000123 *:undol* *:undolist*
124:undol[ist] List the leafs in the tree of changes. Example:
125 number changes time ~
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000126 4 10 10:34:11
127 18 4 11:01:46
Bram Moolenaarefd2bf12006-03-16 21:41:35 +0000128
129 The "number" column is the change number. This number
130 continuously increases and can be used to identify a
131 specific undo-able change, see |:undo|.
132 The "changes" column is the number of changes to this
133 leaf from the root of the tree.
134 The "time" column is the time this change was made.
135
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000136 *g-*
137g- Go to older text state. With a count repeat that many
138 times. {not in Vi}
139 *:ea* *:earlier*
140:earlier {count} Go to older text state {count} times.
141:earlier {N}s Go to older text state about {N} seconds before.
142:earlier {N}m Go to older text state about {N} minutes before.
143:earlier {N}h Go to older text state about {N} hours before.
144
145 *g+*
146g+ Go to newer text state. With a count repeat that many
147 times. {not in Vi}
148 *:lat* *:later*
149:later {count} Go to newer text state {count} times.
150:later {N}s Go to newer text state about {N} seconds later.
151:later {N}m Go to newer text state about {N} minutes later.
152:later {N}h Go to newer text state about {N} hours later.
153
Bram Moolenaarefd2bf12006-03-16 21:41:35 +0000154
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000155Note that text states will become unreachable when undo information is cleared
156for 'undolevels'.
157
158Don't be surprised when moving through time shows multiple changes to take
159place at a time. This happens when moving through the undo tree and then
160making a new change.
161
162EXAMPLE
163
164Start with this text:
165 one two three ~
166
167Delete the first word by pressing "x" three times:
168 ne two three ~
169 e two three ~
170 two three ~
171
172Now undo that by pressing "u" three times:
173 e two three ~
174 ne two three ~
175 one two three ~
176
177Delete the second word by pressing "x" three times:
178 one wo three ~
179 one o three ~
180 one three ~
181
182Now undo that by using "g-" three times:
183 one o three ~
184 one wo three ~
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +0000185 two three ~
186
187You are now back in the first undo branch, after deleting "one". Repeating
188"g-" will now bring you back to the original text:
189 e two three ~
190 ne two three ~
191 one two three ~
192
193Jump to the last change with ":later 1h":
194 one three ~
195
196And back to the start again with ":earlier 1h":
197 one two three ~
198
199
200Note that using "u" and CTRL-R will not get you to all possible text states
201while repeating "g-" and "g+" does.
202
203==============================================================================
2045. Remarks about undo *undo-remarks*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205
206The number of changes that are remembered is set with the 'undolevels' option.
207If it is zero, the Vi-compatible way is always used. If it is negative no
208undo is possible. Use this if you are running out of memory.
209
210Marks for the buffer ('a to 'z) are also saved and restored, together with the
211text. {Vi does this a little bit different}
212
213When all changes have been undone, the buffer is not considered to be changed.
214It is then possible to exit Vim with ":q" instead of ":q!" {not in Vi}. Note
215that this is relative to the last write of the file. Typing "u" after ":w"
216actually changes the buffer, compared to what was written, so the buffer is
217considered changed then.
218
219When manual |folding| is being used, the folds are not saved and restored.
220Only changes completely within a fold will keep the fold as it was, because
221the first and last line of the fold don't change.
222
223The numbered registers can also be used for undoing deletes. Each time you
224delete text, it is put into register "1. The contents of register "1 are
225shifted to "2, etc. The contents of register "9 are lost. You can now get
226back the most recent deleted text with the put command: '"1P'. (also, if the
227deleted text was the result of the last delete or copy operation, 'P' or 'p'
228also works as this puts the contents of the unnamed register). You can get
229back the text of three deletes ago with '"3P'.
230
231 *redo-register*
232If you want to get back more than one part of deleted text, you can use a
233special feature of the repeat command ".". It will increase the number of the
234register used. So if you first do ""1P", the following "." will result in a
235'"2P'. Repeating this will result in all numbered registers being inserted.
236
237Example: If you deleted text with 'dd....' it can be restored with
238 '"1P....'.
239
240If you don't know in which register the deleted text is, you can use the
241:display command. An alternative is to try the first register with '"1P', and
242if it is not what you want do 'u.'. This will remove the contents of the
243first put, and repeat the put command for the second register. Repeat the
244'u.' until you got what you want.
245
246 vim:tw=78:ts=8:ft=help:norl: