Mercurial > vim
annotate runtime/doc/undo.txt @ 32357:5e2f81645b10 v9.0.1510
patch 9.0.1510: misleading variable name for error message
Commit: https://github.com/vim/vim/commit/70e8028a4d63c83f67bc3314d064613e2041e462
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri May 5 22:58:34 2023 +0100
patch 9.0.1510: misleading variable name for error message
Problem: Misleading variable name for error message.
Solution: Change "name" to "number". (closes https://github.com/vim/vim/issues/12345)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 06 May 2023 00:00:03 +0200 |
parents | 67f31c24291b |
children | 94f4a488412e |
rev | line source |
---|---|
29314 | 1 *undo.txt* For Vim version 9.0. Last change: 2022 Jun 02 |
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| |
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 | 17 |
18 ============================================================================== | |
19 1. Undo and redo commands *undo-commands* | |
20 | |
21 <Undo> or *undo* *<Undo>* *u* | |
16610 | 22 u Undo [count] changes. |
7 | 23 |
24 *:u* *:un* *:undo* | |
16610 | 25 :u[ndo] Undo one change. |
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 | 27 :u[ndo] {N} Jump to after change number {N}. See |undo-branches| |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15512
diff
changeset
|
28 for the meaning of {N}. |
772 | 29 |
7 | 30 *CTRL-R* |
16610 | 31 CTRL-R Redo [count] changes which were undone. |
7 | 32 |
33 *:red* *:redo* *redo* | |
16610 | 34 :red[o] Redo one change which was undone. |
7 | 35 |
36 *U* | |
3082 | 37 U Undo all latest changes on one line, the line where |
38 the latest change was made. |U| itself also counts as | |
39 a change, and thus |U| undoes a previous |U|. | |
7 | 40 |
41 The last changes are remembered. You can use the undo and redo commands above | |
42 to revert the text to how it was before each change. You can also apply the | |
43 changes again, getting back the text before the undo. | |
44 | |
45 The "U" command is treated by undo/redo just like any other command. Thus a | |
46 "u" command undoes a "U" command and a 'CTRL-R' command redoes it again. When | |
47 mixing "U", "u" and 'CTRL-R' you will notice that the "U" command will | |
48 restore the situation of a line to before the previous "U" command. This may | |
49 be confusing. Try it out to get used to it. | |
50 The "U" command will always mark the buffer as changed. When "U" changes the | |
51 buffer back to how it was without changes, it is still considered changed. | |
52 Use "u" to undo changes until the buffer becomes unchanged. | |
53 | |
54 ============================================================================== | |
55 2. Two ways of undo *undo-two-ways* | |
56 | |
57 How undo and redo commands work depends on the 'u' flag in 'cpoptions'. | |
5340 | 58 There is the Vim way ('u' excluded) and the Vi-compatible way ('u' included). |
7 | 59 In the Vim way, "uu" undoes two changes. In the Vi-compatible way, "uu" does |
60 nothing (undoes an undo). | |
61 | |
62 'u' excluded, the Vim way: | |
63 You can go back in time with the undo command. You can then go forward again | |
64 with the redo command. If you make a new change after the undo command, | |
65 the redo will not be possible anymore. | |
66 | |
67 'u' included, the Vi-compatible way: | |
23164 | 68 The undo command undoes the previous change, and also the previous undo |
69 command. The redo command repeats the previous undo command. It does NOT | |
70 repeat a change command, use "." for that. | |
7 | 71 |
72 Examples Vim way Vi-compatible way ~ | |
73 "uu" two times undo no-op | |
74 "u CTRL-R" no-op two times undo | |
75 | |
76 Rationale: Nvi uses the "." command instead of CTRL-R. Unfortunately, this | |
77 is not Vi compatible. For example "dwdwu." in Vi deletes two | |
78 words, in Nvi it does nothing. | |
79 | |
80 ============================================================================== | |
697 | 81 3. Undo blocks *undo-blocks* |
82 | |
83 One undo command normally undoes a typed command, no matter how many changes | |
84 that command makes. This sequence of undo-able changes forms an undo block. | |
85 Thus if the typed key(s) call a function, all the commands in the function are | |
86 undone together. | |
87 | |
88 If you want to write a function or script that doesn't create a new undoable | |
89 change but joins in with the previous change use this command: | |
90 | |
839 | 91 *:undoj* *:undojoin* *E790* |
697 | 92 :undoj[oin] Join further changes with the previous undo block. |
93 Warning: Use with care, it may prevent the user from | |
839 | 94 properly undoing changes. Don't use this after undo |
95 or redo. | |
697 | 96 |
5968 | 97 This is most useful when you need to prompt the user halfway through a change. |
98 For example in a function that calls |getchar()|. Do make sure that there was | |
99 a related change before this that you must join with. | |
697 | 100 |
101 This doesn't work by itself, because the next key press will start a new | |
102 change again. But you can do something like this: > | |
103 | |
104 :undojoin | delete | |
105 | |
23164 | 106 After this a "u" command will undo the delete command and the previous |
697 | 107 change. |
29450 | 108 *undo-break* *undo-close-block* |
109 To do the opposite, use a new undo block for the next change, in Insert mode | |
110 use CTRL-G u. This is useful if you want an insert command to be undoable in | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
111 parts. E.g., for each sentence. |i_CTRL-G_u| |
29066 | 112 |
29450 | 113 Setting the value of 'undolevels' also closes the undo block. Even when the |
114 new value is equal to the old value. In |Vim9| script: > | |
29066 | 115 &undolevels = &undolevels |
116 In legacy script: > | |
117 let &undolevels = &undolevels | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
118 |
697 | 119 ============================================================================== |
827 | 120 4. Undo branches *undo-branches* *undo-tree* |
758 | 121 |
793 | 122 Above we only discussed one line of undo/redo. But it is also possible to |
123 branch off. This happens when you undo a few changes and then make a new | |
124 change. The undone changes become a branch. You can go to that branch with | |
125 the following commands. | |
758 | 126 |
799 | 127 This is explained in the user manual: |usr_32.txt|. |
758 | 128 |
772 | 129 *:undol* *:undolist* |
130 :undol[ist] List the leafs in the tree of changes. Example: | |
2681 | 131 number changes when saved ~ |
132 88 88 2010/01/04 14:25:53 | |
133 108 107 08/07 12:47:51 | |
134 136 46 13:33:01 7 | |
135 166 164 3 seconds ago | |
772 | 136 |
137 The "number" column is the change number. This number | |
138 continuously increases and can be used to identify a | |
139 specific undo-able change, see |:undo|. | |
140 The "changes" column is the number of changes to this | |
141 leaf from the root of the tree. | |
2681 | 142 The "when" column is the date and time when this |
143 change was made. The four possible formats are: | |
144 N seconds ago | |
145 HH:MM:SS hour, minute, seconds | |
146 MM/DD HH:MM:SS idem, with month and day | |
147 YYYY/MM/DD HH:MM:SS idem, with year | |
2581 | 148 The "saved" column specifies, if this change was |
149 written to disk and which file write it was. This can | |
2596 | 150 be used with the |:later| and |:earlier| commands. |
2280
941ff1cd317a
Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents:
2251
diff
changeset
|
151 For more details use the |undotree()| function. |
772 | 152 |
758 | 153 *g-* |
154 g- Go to older text state. With a count repeat that many | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15512
diff
changeset
|
155 times. |
758 | 156 *:ea* *:earlier* |
157 :earlier {count} Go to older text state {count} times. | |
158 :earlier {N}s Go to older text state about {N} seconds before. | |
159 :earlier {N}m Go to older text state about {N} minutes before. | |
160 :earlier {N}h Go to older text state about {N} hours before. | |
2281
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
161 :earlier {N}d Go to older text state about {N} days before. |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
162 |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
163 :earlier {N}f Go to older text state {N} file writes before. |
2581 | 164 When changes were made since the last write |
2281
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
165 ":earlier 1f" will revert the text to the state when |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
166 it was written. Otherwise it will go to the write |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
167 before that. |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
168 When at the state of the first file write, or when |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
169 the file was not written, ":earlier 1f" will go to |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
170 before the first change. |
758 | 171 |
172 *g+* | |
173 g+ Go to newer text state. With a count repeat that many | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15512
diff
changeset
|
174 times. |
758 | 175 *:lat* *:later* |
176 :later {count} Go to newer text state {count} times. | |
177 :later {N}s Go to newer text state about {N} seconds later. | |
178 :later {N}m Go to newer text state about {N} minutes later. | |
179 :later {N}h Go to newer text state about {N} hours later. | |
2281
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
180 :later {N}d Go to newer text state about {N} days later. |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
181 |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
182 :later {N}f Go to newer text state {N} file writes later. |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
183 When at the state of the last file write, ":later 1f" |
e41433ea71df
Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents:
2280
diff
changeset
|
184 will go to the newest text state. |
758 | 185 |
772 | 186 |
758 | 187 Note that text states will become unreachable when undo information is cleared |
188 for 'undolevels'. | |
189 | |
190 Don't be surprised when moving through time shows multiple changes to take | |
191 place at a time. This happens when moving through the undo tree and then | |
192 making a new change. | |
193 | |
194 EXAMPLE | |
195 | |
196 Start with this text: | |
197 one two three ~ | |
198 | |
199 Delete the first word by pressing "x" three times: | |
200 ne two three ~ | |
201 e two three ~ | |
202 two three ~ | |
203 | |
204 Now undo that by pressing "u" three times: | |
205 e two three ~ | |
206 ne two three ~ | |
207 one two three ~ | |
208 | |
209 Delete the second word by pressing "x" three times: | |
210 one wo three ~ | |
211 one o three ~ | |
212 one three ~ | |
213 | |
214 Now undo that by using "g-" three times: | |
215 one o three ~ | |
216 one wo three ~ | |
217 two three ~ | |
218 | |
219 You are now back in the first undo branch, after deleting "one". Repeating | |
220 "g-" will now bring you back to the original text: | |
221 e two three ~ | |
222 ne two three ~ | |
223 one two three ~ | |
224 | |
225 Jump to the last change with ":later 1h": | |
226 one three ~ | |
227 | |
228 And back to the start again with ":earlier 1h": | |
229 one two three ~ | |
230 | |
231 | |
232 Note that using "u" and CTRL-R will not get you to all possible text states | |
233 while repeating "g-" and "g+" does. | |
234 | |
235 ============================================================================== | |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
236 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
|
237 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
238 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
|
239 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
|
240 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
|
241 the file again. |
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 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
|
244 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
|
245 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
|
246 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
|
247 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
248 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
|
249 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
|
250 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
|
251 for (with a hash of the file contents) and ignore it when the file was changed |
2625 | 252 after the undo file was written, to prevent corruption. An undo file is also |
5362
ab1508486b12
Update runtime files. Add support for J.
Bram Moolenaar <bram@vim.org>
parents:
5340
diff
changeset
|
253 ignored if its owner differs from the owner of the edited file, except when |
ab1508486b12
Update runtime files. Add support for J.
Bram Moolenaar <bram@vim.org>
parents:
5340
diff
changeset
|
254 the owner of the undo file is the current user. Set 'verbose' to get a |
ab1508486b12
Update runtime files. Add support for J.
Bram Moolenaar <bram@vim.org>
parents:
5340
diff
changeset
|
255 message about that when opening a file. |
2214
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 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
|
258 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
|
259 |
29193 | 260 When the file is encrypted, the text in the undo file is also encrypted. The |
2239
732cb7b31956
Crypt the text in the undo file if the file itself is crypted.
Bram Moolenaar <bram@vim.org>
parents:
2238
diff
changeset
|
261 same key and method is used. |encryption| |
732cb7b31956
Crypt the text in the undo file if the file itself is crypted.
Bram Moolenaar <bram@vim.org>
parents:
2238
diff
changeset
|
262 |
15512 | 263 Note that text properties are not stored in the undo file. You can restore |
264 text properties so long as a buffer is loaded, but you cannot restore them | |
265 from an undo file. Rationale: It would require the associated text property | |
266 types to be defined in exactly the same was as before, which cannot be | |
267 guaranteed. | |
268 | |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
269 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
|
270 respectively: |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
271 *:wundo* *:rundo* |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
272 :wundo[!] {file} |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
273 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
|
274 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
|
275 (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
|
276 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
|
277 If it exists and does look like an undo file it is |
18831 | 278 overwritten. If there is no undo-history, nothing will be |
3312 | 279 written. |
280 Implementation detail: Overwriting happens by first deleting | |
281 the existing file and then creating a new file with the same | |
282 name. So it is not possible to overwrite an existing undofile | |
283 in a write-protected directory. | |
2214
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 :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
|
286 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
287 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
|
288 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
|
289 |
2236
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
290 au BufReadPost * call ReadUndo() |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
291 au BufWritePost * call WriteUndo() |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
292 func ReadUndo() |
27903 | 293 if filereadable(expand('%:h') .. '/UNDO/' .. expand('%:t')) |
2236
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
294 rundo %:h/UNDO/%:t |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
295 endif |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
296 endfunc |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
297 func WriteUndo() |
27903 | 298 let dirname = expand('%:h') .. '/UNDO' |
2236
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
299 if !isdirectory(dirname) |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
300 call mkdir(dirname) |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
301 endif |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
302 wundo %:h/UNDO/%:t |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
303 endfunc |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
304 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
305 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
|
306 every write. |
2236
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
307 |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
308 You can use the |undofile()| function to find out the file name that Vim would |
dc2e5ec0500d
Added the undofile() function. Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2231
diff
changeset
|
309 use. |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
310 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
311 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
|
312 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
|
313 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
|
314 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
315 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
|
316 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
317 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
|
318 *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
|
319 *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
|
320 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
|
321 *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
|
322 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
|
323 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
|
324 "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
|
325 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
|
326 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
|
327 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
|
328 *E825* The undo file does not contain valid contents and cannot be used. |
2251
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
329 *E826* The undo file is encrypted but decryption failed. |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
330 *E827* The undo file is encrypted but this version of Vim does not support |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
331 encryption. Open the file with another Vim. |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
332 *E832* The undo file is encrypted but 'key' is not set, the text file is not |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
333 encrypted. This would happen if the text file was written by Vim |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
334 encrypted at first, and later overwritten by not encrypted text. |
646d34788036
Fix a few compiler warnings. Fix crash with encrypted undo file.
Bram Moolenaar <bram@vim.org>
parents:
2249
diff
changeset
|
335 You probably want to delete this undo file. |
2238
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
336 "Not reading undo file, owner differs" |
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
337 The undo file is owned by someone else than the owner of the text |
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
338 file. For safety the undo file is not used. |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
339 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
340 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
|
341 *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
|
342 write permissions in the directory. |
2238
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
343 "Cannot write undo file in any directory in 'undodir'" |
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
344 None of the directories in 'undodir' can be used. |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
345 "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
|
346 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
|
347 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
|
348 "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
|
349 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
|
350 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
|
351 this file or rename it. |
2581 | 352 "Skipping undo file write, nothing to undo" |
353 There is no undo information to be written, nothing has been changed | |
2238
3d0a7beb0d75
Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents:
2236
diff
changeset
|
354 or 'undolevels' is negative. |
2214
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
355 *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
|
356 again. |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
357 |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
358 ============================================================================== |
f8222d1f9a73
Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
359 6. Remarks about undo *undo-remarks* |
7 | 360 |
361 The number of changes that are remembered is set with the 'undolevels' option. | |
362 If it is zero, the Vi-compatible way is always used. If it is negative no | |
363 undo is possible. Use this if you are running out of memory. | |
364 | |
2249
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
365 *clear-undo* |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
366 When you set 'undolevels' to -1 the undo information is not immediately |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
367 cleared, this happens at the next change. To force clearing the undo |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
368 information you can use these commands: > |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
369 :let old_undolevels = &undolevels |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
370 :set undolevels=-1 |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
371 :exe "normal a \<BS>\<Esc>" |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
372 :let &undolevels = old_undolevels |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
373 :unlet old_undolevels |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2239
diff
changeset
|
374 |
7 | 375 Marks for the buffer ('a to 'z) are also saved and restored, together with the |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15512
diff
changeset
|
376 text. |
7 | 377 |
378 When all changes have been undone, the buffer is not considered to be changed. | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15512
diff
changeset
|
379 It is then possible to exit Vim with ":q" instead of ":q!". Note |
7 | 380 that this is relative to the last write of the file. Typing "u" after ":w" |
381 actually changes the buffer, compared to what was written, so the buffer is | |
382 considered changed then. | |
383 | |
384 When manual |folding| is being used, the folds are not saved and restored. | |
385 Only changes completely within a fold will keep the fold as it was, because | |
386 the first and last line of the fold don't change. | |
387 | |
388 The numbered registers can also be used for undoing deletes. Each time you | |
389 delete text, it is put into register "1. The contents of register "1 are | |
390 shifted to "2, etc. The contents of register "9 are lost. You can now get | |
391 back the most recent deleted text with the put command: '"1P'. (also, if the | |
392 deleted text was the result of the last delete or copy operation, 'P' or 'p' | |
393 also works as this puts the contents of the unnamed register). You can get | |
394 back the text of three deletes ago with '"3P'. | |
395 | |
396 *redo-register* | |
397 If you want to get back more than one part of deleted text, you can use a | |
398 special feature of the repeat command ".". It will increase the number of the | |
22723 | 399 register used. So if you first do '"1P', the following "." will result in a |
7 | 400 '"2P'. Repeating this will result in all numbered registers being inserted. |
401 | |
402 Example: If you deleted text with 'dd....' it can be restored with | |
403 '"1P....'. | |
404 | |
405 If you don't know in which register the deleted text is, you can use the | |
406 :display command. An alternative is to try the first register with '"1P', and | |
407 if it is not what you want do 'u.'. This will remove the contents of the | |
408 first put, and repeat the put command for the second register. Repeat the | |
409 'u.' until you got what you want. | |
410 | |
14519 | 411 vim:tw=78:ts=8:noet:ft=help:norl: |