Mercurial > vim
annotate runtime/doc/change.txt @ 33776:9503dc55b5ed v9.0.2108
patch 9.0.2108: [security]: overflow with count for :s command
Commit: https://github.com/vim/vim/commit/ac63787734fda2e294e477af52b3bd601517fa78
Author: Christian Brabandt <cb@256bit.org>
Date: Tue Nov 14 20:45:48 2023 +0100
patch 9.0.2108: [security]: overflow with count for :s command
Problem: [security]: overflow with count for :s command
Solution: Abort the :s command if the count is too large
If the count after the :s command is larger than what fits into a
(signed) long variable, abort with e_value_too_large.
Adds a test with INT_MAX as count and verify it correctly fails.
It seems the return value on Windows using mingw compiler wraps around,
so the initial test using :s/./b/9999999999999999999999999990 doesn't
fail there, since the count is wrapping around several times and finally
is no longer larger than 2147483647. So let's just use 2147483647 in the
test, which hopefully will always cause a failure
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 16 Nov 2023 22:15:10 +0100 |
parents | 4c975fa0a442 |
children | 3f4883e56207 |
rev | line source |
---|---|
33776
9503dc55b5ed
patch 9.0.2108: [security]: overflow with count for :s command
Christian Brabandt <cb@256bit.org>
parents:
33299
diff
changeset
|
1 *change.txt* For Vim version 9.0. Last change: 2023 Nov 15 |
7 | 2 |
3 | |
4 VIM REFERENCE MANUAL by Bram Moolenaar | |
5 | |
6 | |
7 This file describes commands that delete or change text. In this context, | |
8 changing text means deleting the text and replacing it with other text using | |
9 one command. You can undo all of these commands. You can repeat the non-Ex | |
10 commands with the "." command. | |
11 | |
12 1. Deleting text |deleting| | |
13 2. Delete and insert |delete-insert| | |
14 3. Simple changes |simple-change| *changing* | |
15 4. Complex changes |complex-change| | |
32 | 16 4.1 Filter commands |filter| |
17 4.2 Substitute |:substitute| | |
18 4.3 Search and replace |search-replace| | |
19 4.4 Changing tabs |change-tabs| | |
7 | 20 5. Copying and moving text |copy-move| |
21 6. Formatting text |formatting| | |
282 | 22 7. Sorting text |sorting| |
7 | 23 |
24 For inserting text see |insert.txt|. | |
25 | |
26 ============================================================================== | |
27 1. Deleting text *deleting* *E470* | |
28 | |
29 ["x]<Del> or *<Del>* *x* *dl* | |
30 ["x]x Delete [count] characters under and after the cursor | |
31 [into register x] (not |linewise|). Does the same as | |
32 "dl". | |
33 The <Del> key does not take a [count]. Instead, it | |
34 deletes the last character of the count. | |
35 See |:fixdel| if the <Del> key does not do what you | |
36 want. See |'whichwrap'| for deleting a line break | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
37 (join lines). |
7 | 38 |
39 *X* *dh* | |
40 ["x]X Delete [count] characters before the cursor [into | |
41 register x] (not |linewise|). Does the same as "dh". | |
42 Also see |'whichwrap'|. | |
43 | |
44 *d* | |
45 ["x]d{motion} Delete text that {motion} moves over [into register | |
46 x]. See below for exceptions. | |
47 | |
48 *dd* | |
49 ["x]dd Delete [count] lines [into register x] |linewise|. | |
50 | |
51 *D* | |
52 ["x]D Delete the characters under the cursor until the end | |
53 of the line and [count]-1 more lines [into register | |
54 x]; synonym for "d$". | |
55 (not |linewise|) | |
164 | 56 When the '#' flag is in 'cpoptions' the count is |
57 ignored. | |
7 | 58 |
59 {Visual}["x]x or *v_x* *v_d* *v_<Del>* | |
60 {Visual}["x]d or | |
61 {Visual}["x]<Del> Delete the highlighted text [into register x] (for | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
62 {Visual} see |Visual-mode|). |
7 | 63 |
64 {Visual}["x]CTRL-H or *v_CTRL-H* *v_<BS>* | |
65 {Visual}["x]<BS> When in Select mode: Delete the highlighted text [into | |
66 register x]. | |
67 | |
68 {Visual}["x]X or *v_X* *v_D* *v_b_D* | |
69 {Visual}["x]D Delete the highlighted lines [into register x] (for | |
70 {Visual} see |Visual-mode|). In Visual block mode, | |
71 "D" deletes the highlighted text plus all text until | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
72 the end of the line. |
7 | 73 |
5220 | 74 *:d* *:de* *:del* *:delete* *:dl* *:dp* |
7 | 75 :[range]d[elete] [x] Delete [range] lines (default: current line) [into |
76 register x]. | |
5220 | 77 Note these weird abbreviations: |
78 :dl delete and list | |
79 :dell idem | |
80 :delel idem | |
81 :deletl idem | |
82 :deletel idem | |
83 :dp delete and print | |
84 :dep idem | |
85 :delp idem | |
86 :delep idem | |
87 :deletp idem | |
88 :deletep idem | |
7 | 89 |
90 :[range]d[elete] [x] {count} | |
91 Delete {count} lines, starting with [range] | |
92 (default: current line |cmdline-ranges|) [into | |
93 register x]. | |
94 | |
3492 | 95 These commands delete text. You can repeat them with the `.` command |
96 (except `:d`) and undo them. Use Visual mode to delete blocks of text. See | |
7 | 97 |registers| for an explanation of registers. |
98 | |
99 An exception for the d{motion} command: If the motion is not linewise, the | |
100 start and end of the motion are not in the same line, and there are only | |
8061
abd64cf67bcf
commit https://github.com/vim/vim/commit/38a55639d603823efcf2d2fdf542dbffdeb60b75
Christian Brabandt <cb@256bit.org>
parents:
7876
diff
changeset
|
101 blanks before the start and there are no non-blanks after the end of the |
abd64cf67bcf
commit https://github.com/vim/vim/commit/38a55639d603823efcf2d2fdf542dbffdeb60b75
Christian Brabandt <cb@256bit.org>
parents:
7876
diff
changeset
|
102 motion, the delete becomes linewise. This means that the delete also removes |
abd64cf67bcf
commit https://github.com/vim/vim/commit/38a55639d603823efcf2d2fdf542dbffdeb60b75
Christian Brabandt <cb@256bit.org>
parents:
7876
diff
changeset
|
103 the line of blanks that you might expect to remain. Use the |o_v| operator to |
abd64cf67bcf
commit https://github.com/vim/vim/commit/38a55639d603823efcf2d2fdf542dbffdeb60b75
Christian Brabandt <cb@256bit.org>
parents:
7876
diff
changeset
|
104 force the motion to be characterwise. |
7 | 105 |
106 Trying to delete an empty region of text (e.g., "d0" in the first column) | |
107 is an error when 'cpoptions' includes the 'E' flag. | |
108 | |
109 *J* | |
110 J Join [count] lines, with a minimum of two lines. | |
111 Remove the indent and insert up to two spaces (see | |
8497
da01d5da2cfa
commit https://github.com/vim/vim/commit/77cdfd10382e01cc51f4ba1a9177032351843151
Christian Brabandt <cb@256bit.org>
parents:
8148
diff
changeset
|
112 below). Fails when on the last line of the buffer. |
13857 | 113 If [count] is too big it is reduced to the number of |
8497
da01d5da2cfa
commit https://github.com/vim/vim/commit/77cdfd10382e01cc51f4ba1a9177032351843151
Christian Brabandt <cb@256bit.org>
parents:
8148
diff
changeset
|
114 lines available. |
7 | 115 |
116 *v_J* | |
117 {Visual}J Join the highlighted lines, with a minimum of two | |
118 lines. Remove the indent and insert up to two spaces | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
119 (see below). |
7 | 120 |
121 *gJ* | |
122 gJ Join [count] lines, with a minimum of two lines. | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
123 Don't insert or remove any spaces. |
7 | 124 |
125 *v_gJ* | |
126 {Visual}gJ Join the highlighted lines, with a minimum of two | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
127 lines. Don't insert or remove any spaces. |
7 | 128 |
129 *:j* *:join* | |
168 | 130 :[range]j[oin][!] [flags] |
131 Join [range] lines. Same as "J", except with [!] | |
7 | 132 the join does not insert or delete any spaces. |
133 If a [range] has equal start and end values, this | |
134 command does nothing. The default behavior is to | |
135 join the current line with the line below it. | |
168 | 136 See |ex-flags| for [flags]. |
7 | 137 |
168 | 138 :[range]j[oin][!] {count} [flags] |
7 | 139 Join {count} lines, starting with [range] (default: |
140 current line |cmdline-ranges|). Same as "J", except | |
141 with [!] the join does not insert or delete any | |
142 spaces. | |
168 | 143 See |ex-flags| for [flags]. |
7 | 144 |
145 These commands delete the <EOL> between lines. This has the effect of joining | |
3492 | 146 multiple lines into one line. You can repeat these commands (except `:j`) and |
7 | 147 undo them. |
148 | |
149 These commands, except "gJ", insert one space in place of the <EOL> unless | |
150 there is trailing white space or the next line starts with a ')'. These | |
151 commands, except "gJ", delete any leading white space on the next line. If | |
152 the 'joinspaces' option is on, these commands insert two spaces after a '.', | |
153 '!' or '?' (but if 'cpoptions' includes the 'j' flag, they insert two spaces | |
154 only after a '.'). | |
155 The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting | |
21991 | 156 spaces before and after a multibyte character |fo-table|. |
7 | 157 |
5692
80e5f9584b02
Update runtime files. Add Euphoria syntax files.
Bram Moolenaar <bram@vim.org>
parents:
5663
diff
changeset
|
158 The '[ mark is set at the end of the first line that was joined, '] at the end |
80e5f9584b02
Update runtime files. Add Euphoria syntax files.
Bram Moolenaar <bram@vim.org>
parents:
5663
diff
changeset
|
159 of the resulting line. |
80e5f9584b02
Update runtime files. Add Euphoria syntax files.
Bram Moolenaar <bram@vim.org>
parents:
5663
diff
changeset
|
160 |
7 | 161 |
162 ============================================================================== | |
163 2. Delete and insert *delete-insert* *replacing* | |
164 | |
165 *R* | |
166 R Enter Replace mode: Each character you type replaces | |
167 an existing character, starting with the character | |
168 under the cursor. Repeat the entered text [count]-1 | |
169 times. See |Replace-mode| for more details. | |
170 | |
171 *gR* | |
172 gR Enter Virtual Replace mode: Each character you type | |
173 replaces existing characters in screen space. So a | |
174 <Tab> may replace several characters at once. | |
175 Repeat the entered text [count]-1 times. See | |
176 |Virtual-Replace-mode| for more details. | |
177 | |
178 *c* | |
179 ["x]c{motion} Delete {motion} text [into register x] and start | |
180 insert. When 'cpoptions' includes the 'E' flag and | |
181 there is no text to delete (e.g., with "cTx" when the | |
182 cursor is just after an 'x'), an error occurs and | |
183 insert mode does not start (this is Vi compatible). | |
184 When 'cpoptions' does not include the 'E' flag, the | |
185 "c" command always starts insert mode, even if there | |
186 is no text to delete. | |
187 | |
188 *cc* | |
189 ["x]cc Delete [count] lines [into register x] and start | |
190 insert |linewise|. If 'autoindent' is on, preserve | |
191 the indent of the first line. | |
192 | |
193 *C* | |
194 ["x]C Delete from the cursor position to the end of the | |
195 line and [count]-1 more lines [into register x], and | |
196 start insert. Synonym for c$ (not |linewise|). | |
197 | |
198 *s* | |
199 ["x]s Delete [count] characters [into register x] and start | |
200 insert (s stands for Substitute). Synonym for "cl" | |
201 (not |linewise|). | |
202 | |
203 *S* | |
204 ["x]S Delete [count] lines [into register x] and start | |
205 insert. Synonym for "cc" |linewise|. | |
206 | |
207 {Visual}["x]c or *v_c* *v_s* | |
208 {Visual}["x]s Delete the highlighted text [into register x] and | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
209 start insert (for {Visual} see |Visual-mode|). |
7 | 210 |
211 *v_r* | |
20115 | 212 {Visual}r{char} Replace all selected characters by {char}. |
33299
4c975fa0a442
patch 9.0.1915: r_CTRL-C works differently in visual mode
Christian Brabandt <cb@256bit.org>
parents:
32294
diff
changeset
|
213 CTRL-C will be inserted literally. |
7 | 214 |
215 *v_C* | |
216 {Visual}["x]C Delete the highlighted lines [into register x] and | |
217 start insert. In Visual block mode it works | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
218 differently |v_b_C|. |
7 | 219 *v_S* |
220 {Visual}["x]S Delete the highlighted lines [into register x] and | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
221 start insert (for {Visual} see |Visual-mode|). |
7 | 222 *v_R* |
223 {Visual}["x]R Currently just like {Visual}["x]S. In a next version | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
224 it might work differently. |
7 | 225 |
226 Notes: | |
227 - You can end Insert and Replace mode with <Esc>. | |
228 - See the section "Insert and Replace mode" |mode-ins-repl| for the other | |
229 special characters in these modes. | |
230 - The effect of [count] takes place after Vim exits Insert or Replace mode. | |
231 - When the 'cpoptions' option contains '$' and the change is within one line, | |
232 Vim continues to show the text to be deleted and puts a '$' at the last | |
233 deleted character. | |
234 | |
235 See |registers| for an explanation of registers. | |
236 | |
237 Replace mode is just like Insert mode, except that every character you enter | |
238 deletes one character. If you reach the end of a line, Vim appends any | |
239 further characters (just like Insert mode). In Replace mode, the backspace | |
240 key restores the original text (if there was any). (See section "Insert and | |
241 Replace mode" |mode-ins-repl|). | |
242 | |
243 *cw* *cW* | |
1621 | 244 Special case: When the cursor is in a word, "cw" and "cW" do not include the |
245 white space after a word, they only change up to the end of the word. This is | |
246 because Vim interprets "cw" as change-word, and a word does not include the | |
247 following white space. | |
248 {Vi: "cw" when on a blank followed by other blanks changes only the first | |
249 blank; this is probably a bug, because "dw" deletes all the blanks; use the | |
250 'w' flag in 'cpoptions' to make it work like Vi anyway} | |
7 | 251 |
252 If you prefer "cw" to include the space after a word, use this mapping: > | |
253 :map cw dwi | |
1621 | 254 Or use "caw" (see |aw|). |
255 | |
7 | 256 *:c* *:ch* *:change* |
168 | 257 :{range}c[hange][!] Replace lines of text with some different text. |
7 | 258 Type a line containing only "." to stop replacing. |
259 Without {range}, this command changes only the current | |
260 line. | |
168 | 261 Adding [!] toggles 'autoindent' for the time this |
262 command is executed. | |
26779 | 263 This command is not supported in |Vim9| script, |
264 because it is too easily confused with a variable | |
265 name. | |
7 | 266 |
267 ============================================================================== | |
268 3. Simple changes *simple-change* | |
269 | |
270 *r* | |
271 r{char} Replace the character under the cursor with {char}. | |
272 If {char} is a <CR> or <NL>, a line break replaces the | |
273 character. To replace with a real <CR>, use CTRL-V | |
274 <CR>. CTRL-V <NL> replaces with a <Nul>. | |
3507
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
275 |
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
276 If {char} is CTRL-E or CTRL-Y the character from the |
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
277 line below or above is used, just like with |i_CTRL-E| |
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
278 and |i_CTRL-Y|. This also works with a count, thus |
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
279 `10r<C-E>` copies 10 characters from the line below. |
8201108e9cf0
More runtime file fixes for 'compatible' mode.
Bram Moolenaar <bram@vim.org>
parents:
3493
diff
changeset
|
280 |
7 | 281 If you give a [count], Vim replaces [count] characters |
282 with [count] {char}s. When {char} is a <CR> or <NL>, | |
283 however, Vim inserts only one <CR>: "5r<CR>" replaces | |
284 five characters with a single line break. | |
285 When {char} is a <CR> or <NL>, Vim performs | |
286 autoindenting. This works just like deleting the | |
287 characters that are replaced and then doing | |
288 "i<CR><Esc>". | |
289 {char} can be entered as a digraph |digraph-arg|. | |
290 |:lmap| mappings apply to {char}. The CTRL-^ command | |
291 in Insert mode can be used to switch this on/off | |
292 |i_CTRL-^|. See |utf-8-char-arg| about using | |
293 composing characters when 'encoding' is Unicode. | |
294 | |
295 *gr* | |
296 gr{char} Replace the virtual characters under the cursor with | |
297 {char}. This replaces in screen space, not file | |
298 space. See |gR| and |Virtual-Replace-mode| for more | |
299 details. As with |r| a count may be given. | |
32061 | 300 {char} can be entered like with |r|, but characters |
301 that have a special meaning in Insert mode, such as | |
302 most CTRL-keys, cannot be used. | |
7 | 303 |
304 *digraph-arg* | |
305 The argument for Normal mode commands like |r| and |t| is a single character. | |
306 When 'cpo' doesn't contain the 'D' flag, this character can also be entered | |
307 like |digraphs|. First type CTRL-K and then the two digraph characters. | |
308 {not available when compiled without the |+digraphs| feature} | |
309 | |
310 *case* | |
311 The following commands change the case of letters. The currently active | |
312 |locale| is used. See |:language|. The LC_CTYPE value matters here. | |
313 | |
314 *~* | |
315 ~ 'notildeop' option: Switch case of the character | |
316 under the cursor and move the cursor to the right. | |
16610 | 317 If a [count] is given, do that many characters. |
7 | 318 |
16610 | 319 ~{motion} 'tildeop' option: switch case of {motion} text. |
7 | 320 |
321 *g~* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
322 g~{motion} Switch case of {motion} text. |
7 | 323 |
324 g~g~ *g~g~* *g~~* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
325 g~~ Switch case of current line. |
7 | 326 |
327 *v_~* | |
328 {Visual}~ Switch case of highlighted text (for {Visual} see | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
329 |Visual-mode|). |
7 | 330 |
331 *v_U* | |
332 {Visual}U Make highlighted text uppercase (for {Visual} see | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
333 |Visual-mode|). |
7 | 334 |
335 *gU* *uppercase* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
336 gU{motion} Make {motion} text uppercase. |
7 | 337 Example: > |
338 :map! <C-F> <Esc>gUiw`]a | |
339 < This works in Insert mode: press CTRL-F to make the | |
340 word before the cursor uppercase. Handy to type | |
341 words in lowercase and then make them uppercase. | |
342 | |
343 | |
344 gUgU *gUgU* *gUU* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
345 gUU Make current line uppercase. |
7 | 346 |
347 *v_u* | |
348 {Visual}u Make highlighted text lowercase (for {Visual} see | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
349 |Visual-mode|). |
7 | 350 |
351 *gu* *lowercase* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
352 gu{motion} Make {motion} text lowercase. |
7 | 353 |
354 gugu *gugu* *guu* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
355 guu Make current line lowercase. |
7 | 356 |
357 *g?* *rot13* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
358 g?{motion} Rot13 encode {motion} text. |
7 | 359 |
360 *v_g?* | |
361 {Visual}g? Rot13 encode the highlighted text (for {Visual} see | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
362 |Visual-mode|). |
7 | 363 |
364 g?g? *g?g?* *g??* | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
365 g?? Rot13 encode current line. |
7 | 366 |
1621 | 367 To turn one line into title caps, make every first letter of a word |
368 uppercase: > | |
369 :s/\v<(.)(\w*)/\u\1\L\2/g | |
370 | |
7 | 371 |
372 Adding and subtracting ~ | |
373 *CTRL-A* | |
374 CTRL-A Add [count] to the number or alphabetic character at | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
375 or after the cursor. |
7 | 376 |
6884 | 377 *v_CTRL-A* |
378 {Visual}CTRL-A Add [count] to the number or alphabetic character in | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
379 the highlighted text. |
6884 | 380 |
381 *v_g_CTRL-A* | |
382 {Visual}g CTRL-A Add [count] to the number or alphabetic character in | |
383 the highlighted text. If several lines are | |
384 highlighted, each one will be incremented by an | |
385 additional [count] (so effectively creating a | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
386 [count] incrementing sequence). |
6884 | 387 For Example, if you have this list of numbers: |
388 1. ~ | |
389 1. ~ | |
390 1. ~ | |
391 1. ~ | |
392 Move to the second "1." and Visually select three | |
393 lines, pressing g CTRL-A results in: | |
394 1. ~ | |
395 2. ~ | |
396 3. ~ | |
397 4. ~ | |
398 | |
7 | 399 *CTRL-X* |
400 CTRL-X Subtract [count] from the number or alphabetic | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
401 character at or after the cursor. |
7 | 402 |
6884 | 403 *v_CTRL-X* |
404 {Visual}CTRL-X Subtract [count] from the number or alphabetic | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
405 character in the highlighted text. |
6884 | 406 |
8148
f5da459c5698
commit https://github.com/vim/vim/commit/e0fa3742ead676a3074a10edadbc955e1a89153d
Christian Brabandt <cb@256bit.org>
parents:
8061
diff
changeset
|
407 On MS-Windows, this is mapped to cut Visual text |
f5da459c5698
commit https://github.com/vim/vim/commit/e0fa3742ead676a3074a10edadbc955e1a89153d
Christian Brabandt <cb@256bit.org>
parents:
8061
diff
changeset
|
408 |dos-standard-mappings|. If you want to disable the |
f5da459c5698
commit https://github.com/vim/vim/commit/e0fa3742ead676a3074a10edadbc955e1a89153d
Christian Brabandt <cb@256bit.org>
parents:
8061
diff
changeset
|
409 mapping, use this: > |
f5da459c5698
commit https://github.com/vim/vim/commit/e0fa3742ead676a3074a10edadbc955e1a89153d
Christian Brabandt <cb@256bit.org>
parents:
8061
diff
changeset
|
410 silent! vunmap <C-X> |
f5da459c5698
commit https://github.com/vim/vim/commit/e0fa3742ead676a3074a10edadbc955e1a89153d
Christian Brabandt <cb@256bit.org>
parents:
8061
diff
changeset
|
411 < |
6884 | 412 *v_g_CTRL-X* |
413 {Visual}g CTRL-X Subtract [count] from the number or alphabetic | |
414 character in the highlighted text. If several lines | |
415 are highlighted, each value will be decremented by an | |
416 additional [count] (so effectively creating a [count] | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
417 decrementing sequence). |
6884 | 418 |
7447
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
419 The CTRL-A and CTRL-X commands can work for: |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
420 - signed and unsigned decimal numbers |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
421 - unsigned binary, octal and hexadecimal numbers |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
422 - alphabetic characters |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
423 |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
424 This depends on the 'nrformats' option: |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
425 - When 'nrformats' includes "bin", Vim assumes numbers starting with '0b' or |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
426 '0B' are binary. |
36 | 427 - When 'nrformats' includes "octal", Vim considers numbers starting with a '0' |
39 | 428 to be octal, unless the number includes a '8' or '9'. Other numbers are |
429 decimal and may have a preceding minus sign. | |
36 | 430 If the cursor is on a number, the commands apply to that number; otherwise |
431 Vim uses the number to the right of the cursor. | |
7 | 432 - When 'nrformats' includes "hex", Vim assumes numbers starting with '0x' or |
433 '0X' are hexadecimal. The case of the rightmost letter in the number | |
434 determines the case of the resulting hexadecimal number. If there is no | |
435 letter in the current number, Vim uses the previously detected case. | |
36 | 436 - When 'nrformats' includes "alpha", Vim will change the alphabetic character |
437 under or after the cursor. This is useful to make lists with an alphabetic | |
438 index. | |
7 | 439 |
6884 | 440 For decimals a leading negative sign is considered for incrementing/ |
7477
05cf4cc72a9f
commit https://github.com/vim/vim/commit/fa7353428f705f7a13465a1943dddeede4083023
Christian Brabandt <cb@256bit.org>
parents:
7447
diff
changeset
|
441 decrementing, for binary, octal and hex values, it won't be considered. To |
13857 | 442 ignore the sign Visually select the number before using CTRL-A or CTRL-X. |
6884 | 443 |
7 | 444 For numbers with leading zeros (including all octal and hexadecimal numbers), |
445 Vim preserves the number of characters in the number when possible. CTRL-A on | |
36 | 446 "0077" results in "0100", CTRL-X on "0x100" results in "0x0ff". |
39 | 447 There is one exception: When a number that starts with a zero is found not to |
448 be octal (it contains a '8' or '9'), but 'nrformats' does include "octal", | |
449 leading zeros are removed to avoid that the result may be recognized as an | |
450 octal number. | |
36 | 451 |
452 Note that when 'nrformats' includes "octal", decimal numbers with leading | |
39 | 453 zeros cause mistakes, because they can be confused with octal numbers. |
7 | 454 |
7447
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
455 Note similarly, when 'nrformats' includes "bin", binary numbers with a leading |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
456 '0x' or '0X' can be interpreted as hexadecimal rather than binary since '0b' |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
457 are valid hexadecimal digits. |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
458 |
32294 | 459 When the number under the cursor is too big to fit into 32 or 64 bit |
460 (depending on how Vim was build), it will be rounded off to the nearest number | |
461 that can be represented, and the addition/subtraction is skipped. E.g. with | |
462 64 bit support using CTRL-X on 18446744073709551616 results in | |
463 18446744073709551615. Same for larger numbers, such as 18446744073709551618. | |
464 | |
7 | 465 The CTRL-A command is very useful in a macro. Example: Use the following |
466 steps to make a numbered list. | |
467 | |
468 1. Create the first list entry, make sure it starts with a number. | |
99 | 469 2. qa - start recording into register 'a' |
7 | 470 3. Y - yank the entry |
471 4. p - put a copy of the entry below the first one | |
472 5. CTRL-A - increment the number | |
473 6. q - stop recording | |
474 7. <count>@a - repeat the yank, put and increment <count> times | |
475 | |
476 | |
477 SHIFTING LINES LEFT OR RIGHT *shift-left-right* | |
478 | |
479 *<* | |
480 <{motion} Shift {motion} lines one 'shiftwidth' leftwards. | |
481 | |
15062
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
482 If the 'vartabstop' feature is enabled, and the |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
483 'shiftwidth' option is set to zero, the amount of |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
484 indent is calculated at the first non-blank character |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
485 in the line. |
7 | 486 *<<* |
487 << Shift [count] lines one 'shiftwidth' leftwards. | |
488 | |
489 *v_<* | |
490 {Visual}[count]< Shift the highlighted lines [count] 'shiftwidth' | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
491 leftwards (for {Visual} see |Visual-mode|). |
7 | 492 |
493 *>* | |
494 >{motion} Shift {motion} lines one 'shiftwidth' rightwards. | |
495 | |
15062
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
496 If the 'vartabstop' feature is enabled, and the |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
497 'shiftwidth' option is set to zero, the amount of |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
498 indent is calculated at the first non-blank character |
3a94f7918980
patch 8.1.0542: shiftwidth() does not take 'vartabstop' into account
Bram Moolenaar <Bram@vim.org>
parents:
14999
diff
changeset
|
499 in the line. |
7 | 500 *>>* |
501 >> Shift [count] lines one 'shiftwidth' rightwards. | |
502 | |
503 *v_>* | |
504 {Visual}[count]> Shift the highlighted lines [count] 'shiftwidth' | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
505 rightwards (for {Visual} see |Visual-mode|). |
7 | 506 |
507 *:<* | |
508 :[range]< Shift [range] lines one 'shiftwidth' left. Repeat '<' | |
509 for shifting multiple 'shiftwidth's. | |
510 | |
511 :[range]< {count} Shift {count} lines one 'shiftwidth' left, starting | |
512 with [range] (default current line |cmdline-ranges|). | |
513 Repeat '<' for shifting multiple 'shiftwidth's. | |
514 | |
515 :[range]le[ft] [indent] left align lines in [range]. Sets the indent in the | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
516 lines to [indent] (default 0). |
7 | 517 |
518 *:>* | |
168 | 519 :[range]> [flags] Shift {count} [range] lines one 'shiftwidth' right. |
7 | 520 Repeat '>' for shifting multiple 'shiftwidth's. |
168 | 521 See |ex-flags| for [flags]. |
7 | 522 |
168 | 523 :[range]> {count} [flags] |
524 Shift {count} lines one 'shiftwidth' right, starting | |
7 | 525 with [range] (default current line |cmdline-ranges|). |
526 Repeat '>' for shifting multiple 'shiftwidth's. | |
168 | 527 See |ex-flags| for [flags]. |
7 | 528 |
529 The ">" and "<" commands are handy for changing the indentation within | |
530 programs. Use the 'shiftwidth' option to set the size of the white space | |
531 which these commands insert or delete. Normally the 'shiftwidth' option is 8, | |
532 but you can set it to, say, 3 to make smaller indents. The shift leftwards | |
533 stops when there is no indent. The shift right does not affect empty lines. | |
534 | |
535 If the 'shiftround' option is on, the indent is rounded to a multiple of | |
536 'shiftwidth'. | |
537 | |
538 If the 'smartindent' option is on, or 'cindent' is on and 'cinkeys' contains | |
5466 | 539 '#' with a zero value, shift right does not affect lines starting with '#' |
540 (these are supposed to be C preprocessor lines that must stay in column 1). | |
13735 | 541 This can be changed with the 'cino' option, see |cino-#|. |
7 | 542 |
543 When the 'expandtab' option is off (this is the default) Vim uses <Tab>s as | |
544 much as possible to make the indent. You can use ">><<" to replace an indent | |
545 made out of spaces with the same indent made out of <Tab>s (and a few spaces | |
546 if necessary). If the 'expandtab' option is on, Vim uses only spaces. Then | |
547 you can use ">><<" to replace <Tab>s in the indent by spaces (or use | |
3492 | 548 `:retab!`). |
7 | 549 |
3492 | 550 To move a line several 'shiftwidth's, use Visual mode or the `:` commands. |
7 | 551 For example: > |
552 Vjj4> move three lines 4 indents to the right | |
553 :<<< move current line 3 indents to the left | |
554 :>> 5 move 5 lines 2 indents to the right | |
555 :5>> move line 5 2 indents to the right | |
556 | |
557 ============================================================================== | |
558 4. Complex changes *complex-change* | |
559 | |
856 | 560 4.1 Filter commands *filter* |
32 | 561 |
562 A filter is a program that accepts text at standard input, changes it in some | |
563 way, and sends it to standard output. You can use the commands below to send | |
1621 | 564 some text through a filter, so that it is replaced by the filter output. |
32 | 565 Examples of filters are "sort", which sorts lines alphabetically, and |
566 "indent", which formats C program files (you need a version of indent that | |
567 works like a filter; not all versions do). The 'shell' option specifies the | |
568 shell Vim uses to execute the filter command (See also the 'shelltype' | |
569 option). You can repeat filter commands with ".". Vim does not recognize a | |
3492 | 570 comment (starting with '"') after the `:!` command. |
32 | 571 |
572 *!* | |
7 | 573 !{motion}{filter} Filter {motion} text lines through the external |
574 program {filter}. | |
575 | |
576 *!!* | |
577 !!{filter} Filter [count] lines through the external program | |
578 {filter}. | |
579 | |
580 *v_!* | |
581 {Visual}!{filter} Filter the highlighted lines through the external | |
582 program {filter} (for {Visual} see |Visual-mode|). | |
583 | |
584 :{range}![!]{filter} [!][arg] *:range!* | |
585 Filter {range} lines through the external program | |
586 {filter}. Vim replaces the optional bangs with the | |
587 latest given command and appends the optional [arg]. | |
588 Vim saves the output of the filter command in a | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
589 temporary file and then reads the file into the buffer |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
590 |tempfile|. Vim uses the 'shellredir' option to |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
591 redirect the filter output to the temporary file. |
603 | 592 However, if the 'shelltemp' option is off then pipes |
593 are used when possible (on Unix). | |
7 | 594 When the 'R' flag is included in 'cpoptions' marks in |
595 the filtered lines are deleted, unless the | |
596 |:keepmarks| command is used. Example: > | |
597 :keepmarks '<,'>!sort | |
598 < When the number of lines after filtering is less than | |
599 before, marks in the missing lines are deleted anyway. | |
600 | |
601 *=* | |
602 ={motion} Filter {motion} lines through the external program | |
603 given with the 'equalprg' option. When the 'equalprg' | |
604 option is empty (this is the default), use the | |
2833 | 605 internal formatting function |C-indenting| and |
606 |'lisp'|. But when 'indentexpr' is not empty, it will | |
607 be used instead |indent-expression|. When Vim was | |
608 compiled without internal formatting then the "indent" | |
609 program is used as a last resort. | |
7 | 610 |
611 *==* | |
612 == Filter [count] lines like with ={motion}. | |
613 | |
614 *v_=* | |
615 {Visual}= Filter the highlighted lines like with ={motion}. | |
616 | |
617 | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
618 *tempfile* *setuid* |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
619 Vim uses temporary files for filtering, generating diffs and also for |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
620 tempname(). For Unix, the file will be in a private directory (only |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
621 accessible by the current user) to avoid security problems (e.g., a symlink |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
622 attack or other people reading your file). When Vim exits the directory and |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
623 all files in it are deleted. When Vim has the setuid bit set this may cause |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
624 problems, the temp file is owned by the setuid user but the filter command |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
625 probably runs as the original user. |
28517 | 626 Directory for temporary files is created in the first of these directories |
627 that works: | |
628 Unix: $TMPDIR, /tmp, current-dir, $HOME. | |
629 Windows: $TMP, $TEMP, c:\TMP, c:\TEMP | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
630 For MS-Windows the GetTempFileName() system function is used. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
631 For other systems the tmpnam() library function is used. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
632 |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
633 |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
634 |
32 | 635 4.2 Substitute *:substitute* |
636 *:s* *:su* | |
170 | 637 :[range]s[ubstitute]/{pattern}/{string}/[flags] [count] |
7 | 638 For each line in [range] replace a match of {pattern} |
639 with {string}. | |
640 For the {pattern} see |pattern|. | |
641 {string} can be a literal string, or something | |
642 special; see |sub-replace-special|. | |
643 When [range] and [count] are omitted, replace in the | |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10449
diff
changeset
|
644 current line only. When [count] is given, replace in |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10449
diff
changeset
|
645 [count] lines, starting with the last line in [range]. |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10449
diff
changeset
|
646 When [range] is omitted start in the current line. |
33776
9503dc55b5ed
patch 9.0.2108: [security]: overflow with count for :s command
Christian Brabandt <cb@256bit.org>
parents:
33299
diff
changeset
|
647 *E939* *E1510* |
9503dc55b5ed
patch 9.0.2108: [security]: overflow with count for :s command
Christian Brabandt <cb@256bit.org>
parents:
33299
diff
changeset
|
648 [count] must be a positive number (max 2147483647) |
9503dc55b5ed
patch 9.0.2108: [security]: overflow with count for :s command
Christian Brabandt <cb@256bit.org>
parents:
33299
diff
changeset
|
649 Also see |cmdline-ranges|. |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10449
diff
changeset
|
650 |
170 | 651 See |:s_flags| for [flags]. |
19404 | 652 The delimiter doesn't need to be /, see |
653 |pattern-delimiter|. | |
7 | 654 |
170 | 655 :[range]s[ubstitute] [flags] [count] |
656 :[range]&[&][flags] [count] *:&* | |
7 | 657 Repeat last :substitute with same search pattern and |
658 substitute string, but without the same flags. You | |
170 | 659 may add [flags], see |:s_flags|. |
3492 | 660 Note that after `:substitute` the '&' flag can't be |
7 | 661 used, it's recognized as a pattern separator. |
7013 | 662 The space between `:substitute` and the 'c', 'g', |
663 'i', 'I' and 'r' flags isn't required, but in scripts | |
664 it's a good idea to keep it to avoid confusion. | |
24103 | 665 Also see the two and three letter commands to repeat |
666 :substitute below |:substitute-repeat|. | |
7 | 667 |
170 | 668 :[range]~[&][flags] [count] *:~* |
7 | 669 Repeat last substitute with same substitute string |
670 but with last used search pattern. This is like | |
3492 | 671 `:&r`. See |:s_flags| for [flags]. |
7 | 672 |
170 | 673 *&* |
3492 | 674 & Synonym for `:s` (repeat last substitute). Note |
7 | 675 that the flags are not remembered, thus it might |
3492 | 676 actually work differently. You can use `:&&` to keep |
7 | 677 the flags. |
678 | |
170 | 679 *g&* |
3920 | 680 g& Synonym for `:%s//~/&` (repeat last substitute with |
681 last search pattern on all lines with the same flags). | |
4186 | 682 For example, when you first do a substitution with |
3920 | 683 `:s/pattern/repl/flags` and then `/search` for |
684 something else, `g&` will do `:%s/search/repl/flags`. | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
685 Mnemonic: global substitute. |
7 | 686 |
687 *:snomagic* *:sno* | |
3492 | 688 :[range]sno[magic] ... Same as `:substitute`, but always use 'nomagic'. |
7 | 689 |
690 *:smagic* *:sm* | |
3492 | 691 :[range]sm[agic] ... Same as `:substitute`, but always use 'magic'. |
7 | 692 |
693 *:s_flags* | |
694 The flags that you can use for the substitute commands: | |
695 | |
10449
222b1432814e
commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents:
10245
diff
changeset
|
696 *:&&* |
7 | 697 [&] Must be the first one: Keep the flags from the previous substitute |
698 command. Examples: > | |
699 :&& | |
700 :s/this/that/& | |
3492 | 701 < Note that `:s` and `:&` don't keep the flags. |
7 | 702 |
703 [c] Confirm each substitution. Vim highlights the matching string (with | |
704 |hl-IncSearch|). You can type: *:s_c* | |
705 'y' to substitute this match | |
706 'l' to substitute this match and then quit ("last") | |
707 'n' to skip this match | |
708 <Esc> to quit substituting | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
709 'a' to substitute this and all remaining matches |
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
710 'q' to quit substituting |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17372
diff
changeset
|
711 CTRL-E to scroll the screen up |
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17372
diff
changeset
|
712 CTRL-Y to scroll the screen down |
7 | 713 If the 'edcompatible' option is on, Vim remembers the [c] flag and |
714 toggles it each time you use it, but resets it when you give a new | |
715 search pattern. | |
716 | |
14864 | 717 *:s_e* |
7 | 718 [e] When the search pattern fails, do not issue an error message and, in |
719 particular, continue in maps as if no error occurred. This is most | |
720 useful to prevent the "No match" error from breaking a mapping. Vim | |
721 does not suppress the following error messages, however: | |
722 Regular expressions can't be delimited by letters | |
723 \ should be followed by /, ? or & | |
724 No previous substitute regular expression | |
725 Trailing characters | |
726 Interrupted | |
727 | |
14864 | 728 *:s_g* |
7 | 729 [g] Replace all occurrences in the line. Without this argument, |
730 replacement occurs only for the first occurrence in each line. If | |
731 the 'edcompatible' option is on, Vim remembers this flag and toggles | |
732 it each time you use it, but resets it when you give a new search | |
733 pattern. If the 'gdefault' option is on, this flag is on by default | |
734 and the [g] argument switches it off. | |
735 | |
14864 | 736 *:s_i* |
7 | 737 [i] Ignore case for the pattern. The 'ignorecase' and 'smartcase' options |
738 are not used. | |
739 | |
14864 | 740 *:s_I* |
7 | 741 [I] Don't ignore case for the pattern. The 'ignorecase' and 'smartcase' |
742 options are not used. | |
743 | |
14864 | 744 *:s_n* |
170 | 745 [n] Report the number of matches, do not actually substitute. The [c] |
746 flag is ignored. The matches are reported as if 'report' is zero. | |
747 Useful to |count-items|. | |
3750 | 748 If \= |sub-replace-expression| is used, the expression will be |
749 evaluated in the |sandbox| at every match. | |
170 | 750 |
14864 | 751 [p] Print the line containing the last substitute. *:s_p* |
752 | |
753 [#] Like [p] and prepend the line number. *:s_#* | |
168 | 754 |
14864 | 755 [l] Like [p] but print the text like |:list|. *:s_l* |
168 | 756 |
14864 | 757 *:s_r* |
3492 | 758 [r] Only useful in combination with `:&` or `:s` without arguments. `:&r` |
759 works the same way as `:~`: When the search pattern is empty, use the | |
7 | 760 previously used search pattern instead of the search pattern from the |
3492 | 761 last substitute or `:global`. If the last command that did a search |
762 was a substitute or `:global`, there is no effect. If the last | |
7 | 763 command was a search command such as "/", use the pattern from that |
764 command. | |
3492 | 765 For `:s` with an argument this already happens: > |
7 | 766 :s/blue/red/ |
767 /green | |
768 :s//red/ or :~ or :&r | |
769 < The last commands will replace "green" with "red". > | |
770 :s/blue/red/ | |
771 /green | |
772 :& | |
773 < The last command will replace "blue" with "red". | |
774 | |
775 Note that there is no flag to change the "magicness" of the pattern. A | |
1621 | 776 different command is used instead, or you can use |/\v| and friends. The |
777 reason is that the flags can only be found by skipping the pattern, and in | |
778 order to skip the pattern the "magicness" must be known. Catch 22! | |
7 | 779 |
780 If the {pattern} for the substitute command is empty, the command uses the | |
3492 | 781 pattern from the last substitute or `:global` command. If there is none, but |
2725 | 782 there is a previous search pattern, that one is used. With the [r] flag, the |
3492 | 783 command uses the pattern from the last substitute, `:global`, or search |
7 | 784 command. |
785 | |
1121 | 786 If the {string} is omitted the substitute is done as if it's empty. Thus the |
787 matched pattern is deleted. The separator after {pattern} can also be left | |
788 out then. Example: > | |
789 :%s/TESTING | |
790 This deletes "TESTING" from all lines, but only one per line. | |
28010 | 791 *E1270* |
792 For compatibility with Vi these two exceptions are allowed in legacy script: | |
7 | 793 "\/{string}/" and "\?{string}?" do the same as "//{string}/r". |
794 "\&{string}&" does the same as "//{string}/". | |
27537 | 795 *pattern-delimiter* *E146* *E1241* *E1242* |
25056 | 796 Instead of the '/' which surrounds the pattern and replacement string, you can |
797 use another single-byte character. This is useful if you want to include a | |
798 '/' in the search pattern or replacement string. Example: > | |
7 | 799 :s+/+//+ |
800 | |
25056 | 801 You can use most characters, but not an alphanumeric character, '\', '"' or |
802 '|'. In Vim9 script you should not use '#' because it may be recognized as | |
803 the start of a comment. | |
804 | |
1621 | 805 For the definition of a pattern, see |pattern|. In Visual block mode, use |
806 |/\%V| in the pattern to have the substitute work in the block only. | |
807 Otherwise it works on whole lines anyway. | |
7 | 808 |
809 *sub-replace-special* *:s\=* | |
810 When the {string} starts with "\=" it is evaluated as an expression, see | |
2908 | 811 |sub-replace-expression|. You can use that for complex replacement or special |
812 characters. | |
813 | |
29533 | 814 The substitution is limited in recursion to 4 levels. *E1290* |
815 | |
452 | 816 Otherwise these characters in {string} have a special meaning: |
168 | 817 *:s%* |
843 | 818 When {string} is equal to "%" and '/' is included with the 'cpoptions' option, |
2908 | 819 then the {string} of the previous substitute command is used, see |cpo-/| |
7 | 820 |
821 magic nomagic action ~ | |
822 & \& replaced with the whole matched pattern *s/\&* | |
823 \& & replaced with & | |
824 \0 replaced with the whole matched pattern *\0* *s/\0* | |
825 \1 replaced with the matched pattern in the first | |
826 pair of () *s/\1* | |
26 | 827 \2 replaced with the matched pattern in the second |
7 | 828 pair of () *s/\2* |
829 .. .. *s/\3* | |
830 \9 replaced with the matched pattern in the ninth | |
831 pair of () *s/\9* | |
832 ~ \~ replaced with the {string} of the previous | |
833 substitute *s~* | |
834 \~ ~ replaced with ~ *s/\~* | |
835 \u next character made uppercase *s/\u* | |
836 \U following characters made uppercase, until \E *s/\U* | |
837 \l next character made lowercase *s/\l* | |
838 \L following characters made lowercase, until \E *s/\L* | |
839 \e end of \u, \U, \l and \L (NOTE: not <Esc>!) *s/\e* | |
840 \E end of \u, \U, \l and \L *s/\E* | |
841 <CR> split line in two at this point | |
842 (Type the <CR> as CTRL-V <Enter>) *s<CR>* | |
843 \r idem *s/\r* | |
844 \<CR> insert a carriage-return (CTRL-M) | |
845 (Type the <CR> as CTRL-V <Enter>) *s/\<CR>* | |
846 \n insert a <NL> (<NUL> in the file) | |
847 (does NOT break the line) *s/\n* | |
848 \b insert a <BS> *s/\b* | |
849 \t insert a <Tab> *s/\t* | |
850 \\ insert a single backslash *s/\\* | |
851 \x where x is any character not mentioned above: | |
852 Reserved for future expansion | |
853 | |
2908 | 854 The special meaning is also used inside the third argument {sub} of |
855 the |substitute()| function with the following exceptions: | |
856 - A % inserts a percent literally without regard to 'cpoptions'. | |
857 - magic is always set without regard to 'magic'. | |
858 - A ~ inserts a tilde literally. | |
859 - <CR> and \r inserts a carriage-return (CTRL-M). | |
14999 | 860 - \<CR> does not have a special meaning. It's just one of \x. |
2908 | 861 |
7 | 862 Examples: > |
863 :s/a\|b/xxx\0xxx/g modifies "a b" to "xxxaxxx xxxbxxx" | |
864 :s/\([abc]\)\([efg]\)/\2\1/g modifies "af fa bg" to "fa fa gb" | |
865 :s/abcde/abc^Mde/ modifies "abcde" to "abc", "de" (two lines) | |
866 :s/$/\^M/ modifies "abcde" to "abcde^M" | |
772 | 867 :s/\w\+/\u\0/g modifies "bla bla" to "Bla Bla" |
8951
0bdeaf7092bc
commit https://github.com/vim/vim/commit/aa3b15dbebf333282503d6031e2f9ba6ee4398ed
Christian Brabandt <cb@256bit.org>
parents:
8497
diff
changeset
|
868 :s/\w\+/\L\u\0/g modifies "BLA bla" to "Bla Bla" |
4264 | 869 |
870 Note: "\L\u" can be used to capitalize the first letter of a word. This is | |
871 not compatible with Vi and older versions of Vim, where the "\u" would cancel | |
872 out the "\L". Same for "\U\l". | |
7 | 873 |
874 Note: In previous versions CTRL-V was handled in a special way. Since this is | |
875 not Vi compatible, this was removed. Use a backslash instead. | |
876 | |
877 command text result ~ | |
878 :s/aa/a^Ma/ aa a<line-break>a | |
879 :s/aa/a\^Ma/ aa a^Ma | |
880 :s/aa/a\\^Ma/ aa a\<line-break>a | |
881 | |
882 (you need to type CTRL-V <CR> to get a ^M here) | |
883 | |
884 The numbering of "\1", "\2" etc. is done based on which "\(" comes first in | |
885 the pattern (going left to right). When a parentheses group matches several | |
886 times, the last one will be used for "\1", "\2", etc. Example: > | |
887 :s/\(\(a[a-d] \)*\)/\2/ modifies "aa ab x" to "ab x" | |
10186
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
8951
diff
changeset
|
888 The "\2" is for "\(a[a-d] \)". At first it matches "aa ", secondly "ab ". |
7 | 889 |
890 When using parentheses in combination with '|', like in \([ab]\)\|\([cd]\), | |
891 either the first or second pattern in parentheses did not match, so either | |
892 \1 or \2 is empty. Example: > | |
893 :s/\([ab]\)\|\([cd]\)/\1x/g modifies "a b c d" to "ax bx x x" | |
894 < | |
895 | |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
896 *:sc* *:sce* *:scg* *:sci* *:scI* *:scl* *:scp* *:sg* *:sgc* |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
897 *:sge* *:sgi* *:sgI* *:sgl* *:sgn* *:sgp* *:sgr* *:sI* *:si* |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
898 *:sic* *:sIc* *:sie* *:sIe* *:sIg* *:sIl* *:sin* *:sIn* *:sIp* |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
899 *:sip* *:sIr* *:sir* *:sr* *:src* *:srg* *:sri* *:srI* *:srl* |
24103 | 900 *:srn* *:srp* *:substitute-repeat* |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
901 2-letter and 3-letter :substitute commands ~ |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
902 |
24103 | 903 These commands repeat the previous `:substitute` command with the given flags. |
904 The first letter is always "s", followed by one or two of the possible flag | |
905 characters. For example `:sce` works like `:s///ce`. The table lists the | |
906 possible combinations, not all flags are possible, because the command is | |
907 short for another command. | |
908 | |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
909 List of :substitute commands |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
910 | c e g i I n p l r |
24103 | 911 | c :sc :sce :scg :sci :scI :scn :scp :scl |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
912 | e |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
913 | g :sgc :sge :sg :sgi :sgI :sgn :sgp :sgl :sgr |
24103 | 914 | i :sic :sie :si :siI :sin :sip :sir |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
915 | I :sIc :sIe :sIg :sIi :sI :sIn :sIp :sIl :sIr |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
916 | n |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
917 | p |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
918 | l |
24103 | 919 | r :src :srg :sri :srI :srn :srp :srl :sr |
7183
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
920 |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
921 Exceptions: |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
922 :scr is `:scriptnames` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
923 :se is `:set` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
924 :sig is `:sign` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
925 :sil is `:silent` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
926 :sn is `:snext` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
927 :sp is `:split` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
928 :sl is `:sleep` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
929 :sre is `:srewind` |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
930 |
ffad29dc7eee
commit https://github.com/vim/vim/commit/a0f849ee40cbea3c889345256786b640b0becca2
Christian Brabandt <cb@256bit.org>
parents:
7100
diff
changeset
|
931 |
7 | 932 Substitute with an expression *sub-replace-expression* |
5663
1dea14d4c738
Update runtime files. Add support for systemverilog.
Bram Moolenaar <bram@vim.org>
parents:
5618
diff
changeset
|
933 *sub-replace-\=* *s/\=* |
270 | 934 When the substitute string starts with "\=" the remainder is interpreted as an |
10245
d76ccdacb41e
commit https://github.com/vim/vim/commit/6100d02aab7c8294b581cb299250eea164b50e9d
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
935 expression. |
7 | 936 |
937 The special meaning for characters as mentioned at |sub-replace-special| does | |
2908 | 938 not apply except for "<CR>". A <NL> character is used as a line break, you |
939 can get one with a double-quote string: "\n". Prepend a backslash to get a | |
940 real <NL> character (which will be a NUL in the file). | |
7 | 941 |
2908 | 942 The "\=" notation can also be used inside the third argument {sub} of |
943 |substitute()| function. In this case, the special meaning for characters as | |
944 mentioned at |sub-replace-special| does not apply at all. Especially, <CR> and | |
945 <NL> are interpreted not as a line break but as a carriage-return and a | |
946 new-line respectively. | |
7 | 947 |
714 | 948 When the result is a |List| then the items are joined with separating line |
949 breaks. Thus each item becomes a line, except that they can contain line | |
950 breaks themselves. | |
951 | |
15194 | 952 The |submatch()| function can be used to obtain matched text. The whole |
953 matched text can be accessed with "submatch(0)". The text matched with the | |
954 first pair of () with "submatch(1)". Likewise for further sub-matches in (). | |
7 | 955 |
956 Be careful: The separation character must not appear in the expression! | |
957 Consider using a character like "@" or ":". There is no problem if the result | |
958 of the expression contains the separation character. | |
959 | |
452 | 960 Examples: > |
27903 | 961 :s@\n@\="\r" .. expand("$HOME") .. "\r"@ |
452 | 962 This replaces an end-of-line with a new line containing the value of $HOME. > |
963 | |
964 s/E/\="\<Char-0x20ac>"/g | |
1668 | 965 This replaces each 'E' character with a euro sign. Read more in |<Char->|. |
7 | 966 |
967 | |
32 | 968 4.3 Search and replace *search-replace* |
969 | |
970 *:pro* *:promptfind* | |
7 | 971 :promptf[ind] [string] |
972 Put up a Search dialog. When [string] is given, it is | |
973 used as the initial search string. | |
974 {only for Win32, Motif and GTK GUI} | |
975 | |
976 *:promptr* *:promptrepl* | |
977 :promptr[epl] [string] | |
978 Put up a Search/Replace dialog. When [string] is | |
979 given, it is used as the initial search string. | |
980 {only for Win32, Motif and GTK GUI} | |
981 | |
32 | 982 |
983 4.4 Changing tabs *change-tabs* | |
3492 | 984 *:ret* *:retab* *:retab!* |
7 | 985 :[range]ret[ab][!] [new_tabstop] |
986 Replace all sequences of white-space containing a | |
987 <Tab> with new strings of white-space using the new | |
988 tabstop value given. If you do not specify a new | |
989 tabstop size or it is zero, Vim uses the current value | |
990 of 'tabstop'. | |
991 The current value of 'tabstop' is always used to | |
992 compute the width of existing tabs. | |
993 With !, Vim also replaces strings of only normal | |
994 spaces with tabs where appropriate. | |
995 With 'expandtab' on, Vim replaces all tabs with the | |
996 appropriate number of spaces. | |
997 This command sets 'tabstop' to the new value given, | |
998 and if performed on the whole file, which is default, | |
999 should not make any visible change. | |
1000 Careful: This command modifies any <Tab> characters | |
1001 inside of strings in a C program. Use "\t" to avoid | |
1002 this (that's a good habit anyway). | |
3492 | 1003 `:retab!` may also change a sequence of spaces by |
7 | 1004 <Tab> characters, which can mess up a printf(). |
14175
2ad722003b36
patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents:
13963
diff
changeset
|
1005 If the |+vartabs| feature is enabled then a list of |
2ad722003b36
patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents:
13963
diff
changeset
|
1006 tab widths separated by commas may be used in place of |
2ad722003b36
patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents:
13963
diff
changeset
|
1007 a single tabstop. Each value in the list represents |
2ad722003b36
patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents:
13963
diff
changeset
|
1008 the width of one tabstop, except the final value which |
2ad722003b36
patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents:
13963
diff
changeset
|
1009 applies to all following tabstops. |
7 | 1010 |
1011 *retab-example* | |
1012 Example for using autocommands and ":retab" to edit a file which is stored | |
1013 with tabstops at 8 but edited with tabstops set at 4. Warning: white space | |
1014 inside of strings can change! Also see 'softtabstop' option. > | |
1015 | |
1016 :auto BufReadPost *.xx retab! 4 | |
1017 :auto BufWritePre *.xx retab! 8 | |
1018 :auto BufWritePost *.xx retab! 4 | |
1019 :auto BufNewFile *.xx set ts=4 | |
1020 | |
1021 ============================================================================== | |
1022 5. Copying and moving text *copy-move* | |
1023 | |
1024 *quote* | |
20241 | 1025 "{register} Use {register} for next delete, yank or put. Use |
1026 an uppercase character to append with delete and yank. | |
1027 Registers ".", "%", "#" and ":" only work with put. | |
7 | 1028 |
1029 *:reg* *:registers* | |
18436
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1030 :reg[isters] Display the type and contents of all numbered and |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1031 named registers. If a register is written to for |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1032 |:redir| it will not be listed. |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1033 Type can be one of: |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1034 "c" for |characterwise| text |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1035 "l" for |linewise| text |
6ec1bfb4690b
patch 8.1.2212: cannot see the selection type in :reg output
Bram Moolenaar <Bram@vim.org>
parents:
18343
diff
changeset
|
1036 "b" for |blockwise-visual| text |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1037 |
7 | 1038 |
1039 :reg[isters] {arg} Display the contents of the numbered and named | |
1040 registers that are mentioned in {arg}. For example: > | |
7477
05cf4cc72a9f
commit https://github.com/vim/vim/commit/fa7353428f705f7a13465a1943dddeede4083023
Christian Brabandt <cb@256bit.org>
parents:
7447
diff
changeset
|
1041 :reg 1a |
7 | 1042 < to display registers '1' and 'a'. Spaces are allowed |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1043 in {arg}. |
7 | 1044 |
32061 | 1045 *:di* *:dis* *:display* |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1046 :di[splay] [arg] Same as :registers. |
7 | 1047 |
1048 *y* *yank* | |
1049 ["x]y{motion} Yank {motion} text [into register x]. When no | |
1050 characters are to be yanked (e.g., "y0" in column 1), | |
1051 this is an error when 'cpoptions' includes the 'E' | |
1052 flag. | |
1053 | |
1054 *yy* | |
1055 ["x]yy Yank [count] lines [into register x] |linewise|. | |
1056 | |
1057 *Y* | |
1058 ["x]Y yank [count] lines [into register x] (synonym for | |
1059 yy, |linewise|). If you like "Y" to work from the | |
1060 cursor to the end of line (which is more logical, | |
1061 but not Vi-compatible) use ":map Y y$". | |
1062 | |
24866
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1063 *zy* |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1064 ["x]zy{motion} Yank {motion} text [into register x]. Only differs |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1065 from `y` when selecting a block of text, see |v_zy|. |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1066 |
7 | 1067 *v_y* |
1068 {Visual}["x]y Yank the highlighted text [into register x] (for | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1069 {Visual} see |Visual-mode|). |
7 | 1070 |
1071 *v_Y* | |
1072 {Visual}["x]Y Yank the highlighted lines [into register x] (for | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1073 {Visual} see |Visual-mode|). |
7 | 1074 |
24866
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1075 *v_zy* |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1076 {Visual}["x]zy Yank the highlighted text [into register x]. Trailing |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1077 whitespace at the end of each line of a selected block |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1078 won't be yanked. Especially useful in combination |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1079 with `zp`. (for {Visual} see |Visual-mode|) |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1080 |
2791 | 1081 *:y* *:yank* *E850* |
1082 :[range]y[ank] [x] Yank [range] lines [into register x]. Yanking to the | |
2826 | 1083 "* or "+ registers is possible only when the |
1084 |+clipboard| feature is included. | |
7 | 1085 |
1086 :[range]y[ank] [x] {count} | |
1087 Yank {count} lines, starting with last line number | |
1088 in [range] (default: current line |cmdline-ranges|), | |
1089 [into register x]. | |
1090 | |
27537 | 1091 *p* *put* *E353* *E1240* |
7 | 1092 ["x]p Put the text [from register x] after the cursor |
16610 | 1093 [count] times. |
7 | 1094 |
1095 *P* | |
1096 ["x]P Put the text [from register x] before the cursor | |
16610 | 1097 [count] times. |
7 | 1098 |
1099 *<MiddleMouse>* | |
1100 ["x]<MiddleMouse> Put the text from a register before the cursor [count] | |
1101 times. Uses the "* register, unless another is | |
856 | 1102 specified. |
36 | 1103 Leaves the cursor at the end of the new text. |
1104 Using the mouse only works when 'mouse' contains 'n' | |
1105 or 'a'. | |
7 | 1106 If you have a scrollwheel and often accidentally paste |
1107 text, you can use these mappings to disable the | |
1108 pasting with the middle mouse button: > | |
1109 :map <MiddleMouse> <Nop> | |
1110 :imap <MiddleMouse> <Nop> | |
1111 < You might want to disable the multi-click versions | |
1112 too, see |double-click|. | |
1113 | |
1114 *gp* | |
1115 ["x]gp Just like "p", but leave the cursor just after the new | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1116 text. |
7 | 1117 |
1118 *gP* | |
1119 ["x]gP Just like "P", but leave the cursor just after the new | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1120 text. |
7 | 1121 |
1122 *:pu* *:put* | |
1123 :[line]pu[t] [x] Put the text [from register x] after [line] (default | |
1124 current line). This always works |linewise|, thus | |
1125 this command can be used to put a yanked block as new | |
1126 lines. | |
3492 | 1127 If no register is specified, it depends on the 'cb' |
1128 option: If 'cb' contains "unnamedplus", paste from the | |
1129 + register |quoteplus|. Otherwise, if 'cb' contains | |
3493
1be42b88900e
Updated runtime files, include fixes for line continuation.
Bram Moolenaar <bram@vim.org>
parents:
3492
diff
changeset
|
1130 "unnamed", paste from the * register |quotestar|. |
3492 | 1131 Otherwise, paste from the unnamed register |
1132 |quote_quote|. | |
7 | 1133 The register can also be '=' followed by an optional |
1134 expression. The expression continues until the end of | |
1135 the command. You need to escape the '|' and '"' | |
1136 characters to prevent them from terminating the | |
1137 command. Example: > | |
27903 | 1138 :put ='path' .. \",/test\" |
7 | 1139 < If there is no expression after '=', Vim uses the |
1140 previous expression. You can see it with ":dis =". | |
1141 | |
1142 :[line]pu[t]! [x] Put the text [from register x] before [line] (default | |
1143 current line). | |
1144 | |
1145 ["x]]p or *]p* *]<MiddleMouse>* | |
1146 ["x]]<MiddleMouse> Like "p", but adjust the indent to the current line. | |
1147 Using the mouse only works when 'mouse' contains 'n' | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1148 or 'a'. |
7 | 1149 |
1150 ["x][P or *[P* | |
1151 ["x]]P or *]P* | |
1152 ["x][p or *[p* *[<MiddleMouse>* | |
1153 ["x][<MiddleMouse> Like "P", but adjust the indent to the current line. | |
1154 Using the mouse only works when 'mouse' contains 'n' | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1155 or 'a'. |
7 | 1156 |
24752
1ce39e257f1b
patch 8.2.2914: cannot paste a block without adding padding
Bram Moolenaar <Bram@vim.org>
parents:
24103
diff
changeset
|
1157 ["x]zp or *zp* *zP* |
1ce39e257f1b
patch 8.2.2914: cannot paste a block without adding padding
Bram Moolenaar <Bram@vim.org>
parents:
24103
diff
changeset
|
1158 ["x]zP Like "p" and "P", except without adding trailing spaces |
1ce39e257f1b
patch 8.2.2914: cannot paste a block without adding padding
Bram Moolenaar <Bram@vim.org>
parents:
24103
diff
changeset
|
1159 when pasting a block. Thus the inserted text will not |
24866
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1160 always be a rectangle. Especially useful in |
f1121eb17e14
patch 8.2.2971: cannot yank a block without trailing spaces
Bram Moolenaar <Bram@vim.org>
parents:
24752
diff
changeset
|
1161 combination with |v_zy|. |
24752
1ce39e257f1b
patch 8.2.2914: cannot paste a block without adding padding
Bram Moolenaar <Bram@vim.org>
parents:
24103
diff
changeset
|
1162 |
7 | 1163 You can use these commands to copy text from one place to another. Do this |
1164 by first getting the text into a register with a yank, delete or change | |
1165 command, then inserting the register contents with a put command. You can | |
1166 also use these commands to move text from one file to another, because Vim | |
1167 preserves all registers when changing buffers (the CTRL-^ command is a quick | |
1168 way to toggle between two files). | |
1169 | |
1170 *linewise-register* *characterwise-register* | |
1171 You can repeat the put commands with "." (except for :put) and undo them. If | |
1172 the command that was used to get the text into the register was |linewise|, | |
1173 Vim inserts the text below ("p") or above ("P") the line where the cursor is. | |
1174 Otherwise Vim inserts the text after ("p") or before ("P") the cursor. With | |
1175 the ":put" command, Vim always inserts the text in the next line. You can | |
1176 exchange two characters with the command sequence "xp". You can exchange two | |
1177 lines with the command sequence "ddp". You can exchange two words with the | |
1178 command sequence "deep" (start with the cursor in the blank space before the | |
1179 first word). You can use the "']" or "`]" command after the put command to | |
1180 move the cursor to the end of the inserted text, or use "'[" or "`[" to move | |
1181 the cursor to the start. | |
1182 | |
1183 *put-Visual-mode* *v_p* *v_P* | |
1184 When using a put command like |p| or |P| in Visual mode, Vim will try to | |
1185 replace the selected text with the contents of the register. Whether this | |
1186 works well depends on the type of selection and the type of the text in the | |
1187 register. With blockwise selection it also depends on the size of the block | |
236 | 1188 and whether the corners are on an existing character. (Implementation detail: |
7 | 1189 it actually works by first putting the register after the selection and then |
236 | 1190 deleting the selection.) |
28714
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1191 With |p| the previously selected text is put in the unnamed register (and |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1192 possibly the selection and/or clipboard). This is useful if you want to put |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1193 that text somewhere else. But you cannot repeat the same change. |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1194 With |P| the unnamed register is not changed (and neither the selection or |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1195 clipboard), you can repeat the same change. But the deleted text cannot be |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1196 used. If you do need it you can use |p| with another register. E.g., yank |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1197 the text to copy, Visually select the text to replace and use "0p . You can |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1198 repeat this as many times as you like, and the unnamed register will be |
5eea8a249f86
patch 8.2.4881: "P" in Visual mode still changes some registers
Bram Moolenaar <Bram@vim.org>
parents:
28517
diff
changeset
|
1199 changed each time. |
30324 | 1200 *blockwise-put* |
1201 When a register contains text from one line (characterwise), using a | |
1202 blockwise Visual selection, putting that register will paste that text | |
1203 repeatedly in each of the selected lines, thus replacing the blockwise | |
1204 selected region by multiple copies of the register text. For example: | |
1205 - yank the word "TEXT" into a register with `yw` | |
1206 - select a visual block, marked with "v" in this text: | |
1207 aaavvaaa | |
1208 bbbvvbbb | |
1209 cccvvccc | |
1210 - press `p`, results in: | |
1211 aaaTEXTaaa | |
1212 bbbTEXTbbb | |
1213 cccTEXTccc | |
5365 | 1214 |
7 | 1215 *blockwise-register* |
1216 If you use a blockwise Visual mode command to get the text into the register, | |
1217 the block of text will be inserted before ("P") or after ("p") the cursor | |
1218 column in the current and next lines. Vim makes the whole block of text start | |
1219 in the same column. Thus the inserted text looks the same as when it was | |
1220 yanked or deleted. Vim may replace some <Tab> characters with spaces to make | |
1221 this happen. However, if the width of the block is not a multiple of a <Tab> | |
1222 width and the text after the inserted block contains <Tab>s, that text may be | |
1223 misaligned. | |
1224 | |
25973 | 1225 Use |zP|/|zp| to paste a blockwise yanked register without appending trailing |
1226 spaces. | |
1227 | |
7 | 1228 Note that after a characterwise yank command, Vim leaves the cursor on the |
1229 first yanked character that is closest to the start of the buffer. This means | |
1230 that "yl" doesn't move the cursor, but "yh" moves the cursor one character | |
1231 left. | |
1232 Rationale: In Vi the "y" command followed by a backwards motion would | |
1233 sometimes not move the cursor to the first yanked character, | |
1234 because redisplaying was skipped. In Vim it always moves to | |
1235 the first character, as specified by Posix. | |
1236 With a linewise yank command the cursor is put in the first line, but the | |
1237 column is unmodified, thus it may not be on the first yanked character. | |
1238 | |
18186 | 1239 There are ten types of registers: *registers* *{register}* *E354* |
7 | 1240 1. The unnamed register "" |
1241 2. 10 numbered registers "0 to "9 | |
1242 3. The small delete register "- | |
1243 4. 26 named registers "a to "z or "A to "Z | |
17372 | 1244 5. Three read-only registers ":, "., "% |
1245 6. Alternate buffer register "# | |
1246 7. The expression register "= | |
6557 | 1247 8. The selection and drop registers "*, "+ and "~ |
1248 9. The black hole register "_ | |
1249 10. Last search pattern register "/ | |
7 | 1250 |
1251 1. Unnamed register "" *quote_quote* *quotequote* | |
1252 Vim fills this register with text deleted with the "d", "c", "s", "x" commands | |
1253 or copied with the yank "y" command, regardless of whether or not a specific | |
8 | 1254 register was used (e.g. "xdd). This is like the unnamed register is pointing |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1255 to the last used register. Thus when appending using an uppercase register |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1256 name, the unnamed register contains the same text as the named register. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1257 An exception is the '_' register: "_dd does not store the deleted text in any |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1258 register. |
42 | 1259 Vim uses the contents of the unnamed register for any put command (p or P) |
1260 which does not specify a register. Additionally you can access it with the | |
1261 name '"'. This means you have to type two double quotes. Writing to the "" | |
1262 register writes to register "0. | |
7 | 1263 {Vi: register contents are lost when changing files, no '"'} |
1264 | |
8951
0bdeaf7092bc
commit https://github.com/vim/vim/commit/aa3b15dbebf333282503d6031e2f9ba6ee4398ed
Christian Brabandt <cb@256bit.org>
parents:
8497
diff
changeset
|
1265 2. Numbered registers "0 to "9 *quote_number* *quote0* *quote1* |
7 | 1266 *quote2* *quote3* *quote4* *quote9* |
1267 Vim fills these registers with text from yank and delete commands. | |
1268 Numbered register 0 contains the text from the most recent yank command, | |
1269 unless the command specified another register with ["x]. | |
1270 Numbered register 1 contains the text deleted by the most recent delete or | |
1271 change command, unless the command specified another register or the text is | |
1272 less than one line (the small delete register is used then). An exception is | |
42 | 1273 made for the delete operator with these movement commands: |%|, |(|, |)|, |`|, |
1274 |/|, |?|, |n|, |N|, |{| and |}|. Register "1 is always used then (this is Vi | |
1275 compatible). The "- register is used as well if the delete is within a line. | |
5362
ab1508486b12
Update runtime files. Add support for J.
Bram Moolenaar <bram@vim.org>
parents:
5340
diff
changeset
|
1276 Note that these characters may be mapped. E.g. |%| is mapped by the matchit |
5340 | 1277 plugin. |
7 | 1278 With each successive deletion or change, Vim shifts the previous contents |
1279 of register 1 into register 2, 2 into 3, and so forth, losing the previous | |
1280 contents of register 9. | |
1281 {Vi: numbered register contents are lost when changing files; register 0 does | |
1282 not exist} | |
1283 | |
1284 3. Small delete register "- *quote_-* *quote-* | |
1285 This register contains text from commands that delete less than one line, | |
1286 except when the command specifies a register with ["x]. | |
1287 | |
1288 4. Named registers "a to "z or "A to "Z *quote_alpha* *quotea* | |
1289 Vim fills these registers only when you say so. Specify them as lowercase | |
1290 letters to replace their previous contents or as uppercase letters to append | |
164 | 1291 to their previous contents. When the '>' flag is present in 'cpoptions' then |
1292 a line break is inserted before the appended text. | |
7 | 1293 |
6557 | 1294 5. Read-only registers ":, ". and "% |
29066 | 1295 These are '%', ':' and '.'. You can use them only with the "p", "P", |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1296 and ":put" commands and with CTRL-R. |
7 | 1297 *quote_.* *quote.* *E29* |
1298 ". Contains the last inserted text (the same as what is inserted | |
1299 with the insert mode commands CTRL-A and CTRL-@). Note: this | |
1300 doesn't work with CTRL-R on the command-line. It works a bit | |
1301 differently, like inserting the text instead of putting it | |
1302 ('textwidth' and other options affect what is inserted). | |
1303 *quote_%* *quote%* | |
1304 "% Contains the name of the current file. | |
1305 *quote_:* *quote:* *E30* | |
1306 ": Contains the most recent executed command-line. Example: Use | |
1307 "@:" to repeat the previous command-line command. | |
1308 The command-line is only stored in this register when at least | |
1309 one character of it was typed. Thus it remains unchanged if | |
1310 the command was completely from a mapping. | |
1311 {not available when compiled without the |+cmdline_hist| | |
1312 feature} | |
6557 | 1313 *quote_#* *quote#* |
1314 6. Alternate file register "# | |
1315 Contains the name of the alternate file for the current window. It will | |
1316 change how the |CTRL-^| command works. | |
1317 This register is writable, mainly to allow for restoring it after a plugin has | |
1318 changed it. It accepts buffer number: > | |
1319 let altbuf = bufnr(@#) | |
1320 ... | |
1321 let @# = altbuf | |
1322 It will give error |E86| if you pass buffer number and this buffer does not | |
1323 exist. | |
1324 It can also accept a match with an existing buffer name: > | |
1325 let @# = 'buffer_name' | |
1326 Error |E93| if there is more than one buffer matching the given name or |E94| | |
1327 if none of buffers matches the given name. | |
7 | 1328 |
6557 | 1329 7. Expression register "= *quote_=* *quote=* *@=* |
7 | 1330 This is not really a register that stores text, but is a way to use an |
1331 expression in commands which use a register. The expression register is | |
6647 | 1332 read-write. |
1333 | |
1334 When typing the '=' after " or CTRL-R the cursor moves to the command-line, | |
1335 where you can enter any expression (see |expression|). All normal | |
1336 command-line editing commands are available, including a special history for | |
1337 expressions. When you end the command-line by typing <CR>, Vim computes the | |
1338 result of the expression. If you end it with <Esc>, Vim abandons the | |
1339 expression. If you do not enter an expression, Vim uses the previous | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1340 expression (like with the "/" command). |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1341 |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1342 The expression must evaluate to a String. A Number is always automatically |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1343 converted to a String. For the "p" and ":put" command, if the result is a |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1344 Float it's converted into a String. If the result is a List each element is |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1345 turned into a String and used as a line. A Dictionary or FuncRef results in |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1346 an error message (use string() to convert). |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1347 |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1348 If the "= register is used for the "p" command, the String is split up at <NL> |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1349 characters. If the String ends in a <NL>, it is regarded as a linewise |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1350 register. |
7 | 1351 |
6557 | 1352 8. Selection and drop registers "*, "+ and "~ |
2207
b17bbfa96fa0
Add the settabvar() and gettabvar() functions.
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
1353 Use these registers for storing and retrieving the selected text for the GUI. |
7 | 1354 See |quotestar| and |quoteplus|. When the clipboard is not available or not |
571 | 1355 working, the unnamed register is used instead. For Unix systems the clipboard |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1356 is only available when the |+xterm_clipboard| feature is present. |
7 | 1357 |
1358 Note that there is only a distinction between "* and "+ for X11 systems. For | |
1359 an explanation of the difference, see |x11-selection|. Under MS-Windows, use | |
1360 of "* and "+ is actually synonymous and refers to the |gui-clipboard|. | |
1361 | |
1362 *quote_~* *quote~* *<Drop>* | |
1363 The read-only "~ register stores the dropped text from the last drag'n'drop | |
1364 operation. When something has been dropped onto Vim, the "~ register is | |
1365 filled in and the <Drop> pseudo key is sent for notification. You can remap | |
1366 this key if you want; the default action (for all modes) is to insert the | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1367 contents of the "~ register at the cursor position. |
9 | 1368 {only available when compiled with the |+dnd| feature, currently only with the |
7 | 1369 GTK GUI} |
1370 | |
1371 Note: The "~ register is only used when dropping plain text onto Vim. | |
1372 Drag'n'drop of URI lists is handled internally. | |
1373 | |
6557 | 1374 9. Black hole register "_ *quote_* |
7 | 1375 When writing to this register, nothing happens. This can be used to delete |
1376 text without affecting the normal registers. When reading from this register, | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1377 nothing is returned. |
7 | 1378 |
18186 | 1379 10. Last search pattern register "/ *quote_/* *quote/* |
7 | 1380 Contains the most recent search-pattern. This is used for "n" and 'hlsearch'. |
3492 | 1381 It is writable with `:let`, you can change it to have 'hlsearch' highlight |
7 | 1382 other matches without actually searching. You can't yank or delete into this |
1621 | 1383 register. The search direction is available in |v:searchforward|. |
6647 | 1384 Note that the value is restored when returning from a function |
1621 | 1385 |function-search-undo|. |
7 | 1386 |
1387 *@/* | |
3492 | 1388 You can write to a register with a `:let` command |:let-@|. Example: > |
7 | 1389 :let @/ = "the" |
1390 | |
1391 If you use a put command without specifying a register, Vim uses the register | |
1392 that was last filled (this is also the contents of the unnamed register). If | |
3492 | 1393 you are confused, use the `:dis` command to find out what Vim will put (this |
7 | 1394 command displays all named and numbered registers; the unnamed register is |
1395 labelled '"'). | |
1396 | |
1397 The next three commands always work on whole lines. | |
1398 | |
1399 :[range]co[py] {address} *:co* *:copy* | |
1400 Copy the lines given by [range] to below the line | |
1401 given by {address}. | |
1402 | |
1403 *:t* | |
1404 :t Synonym for copy. | |
26779 | 1405 This command is not supported in |Vim9| script, |
1406 because it is too easily confused with a variable | |
1407 name. | |
7 | 1408 |
1409 :[range]m[ove] {address} *:m* *:mo* *:move* *E134* | |
1410 Move the lines given by [range] to below the line | |
1411 given by {address}. | |
1412 | |
1413 ============================================================================== | |
1414 6. Formatting text *formatting* | |
1415 | |
1416 :[range]ce[nter] [width] *:ce* *:center* | |
1417 Center lines in [range] between [width] columns | |
1418 (default 'textwidth' or 80 when 'textwidth' is 0). | |
1419 | |
1420 :[range]ri[ght] [width] *:ri* *:right* | |
1421 Right-align lines in [range] at [width] columns | |
1422 (default 'textwidth' or 80 when 'textwidth' is 0). | |
1423 | |
1424 *:le* *:left* | |
1425 :[range]le[ft] [indent] | |
1426 Left-align lines in [range]. Sets the indent in the | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1427 lines to [indent] (default 0). |
7 | 1428 |
1429 *gq* | |
216 | 1430 gq{motion} Format the lines that {motion} moves over. |
667 | 1431 Formatting is done with one of three methods: |
1432 1. If 'formatexpr' is not empty the expression is | |
1433 evaluated. This can differ for each buffer. | |
670 | 1434 2. If 'formatprg' is not empty an external program |
667 | 1435 is used. |
843 | 1436 3. Otherwise formatting is done internally. |
667 | 1437 |
1438 In the third case the 'textwidth' option controls the | |
1439 length of each formatted line (see below). | |
216 | 1440 If the 'textwidth' option is 0, the formatted line |
1441 length is the screen width (with a maximum width of | |
667 | 1442 79). |
7 | 1443 The 'formatoptions' option controls the type of |
1444 formatting |fo-table|. | |
216 | 1445 The cursor is left on the first non-blank of the last |
1446 formatted line. | |
7 | 1447 NOTE: The "Q" command formerly performed this |
1448 function. If you still want to use "Q" for | |
1449 formatting, use this mapping: > | |
1450 :nnoremap Q gq | |
1451 | |
1452 gqgq *gqgq* *gqq* | |
2434
86532ee3ea41
Updated runtime files. Add logcheck filetype plugin. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
1453 gqq Format the current line. With a count format that |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1454 many lines. |
7 | 1455 |
1456 *v_gq* | |
1457 {Visual}gq Format the highlighted text. (for {Visual} see | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1458 |Visual-mode|). |
7 | 1459 |
1460 *gw* | |
1461 gw{motion} Format the lines that {motion} moves over. Similar to | |
1462 |gq| but puts the cursor back at the same position in | |
667 | 1463 the text. However, 'formatprg' and 'formatexpr' are |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1464 not used. |
7 | 1465 |
9 | 1466 gwgw *gwgw* *gww* |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1467 gww Format the current line as with "gw". |
9 | 1468 |
1469 *v_gw* | |
1470 {Visual}gw Format the highlighted text as with "gw". (for | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
15878
diff
changeset
|
1471 {Visual} see |Visual-mode|). |
9 | 1472 |
7 | 1473 Example: To format the current paragraph use: *gqap* > |
1474 gqap | |
1475 | |
1476 The "gq" command leaves the cursor in the line where the motion command takes | |
1477 the cursor. This allows you to repeat formatting repeated with ".". This | |
1478 works well with "gqj" (format current and next line) and "gq}" (format until | |
1479 end of paragraph). Note: When 'formatprg' is set, "gq" leaves the cursor on | |
1480 the first formatted line (as with using a filter command). | |
1481 | |
1482 If you want to format the current paragraph and continue where you were, use: > | |
1483 gwap | |
1484 If you always want to keep paragraphs formatted you may want to add the 'a' | |
1485 flag to 'formatoptions'. See |auto-format|. | |
1486 | |
1487 If the 'autoindent' option is on, Vim uses the indent of the first line for | |
1488 the following lines. | |
1489 | |
1490 Formatting does not change empty lines (but it does change lines with only | |
1491 white space!). | |
1492 | |
1493 The 'joinspaces' option is used when lines are joined together. | |
1494 | |
667 | 1495 You can set the 'formatexpr' option to an expression or the 'formatprg' option |
1496 to the name of an external program for Vim to use for text formatting. The | |
1497 'textwidth' and other options have no effect on formatting by an external | |
1498 program. | |
7 | 1499 |
13912 | 1500 *format-formatexpr* |
14519 | 1501 The 'formatexpr' option can be set to a Vim script function that performs |
13912 | 1502 reformatting of the buffer. This should usually happen in an |ftplugin|, |
1503 since formatting is highly dependent on the type of file. It makes | |
1504 sense to use an |autoload| script, so the corresponding script is only loaded | |
1505 when actually needed and the script should be called <filetype>format.vim. | |
1506 | |
1507 For example, the XML filetype plugin distributed with Vim in the $VIMRUNTIME | |
1508 directory, sets the 'formatexpr' option to: > | |
1509 | |
1510 setlocal formatexpr=xmlformat#Format() | |
1511 | |
1512 That means, you will find the corresponding script, defining the | |
1513 xmlformat#Format() function, in the directory: | |
1514 `$VIMRUNTIME/autoload/xmlformat.vim` | |
1515 | |
1516 Here is an example script that removes trailing whitespace from the selected | |
1517 text. Put it in your autoload directory, e.g. ~/.vim/autoload/format.vim: > | |
1518 | |
1519 func! format#Format() | |
1520 " only reformat on explicit gq command | |
1521 if mode() != 'n' | |
19968 | 1522 " fall back to Vim's internal reformatting |
13912 | 1523 return 1 |
1524 endif | |
1525 let lines = getline(v:lnum, v:lnum + v:count - 1) | |
1526 call map(lines, {key, val -> substitute(val, '\s\+$', '', 'g')}) | |
1527 call setline('.', lines) | |
1528 | |
1529 " do not run internal formatter! | |
1530 return 0 | |
1531 endfunc | |
1532 | |
1533 You can then enable the formatting by executing: > | |
1534 setlocal formatexpr=format#Format() | |
14519 | 1535 |
13912 | 1536 Note: this function explicitly returns non-zero when called from insert mode |
1537 (which basically means, text is inserted beyond the 'textwidth' limit). This | |
1538 causes Vim to fall back to reformat the text by using the internal formatter. | |
1539 | |
1540 However, if the |gq| command is used to reformat the text, the function | |
1541 will receive the selected lines, trim trailing whitespace from those lines and | |
1542 put them back in place. If you are going to split single lines into multiple | |
1543 lines, be careful not to overwrite anything. | |
1544 | |
1545 If you want to allow reformatting of text from insert or replace mode, one has | |
1546 to be very careful, because the function might be called recursively. For | |
1547 debugging it helps to set the 'debug' option. | |
1548 | |
7 | 1549 *right-justify* |
1550 There is no command in Vim to right justify text. You can do it with | |
1551 an external command, like "par" (e.g.: "!}par" to format until the end of the | |
1552 paragraph) or set 'formatprg' to "par". | |
1553 | |
1554 *format-comments* | |
1621 | 1555 An overview of comment formatting is in section |30.6| of the user manual. |
1556 | |
1557 Vim can automatically insert and format comments in a special way. Vim | |
1558 recognizes a comment by a specific string at the start of the line (ignoring | |
1559 white space). Three types of comments can be used: | |
7 | 1560 |
1561 - A comment string that repeats at the start of each line. An example is the | |
1562 type of comment used in shell scripts, starting with "#". | |
1563 - A comment string that occurs only in the first line, not in the following | |
1564 lines. An example is this list with dashes. | |
1565 - Three-piece comments that have a start string, an end string, and optional | |
1566 lines in between. The strings for the start, middle and end are different. | |
1621 | 1567 An example is the C style comment: |
7 | 1568 /* |
1569 * this is a C comment | |
1570 */ | |
1571 | |
1572 The 'comments' option is a comma-separated list of parts. Each part defines a | |
1573 type of comment string. A part consists of: | |
1574 {flags}:{string} | |
1575 | |
1576 {string} is the literal text that must appear. | |
1577 | |
1578 {flags}: | |
1579 n Nested comment. Nesting with mixed parts is allowed. If 'comments' | |
1580 is "n:),n:>" a line starting with "> ) >" is a comment. | |
1581 | |
1582 b Blank (<Space>, <Tab> or <EOL>) required after {string}. | |
1583 | |
1584 f Only the first line has the comment string. Do not repeat comment on | |
1585 the next line, but preserve indentation (e.g., a bullet-list). | |
1586 | |
1587 s Start of three-piece comment | |
1588 | |
1589 m Middle of a three-piece comment | |
1590 | |
1591 e End of a three-piece comment | |
1592 | |
1621 | 1593 l Left align. Used together with 's' or 'e', the leftmost character of |
1594 start or end will line up with the leftmost character from the middle. | |
1595 This is the default and can be omitted. See below for more details. | |
7 | 1596 |
1621 | 1597 r Right align. Same as above but rightmost instead of leftmost. See |
1598 below for more details. | |
7 | 1599 |
1621 | 1600 O Don't consider this comment for the "O" command. |
7 | 1601 |
1602 x Allows three-piece comments to be ended by just typing the last | |
1621 | 1603 character of the end-comment string as the first action on a new |
1604 line when the middle-comment string has been inserted automatically. | |
1605 See below for more details. | |
7 | 1606 |
1607 {digits} | |
1621 | 1608 When together with 's' or 'e': add {digit} amount of offset to an |
1609 automatically inserted middle or end comment leader. The offset begins | |
1610 from a left alignment. See below for more details. | |
7 | 1611 |
1612 -{digits} | |
1613 Like {digits} but reduce the indent. This only works when there is | |
1614 some indent for the start or end part that can be removed. | |
1615 | |
1616 When a string has none of the 'f', 's', 'm' or 'e' flags, Vim assumes the | |
1617 comment string repeats at the start of each line. The flags field may be | |
1618 empty. | |
1619 | |
1620 Any blank space in the text before and after the {string} is part of the | |
1621 {string}, so do not include leading or trailing blanks unless the blanks are a | |
1622 required part of the comment string. | |
1623 | |
1624 When one comment leader is part of another, specify the part after the whole. | |
1625 For example, to include both "-" and "->", use > | |
1626 :set comments=f:->,f:- | |
1627 | |
1628 A three-piece comment must always be given as start,middle,end, with no other | |
1629 parts in between. An example of a three-piece comment is > | |
1630 sr:/*,mb:*,ex:*/ | |
1631 for C-comments. To avoid recognizing "*ptr" as a comment, the middle string | |
1632 includes the 'b' flag. For three-piece comments, Vim checks the text after | |
1633 the start and middle strings for the end string. If Vim finds the end string, | |
1634 the comment does not continue on the next line. Three-piece comments must | |
1635 have a middle string because otherwise Vim can't recognize the middle lines. | |
1636 | |
1637 Notice the use of the "x" flag in the above three-piece comment definition. | |
1638 When you hit Return in a C-comment, Vim will insert the middle comment leader | |
1621 | 1639 for the new line: " * ". To close this comment you just have to type "/" |
7 | 1640 before typing anything else on the new line. This will replace the |
1621 | 1641 middle-comment leader with the end-comment leader and apply any specified |
6647 | 1642 alignment, leaving just " */". There is no need to hit Backspace first. |
1621 | 1643 |
6647 | 1644 When there is a match with a middle part, but there also is a matching end |
1645 part which is longer, the end part is used. This makes a C style comment work | |
2826 | 1646 without requiring the middle part to end with a space. |
1621 | 1647 |
1648 Here is an example of alignment flags at work to make a comment stand out | |
2826 | 1649 (kind of looks like a 1 too). Consider comment string: > |
1650 :set comments=sr:/***,m:**,ex-2:******/ | |
1651 < | |
1652 /*** ~ | |
1653 **<--right aligned from "r" flag ~ | |
1654 ** ~ | |
1655 offset 2 spaces for the "-2" flag--->** ~ | |
1656 ******/ ~ | |
1621 | 1657 In this case, the first comment was typed, then return was pressed 4 times, |
1658 then "/" was pressed to end the comment. | |
7 | 1659 |
1621 | 1660 Here are some finer points of three part comments. There are three times when |
1661 alignment and offset flags are taken into consideration: opening a new line | |
1662 after a start-comment, opening a new line before an end-comment, and | |
1663 automatically ending a three-piece comment. The end alignment flag has a | |
1664 backwards perspective; the result is that the same alignment flag used with | |
1665 "s" and "e" will result in the same indent for the starting and ending pieces. | |
1666 Only one alignment per comment part is meant to be used, but an offset number | |
1667 will override the "r" and "l" flag. | |
1668 | |
1669 Enabling 'cindent' will override the alignment flags in many cases. | |
1670 Reindenting using a different method like |gq| or |=| will not consult | |
1671 alignment flags either. The same behaviour can be defined in those other | |
1672 formatting options. One consideration is that 'cindent' has additional options | |
1673 for context based indenting of comments but cannot replicate many three piece | |
2826 | 1674 indent alignments. However, 'indentexpr' has the ability to work better with |
1675 three piece comments. | |
1621 | 1676 |
1677 Other examples: > | |
7 | 1678 "b:*" Includes lines starting with "*", but not if the "*" is |
1679 followed by a non-blank. This avoids a pointer dereference | |
1680 like "*str" to be recognized as a comment. | |
1681 "n:>" Includes a line starting with ">", ">>", ">>>", etc. | |
1682 "fb:-" Format a list that starts with "- ". | |
1683 | |
1684 By default, "b:#" is included. This means that a line that starts with | |
1685 "#include" is not recognized as a comment line. But a line that starts with | |
1686 "# define" is recognized. This is a compromise. | |
1687 | |
1688 *fo-table* | |
1689 You can use the 'formatoptions' option to influence how Vim formats text. | |
1690 'formatoptions' is a string that can contain any of the letters below. The | |
1691 default setting is "tcq". You can separate the option letters with commas for | |
1692 readability. | |
1693 | |
1694 letter meaning when present in 'formatoptions' ~ | |
23737 | 1695 *fo-t* |
28765
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1696 t Auto-wrap text using 'textwidth' |
23737 | 1697 *fo-c* |
28765
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1698 c Auto-wrap comments using 'textwidth', inserting the current comment |
7 | 1699 leader automatically. |
23737 | 1700 *fo-r* |
7 | 1701 r Automatically insert the current comment leader after hitting |
1702 <Enter> in Insert mode. | |
23737 | 1703 *fo-o* |
7 | 1704 o Automatically insert the current comment leader after hitting 'o' or |
26847 | 1705 'O' in Normal mode. In case comment is unwanted in a specific place |
1706 use CTRL-U to quickly delete it. |i_CTRL-U| | |
28765
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1707 *fo-/* |
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1708 / When 'o' is included: do not insert the comment leader for a // |
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1709 comment after a statement, only when // is at the start of the line. |
23737 | 1710 *fo-q* |
7 | 1711 q Allow formatting of comments with "gq". |
1712 Note that formatting will not change blank lines or lines containing | |
1713 only the comment leader. A new paragraph starts after such a line, | |
1714 or when the comment leader changes. | |
23737 | 1715 *fo-w* |
7 | 1716 w Trailing white space indicates a paragraph continues in the next line. |
1717 A line that ends in a non-white character ends a paragraph. | |
23737 | 1718 *fo-a* |
7 | 1719 a Automatic formatting of paragraphs. Every time text is inserted or |
1720 deleted the paragraph will be reformatted. See |auto-format|. | |
1721 When the 'c' flag is present this only happens for recognized | |
1722 comments. | |
23737 | 1723 *fo-n* |
41 | 1724 n When formatting text, recognize numbered lists. This actually uses |
1725 the 'formatlistpat' option, thus any kind of list can be used. The | |
1726 indent of the text after the number is used for the next line. The | |
1621 | 1727 default is to find a number, optionally followed by '.', ':', ')', |
41 | 1728 ']' or '}'. Note that 'autoindent' must be set too. Doesn't work |
1729 well together with "2". | |
7 | 1730 Example: > |
1731 1. the first item | |
1732 wraps | |
1733 2. the second item | |
23737 | 1734 < *fo-2* |
7 | 1735 2 When formatting text, use the indent of the second line of a paragraph |
1736 for the rest of the paragraph, instead of the indent of the first | |
1737 line. This supports paragraphs in which the first line has a | |
1738 different indent than the rest. Note that 'autoindent' must be set | |
1739 too. Example: > | |
1740 first line of a paragraph | |
1741 second line of the same paragraph | |
1742 third line. | |
3682 | 1743 < This also works inside comments, ignoring the comment leader. |
23737 | 1744 *fo-v* |
7 | 1745 v Vi-compatible auto-wrapping in insert mode: Only break a line at a |
1746 blank that you have entered during the current insert command. (Note: | |
1747 this is not 100% Vi compatible. Vi has some "unexpected features" or | |
1748 bugs in this area. It uses the screen column instead of the line | |
1749 column.) | |
23737 | 1750 *fo-b* |
7 | 1751 b Like 'v', but only auto-wrap if you enter a blank at or before |
1752 the wrap margin. If the line was longer than 'textwidth' when you | |
1753 started the insert, or you do not enter a blank in the insert before | |
1754 reaching 'textwidth', Vim does not perform auto-wrapping. | |
23737 | 1755 *fo-l* |
7 | 1756 l Long lines are not broken in insert mode: When a line was longer than |
1757 'textwidth' when the insert command started, Vim does not | |
1758 automatically format it. | |
23737 | 1759 *fo-m* |
21991 | 1760 m Also break at a multibyte character above 255. This is useful for |
7 | 1761 Asian text where every character is a word on its own. |
23737 | 1762 *fo-M* |
21991 | 1763 M When joining lines, don't insert a space before or after a multibyte |
7 | 1764 character. Overrules the 'B' flag. |
23737 | 1765 *fo-B* |
21991 | 1766 B When joining lines, don't insert a space between two multibyte |
7 | 1767 characters. Overruled by the 'M' flag. |
23737 | 1768 *fo-1* |
7 | 1769 1 Don't break a line after a one-letter word. It's broken before it |
1770 instead (if possible). | |
23737 | 1771 *fo-]* |
28765
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1772 ] Respect 'textwidth' rigorously. With this flag set, no line can be |
38698deeda58
patch 8.2.4907: some users do not want a line comment always inserted
Bram Moolenaar <Bram@vim.org>
parents:
28714
diff
changeset
|
1773 longer than 'textwidth', unless line-break-prohibition rules make this |
20695
cea8ae407452
patch 8.2.0901: formatting CJK text isn't optimal
Bram Moolenaar <Bram@vim.org>
parents:
20241
diff
changeset
|
1774 impossible. Mainly for CJK scripts and works only if 'encoding' is |
cea8ae407452
patch 8.2.0901: formatting CJK text isn't optimal
Bram Moolenaar <Bram@vim.org>
parents:
20241
diff
changeset
|
1775 "utf-8". |
23737 | 1776 *fo-j* |
3562 | 1777 j Where it makes sense, remove a comment leader when joining lines. For |
1778 example, joining: | |
1779 int i; // the index ~ | |
1780 // in the list ~ | |
1781 Becomes: | |
1782 int i; // the index in the list ~ | |
23737 | 1783 *fo-p* |
15440
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1784 p Don't break lines at single spaces that follow periods. This is |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1785 intended to complement 'joinspaces' and |cpo-J|, for prose with |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1786 sentences separated by two spaces. For example, with 'textwidth' set |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1787 to 28: > |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1788 Surely you're joking, Mr. Feynman! |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1789 < Becomes: > |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1790 Surely you're joking, |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1791 Mr. Feynman! |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1792 < Instead of: > |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1793 Surely you're joking, Mr. |
5ecac7734184
patch 8.1.0728: cannot avoid breaking after a single space.
Bram Moolenaar <Bram@vim.org>
parents:
15194
diff
changeset
|
1794 Feynman! |
7 | 1795 |
1796 | |
1797 With 't' and 'c' you can specify when Vim performs auto-wrapping: | |
1798 value action ~ | |
1799 "" no automatic formatting (you can use "gq" for manual formatting) | |
1800 "t" automatic formatting of text, but not comments | |
1801 "c" automatic formatting for comments, but not text (good for C code) | |
1802 "tc" automatic formatting for text and comments | |
1803 | |
867 | 1804 Note that when 'textwidth' is 0, Vim does no automatic formatting anyway (but |
1805 does insert comment leaders according to the 'comments' option). An exception | |
1806 is when the 'a' flag is present. |auto-format| | |
7 | 1807 |
1808 Note that when 'paste' is on, Vim does no formatting at all. | |
1809 | |
1810 Note that 'textwidth' can be non-zero even if Vim never performs auto-wrapping; | |
1811 'textwidth' is still useful for formatting with "gq". | |
1812 | |
1813 If the 'comments' option includes "/*", "*" and/or "*/", then Vim has some | |
1814 built in stuff to treat these types of comments a bit more cleverly. | |
1815 Opening a new line before or after "/*" or "*/" (with 'r' or 'o' present in | |
1816 'formatoptions') gives the correct start of the line automatically. The same | |
236 | 1817 happens with formatting and auto-wrapping. Opening a line after a line |
7 | 1818 starting with "/*" or "*" and containing "*/", will cause no comment leader to |
1819 be inserted, and the indent of the new line is taken from the line containing | |
1820 the start of the comment. | |
1821 E.g.: | |
1822 /* ~ | |
1823 * Your typical comment. ~ | |
1824 */ ~ | |
1825 The indent on this line is the same as the start of the above | |
1826 comment. | |
1827 | |
1828 All of this should be really cool, especially in conjunction with the new | |
1829 :autocmd command to prepare different settings for different types of file. | |
1830 | |
1831 Some examples: | |
1832 for C code (only format comments): > | |
1833 :set fo=croq | |
1834 < for Mail/news (format all, don't start comment with "o" command): > | |
1835 :set fo=tcrq | |
1836 < | |
1837 | |
3492 | 1838 Automatic formatting *auto-format* *autoformat* |
7 | 1839 |
1840 When the 'a' flag is present in 'formatoptions' text is formatted | |
21499 | 1841 automatically when inserting text or deleting text. This works nicely for |
7 | 1842 editing text paragraphs. A few hints on how to use this: |
1843 | |
1844 - You need to properly define paragraphs. The simplest is paragraphs that are | |
1845 separated by a blank line. When there is no separating blank line, consider | |
1846 using the 'w' flag and adding a space at the end of each line in the | |
1847 paragraphs except the last one. | |
1848 | |
1849 - You can set the 'formatoptions' based on the type of file |filetype| or | |
1850 specifically for one file with a |modeline|. | |
1851 | |
1852 - Set 'formatoptions' to "aw2tq" to make text with indents like this: | |
1853 | |
32061 | 1854 bla bla foobar bla |
7 | 1855 bla foobar bla foobar bla |
32061 | 1856 bla bla foobar bla |
7 | 1857 bla foobar bla bla foobar |
1858 | |
1859 - Add the 'c' flag to only auto-format comments. Useful in source code. | |
1860 | |
867 | 1861 - Set 'textwidth' to the desired width. If it is zero then 79 is used, or the |
1862 width of the screen if this is smaller. | |
1863 | |
7 | 1864 And a few warnings: |
1865 | |
1866 - When part of the text is not properly separated in paragraphs, making | |
1867 changes in this text will cause it to be formatted anyway. Consider doing > | |
1868 | |
1869 :set fo-=a | |
1870 | |
1871 - When using the 'w' flag (trailing space means paragraph continues) and | |
1872 deleting the last line of a paragraph with |dd|, the paragraph will be | |
1873 joined with the next one. | |
1874 | |
1875 - Changed text is saved for undo. Formatting is also a change. Thus each | |
1876 format action saves text for undo. This may consume quite a lot of memory. | |
1877 | |
1878 - Formatting a long paragraph and/or with complicated indenting may be slow. | |
1879 | |
282 | 1880 ============================================================================== |
1881 7. Sorting text *sorting* | |
1882 | |
1883 Vim has a sorting function and a sorting command. The sorting function can be | |
5747 | 1884 found here: |sort()|, |uniq()|. |
282 | 1885 |
1886 *:sor* *:sort* | |
22770
3e4981de5636
patch 8.2.1933: cannot sort using locale ordering
Bram Moolenaar <Bram@vim.org>
parents:
21991
diff
changeset
|
1887 :[range]sor[t][!] [b][f][i][l][n][o][r][u][x] [/{pattern}/] |
586 | 1888 Sort lines in [range]. When no range is given all |
1889 lines are sorted. | |
282 | 1890 |
1891 With [!] the order is reversed. | |
1892 | |
1893 With [i] case is ignored. | |
1894 | |
22824 | 1895 With [l] sort uses the current collation locale. |
1896 Implementation details: strcoll() is used to compare | |
1897 strings. See |:language| to check or set the collation | |
1898 locale. Example: > | |
1899 :language collate en_US.UTF-8 | |
1900 :%sort l | |
1901 < |v:collate| can also used to check the current locale. | |
1902 Sorting using the locale typically ignores case. | |
1903 This does not work properly on Mac. | |
22770
3e4981de5636
patch 8.2.1933: cannot sort using locale ordering
Bram Moolenaar <Bram@vim.org>
parents:
21991
diff
changeset
|
1904 |
7689
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1905 Options [n][f][x][o][b] are mutually exclusive. |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1906 |
293 | 1907 With [n] sorting is done on the first decimal number |
826 | 1908 in the line (after or inside a {pattern} match). |
1698 | 1909 One leading '-' is included in the number. |
293 | 1910 |
7689
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1911 With [f] sorting is done on the Float in the line. |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1912 The value of Float is determined similar to passing |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1913 the text (after or inside a {pattern} match) to |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1914 str2float() function. This option is available only |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1915 if Vim was compiled with Floating point support. |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1916 |
293 | 1917 With [x] sorting is done on the first hexadecimal |
826 | 1918 number in the line (after or inside a {pattern} |
1919 match). A leading "0x" or "0X" is ignored. | |
1698 | 1920 One leading '-' is included in the number. |
293 | 1921 |
1922 With [o] sorting is done on the first octal number in | |
826 | 1923 the line (after or inside a {pattern} match). |
293 | 1924 |
7447
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
1925 With [b] sorting is done on the first binary number in |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
1926 the line (after or inside a {pattern} match). |
ad432f8f68fb
commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents:
7183
diff
changeset
|
1927 |
7689
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1928 With [u] (u stands for unique) only keep the first of |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1929 a sequence of identical lines (ignoring case when [i] |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1930 is used). Without this flag, a sequence of identical |
20dc2763a3b9
commit https://github.com/vim/vim/commit/f7edf40448a09e04eec3bd05e043f7fea93b07c9
Christian Brabandt <cb@256bit.org>
parents:
7477
diff
changeset
|
1931 lines will be kept in their original order. |
293 | 1932 Note that leading and trailing white space may cause |
1933 lines to be different. | |
282 | 1934 |
826 | 1935 When /{pattern}/ is specified and there is no [r] flag |
1936 the text matched with {pattern} is skipped, so that | |
1937 you sort on what comes after the match. | |
22958 | 1938 'ignorecase' applies to the pattern, but 'smartcase' |
1939 is not used. | |
282 | 1940 Instead of the slash any non-letter can be used. |
1941 For example, to sort on the second comma-separated | |
1942 field: > | |
1943 :sort /[^,]*,/ | |
1944 < To sort on the text at virtual column 10 (thus | |
1945 ignoring the difference between tabs and spaces): > | |
1946 :sort /.*\%10v/ | |
824 | 1947 < To sort on the first number in the line, no matter |
1948 what is in front of it: > | |
1621 | 1949 :sort /.\{-}\ze\d/ |
1950 < (Explanation: ".\{-}" matches any text, "\ze" sets the | |
1951 end of the match and \d matches a digit.) | |
1952 With [r] sorting is done on the matching {pattern} | |
826 | 1953 instead of skipping past it as described above. |
1954 For example, to sort on only the first three letters | |
1955 of each line: > | |
1956 :sort /\a\a\a/ r | |
1957 | |
1958 < If a {pattern} is used, any lines which don't have a | |
1959 match for {pattern} are kept in their current order, | |
1960 but separate from the lines which do match {pattern}. | |
1961 If you sorted in reverse, they will be in reverse | |
1962 order after the sorted lines, otherwise they will be | |
1963 in their original order, right before the sorted | |
1964 lines. | |
1965 | |
1314 | 1966 If {pattern} is empty (e.g. // is specified), the |
1967 last search pattern is used. This allows trying out | |
1968 a pattern first. | |
1969 | |
3492 | 1970 Note that using `:sort` with `:global` doesn't sort the matching lines, it's |
293 | 1971 quite useless. |
7 | 1972 |
22770
3e4981de5636
patch 8.2.1933: cannot sort using locale ordering
Bram Moolenaar <Bram@vim.org>
parents:
21991
diff
changeset
|
1973 `:sort` does not use the current locale unless the l flag is used. |
6032
b8f703a4e55f
Updated runtime files. Overhauled HTML indent script.
Bram Moolenaar <bram@vim.org>
parents:
5747
diff
changeset
|
1974 Vim does do a "stable" sort. |
359 | 1975 |
826 | 1976 The sorting can be interrupted, but if you interrupt it too late in the |
1977 process you may end up with duplicated lines. This also depends on the system | |
1978 library function used. | |
481 | 1979 |
14421 | 1980 vim:tw=78:ts=8:noet:ft=help:norl: |