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