Mercurial > vim
annotate runtime/doc/motion.txt @ 34221:f2d904d44ebd v9.1.0059
patch 9.1.0059: No event triggered before creating a window
Commit: https://github.com/vim/vim/commit/1f47db75fdc8c53c5c778b26ecfa0942ac801f22
Author: Sergey Vlasov <sergey@vlasov.me>
Date: Thu Jan 25 23:07:00 2024 +0100
patch 9.1.0059: No event triggered before creating a window
Problem: No event is triggered before creating a window.
(Sergey Vlasov)
Solution: Add the WinNewPre event (Sergey Vlasov)
fixes: #10635
closes: #12761
Signed-off-by: Sergey Vlasov <sergey@vlasov.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 25 Jan 2024 23:15:04 +0100 |
parents | 21fc3f1676be |
children | 4f2e543e9e5a |
rev | line source |
---|---|
34057
4635e43f2c6f
patch 9.1.0000: Vim 9.1 release
Christian Brabandt <cb@256bit.org>
parents:
34020
diff
changeset
|
1 *motion.txt* For Vim version 9.1. Last change: 2023 Dec 27 |
7 | 2 |
3 | |
4 VIM REFERENCE MANUAL by Bram Moolenaar | |
5 | |
6 | |
7 Cursor motions *cursor-motions* *navigation* | |
8 | |
9 These commands move the cursor position. If the new position is off of the | |
10 screen, the screen is scrolled to show the cursor (see also 'scrolljump' and | |
11 'scrolloff' options). | |
12 | |
13 1. Motions and operators |operator| | |
14 2. Left-right motions |left-right-motions| | |
15 3. Up-down motions |up-down-motions| | |
16 4. Word motions |word-motions| | |
17 5. Text object motions |object-motions| | |
18 6. Text object selection |object-select| | |
19 7. Marks |mark-motions| | |
20 8. Jumps |jump-motions| | |
21 9. Various motions |various-motions| | |
22 | |
23 General remarks: | |
24 | |
25 If you want to know where you are in the file use the "CTRL-G" command | |
26 |CTRL-G| or the "g CTRL-G" command |g_CTRL-G|. If you set the 'ruler' option, | |
27 the cursor position is continuously shown in the status line (which slows down | |
28 Vim a little). | |
29 | |
30 Experienced users prefer the hjkl keys because they are always right under | |
31 their fingers. Beginners often prefer the arrow keys, because they do not | |
32 know what the hjkl keys do. The mnemonic value of hjkl is clear from looking | |
33 at the keyboard. Think of j as an arrow pointing downwards. | |
34 | |
35 The 'virtualedit' option can be set to make it possible to move the cursor to | |
28379 | 36 positions where there is no character or within a multi-column character (like |
37 a tab). | |
7 | 38 |
39 ============================================================================== | |
40 1. Motions and operators *operator* | |
41 | |
42 The motion commands can be used after an operator command, to have the command | |
43 operate on the text that was moved over. That is the text between the cursor | |
44 position before and after the motion. Operators are generally used to delete | |
45 or change text. The following operators are available: | |
46 | |
47 |c| c change | |
48 |d| d delete | |
49 |y| y yank into register (does not change the text) | |
50 |~| ~ swap case (only if 'tildeop' is set) | |
51 |g~| g~ swap case | |
52 |gu| gu make lowercase | |
53 |gU| gU make uppercase | |
54 |!| ! filter through an external program | |
55 |=| = filter through 'equalprg' or C-indenting if empty | |
56 |gq| gq text formatting | |
16808 | 57 |gw| gw text formatting with no cursor movement |
7 | 58 |g?| g? ROT13 encoding |
59 |>| > shift right | |
60 |<| < shift left | |
61 |zf| zf define a fold | |
3713 | 62 |g@| g@ call function set with the 'operatorfunc' option |
24911 | 63 *motion-count-multiplied* |
7 | 64 If the motion includes a count and the operator also had a count before it, |
65 the two counts are multiplied. For example: "2d3w" deletes six words. | |
24911 | 66 *operator-doubled* |
67 When doubling the operator it operates on a line. When using a count, before | |
68 or after the first character, that many lines are operated upon. Thus `3dd` | |
69 deletes three lines. A count before and after the first character is | |
70 multiplied, thus `2y3y` yanks six lines. | |
7 | 71 |
72 After applying the operator the cursor is mostly left at the start of the text | |
73 that was operated upon. For example, "yfe" doesn't move the cursor, but "yFe" | |
74 moves the cursor leftwards to the "e" where the yank started. | |
75 | |
76 *linewise* *characterwise* | |
77 The operator either affects whole lines, or the characters between the start | |
78 and end position. Generally, motions that move between lines affect lines | |
79 (are linewise), and motions that move within a line affect characters (are | |
80 characterwise). However, there are some exceptions. | |
81 | |
82 *exclusive* *inclusive* | |
456 | 83 A character motion is either inclusive or exclusive. When inclusive, the |
84 start and end position of the motion are included in the operation. When | |
85 exclusive, the last character towards the end of the buffer is not included. | |
86 Linewise motions always include the start and end position. | |
7 | 87 |
456 | 88 Which motions are linewise, inclusive or exclusive is mentioned with the |
89 command. There are however, two general exceptions: | |
7 | 90 1. If the motion is exclusive and the end of the motion is in column 1, the |
91 end of the motion is moved to the end of the previous line and the motion | |
92 becomes inclusive. Example: "}" moves to the first line after a paragraph, | |
93 but "d}" will not include that line. | |
20 | 94 *exclusive-linewise* |
7 | 95 2. If the motion is exclusive, the end of the motion is in column 1 and the |
96 start of the motion was at or before the first non-blank in the line, the | |
97 motion becomes linewise. Example: If a paragraph begins with some blanks | |
98 and you do "d}" while standing on the first non-blank, all the lines of | |
99 the paragraph are deleted, including the blanks. If you do a put now, the | |
100 deleted lines will be inserted below the cursor position. | |
101 | |
102 Note that when the operator is pending (the operator command is typed, but the | |
103 motion isn't yet), a special set of mappings can be used. See |:omap|. | |
104 | |
105 Instead of first giving the operator and then a motion you can use Visual | |
106 mode: mark the start of the text with "v", move the cursor to the end of the | |
107 text that is to be affected and then hit the operator. The text between the | |
108 start and the cursor position is highlighted, so you can see what text will | |
109 be operated upon. This allows much more freedom, but requires more key | |
110 strokes and has limited redo functionality. See the chapter on Visual mode | |
111 |Visual-mode|. | |
112 | |
113 You can use a ":" command for a motion. For example "d:call FindEnd()". | |
4229 | 114 But this can't be repeated with "." if the command is more than one line. |
7 | 115 This can be repeated: > |
116 d:call search("f")<CR> | |
117 This cannot be repeated: > | |
118 d:if 1<CR> | |
119 call search("f")<CR> | |
120 endif<CR> | |
4229 | 121 Note that when using ":" any motion becomes characterwise exclusive. |
7 | 122 |
15281 | 123 *forced-motion* |
7 | 124 FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE |
125 | |
126 When a motion is not of the type you would like to use, you can force another | |
127 type by using "v", "V" or CTRL-V just after the operator. | |
128 Example: > | |
129 dj | |
130 deletes two lines > | |
131 dvj | |
132 deletes from the cursor position until the character below the cursor > | |
133 d<C-V>j | |
134 deletes the character under the cursor and the character below the cursor. > | |
135 | |
136 Be careful with forcing a linewise movement to be used characterwise or | |
137 blockwise, the column may not always be defined. | |
138 | |
139 *o_v* | |
140 v When used after an operator, before the motion command: Force | |
141 the operator to work characterwise, also when the motion is | |
142 linewise. If the motion was linewise, it will become | |
143 |exclusive|. | |
144 If the motion already was characterwise, toggle | |
145 inclusive/exclusive. This can be used to make an exclusive | |
146 motion inclusive and an inclusive motion exclusive. | |
147 | |
148 *o_V* | |
149 V When used after an operator, before the motion command: Force | |
150 the operator to work linewise, also when the motion is | |
151 characterwise. | |
152 | |
153 *o_CTRL-V* | |
154 CTRL-V When used after an operator, before the motion command: Force | |
155 the operator to work blockwise. This works like Visual block | |
156 mode selection, with the corners defined by the cursor | |
157 position before and after the motion. | |
158 | |
159 ============================================================================== | |
160 2. Left-right motions *left-right-motions* | |
161 | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
162 These commands move the cursor to the specified column in the current line. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
163 They stop at the first column and at the end of the line, except "$", which |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
164 may move to one of the next lines. See 'whichwrap' option to make some of the |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
165 commands move across line boundaries. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
166 |
7 | 167 h or *h* |
168 <Left> or *<Left>* | |
169 CTRL-H or *CTRL-H* *<BS>* | |
170 <BS> [count] characters to the left. |exclusive| motion. | |
171 Note: If you prefer <BS> to delete a character, use | |
172 the mapping: | |
173 :map CTRL-V<BS> X | |
174 (to enter "CTRL-V<BS>" type the CTRL-V key, followed | |
175 by the <BS> key) | |
176 See |:fixdel| if the <BS> key does not do what you | |
177 want. | |
178 | |
179 l or *l* | |
180 <Right> or *<Right>* *<Space>* | |
181 <Space> [count] characters to the right. |exclusive| motion. | |
6823 | 182 See the 'whichwrap' option for adjusting the behavior |
183 at end of line | |
7 | 184 |
185 *0* | |
186 0 To the first character of the line. |exclusive| | |
1121 | 187 motion. |
7 | 188 |
189 *<Home>* *<kHome>* | |
190 <Home> To the first character of the line. |exclusive| | |
1121 | 191 motion. When moving up or down next, stay in same |
192 TEXT column (if possible). Most other commands stay | |
193 in the same SCREEN column. <Home> works like "1|", | |
194 which differs from "0" when the line starts with a | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
195 <Tab>. |
7 | 196 |
197 *^* | |
198 ^ To the first non-blank character of the line. | |
22723 | 199 |exclusive| motion. Any count is ignored. |
7 | 200 |
201 *$* *<End>* *<kEnd>* | |
202 $ or <End> To the end of the line. When a count is given also go | |
22723 | 203 [count - 1] lines downward, or as far is possible. |
25056 | 204 |inclusive| motion. If a count of 2 or larger is |
22723 | 205 given and the cursor is on the last line, that is an |
25056 | 206 error and the cursor doesn't move. |
7 | 207 In Visual mode the cursor goes to just after the last |
208 character in the line. | |
209 When 'virtualedit' is active, "$" may move the cursor | |
210 back from past the end of the line to the last | |
211 character in the line. | |
212 | |
213 *g_* | |
214 g_ To the last non-blank character of the line and | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
215 [count - 1] lines downward |inclusive|. |
7 | 216 |
217 *g0* *g<Home>* | |
218 g0 or g<Home> When lines wrap ('wrap' on): To the first character of | |
219 the screen line. |exclusive| motion. Differs from | |
220 "0" when a line is wider than the screen. | |
221 When lines don't wrap ('wrap' off): To the leftmost | |
222 character of the current line that is on the screen. | |
223 Differs from "0" when the first character of the line | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
224 is not on the screen. |
7 | 225 |
226 *g^* | |
227 g^ When lines wrap ('wrap' on): To the first non-blank | |
228 character of the screen line. |exclusive| motion. | |
229 Differs from "^" when a line is wider than the screen. | |
230 When lines don't wrap ('wrap' off): To the leftmost | |
231 non-blank character of the current line that is on the | |
232 screen. Differs from "^" when the first non-blank | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
233 character of the line is not on the screen. |
7 | 234 |
235 *gm* | |
236 gm Like "g0", but half a screenwidth to the right (or as | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
237 much as possible). |
7 | 238 |
18489 | 239 *gM* |
18475
709c6b0dc78f
patch 8.1.2231: not easy to move to the middle of a text line
Bram Moolenaar <Bram@vim.org>
parents:
16944
diff
changeset
|
240 gM Like "g0", but to halfway the text of the line. |
709c6b0dc78f
patch 8.1.2231: not easy to move to the middle of a text line
Bram Moolenaar <Bram@vim.org>
parents:
16944
diff
changeset
|
241 With a count: to this percentage of text in the line. |
709c6b0dc78f
patch 8.1.2231: not easy to move to the middle of a text line
Bram Moolenaar <Bram@vim.org>
parents:
16944
diff
changeset
|
242 Thus "10gM" is near the start of the text and "90gM" |
709c6b0dc78f
patch 8.1.2231: not easy to move to the middle of a text line
Bram Moolenaar <Bram@vim.org>
parents:
16944
diff
changeset
|
243 is near the end of the text. |
709c6b0dc78f
patch 8.1.2231: not easy to move to the middle of a text line
Bram Moolenaar <Bram@vim.org>
parents:
16944
diff
changeset
|
244 |
32888
b1162ad29d73
patch 9.0.1753: can't move to last non-blank char
Christian Brabandt <cb@256bit.org>
parents:
30547
diff
changeset
|
245 *g$* |
b1162ad29d73
patch 9.0.1753: can't move to last non-blank char
Christian Brabandt <cb@256bit.org>
parents:
30547
diff
changeset
|
246 g$ When lines wrap ('wrap' on): To the last character of |
7 | 247 the screen line and [count - 1] screen lines downward |
248 |inclusive|. Differs from "$" when a line is wider | |
249 than the screen. | |
250 When lines don't wrap ('wrap' off): To the rightmost | |
251 character of the current line that is visible on the | |
252 screen. Differs from "$" when the last character of | |
253 the line is not on the screen or when a count is used. | |
254 Additionally, vertical movements keep the column, | |
255 instead of going to the end of the line. | |
5220 | 256 When 'virtualedit' is enabled moves to the end of the |
257 screen line. | |
32905
2ad6e8515a78
patch 9.0.1761: g<kEnd> behaves different from g<end>
Christian Brabandt <cb@256bit.org>
parents:
32888
diff
changeset
|
258 |
2ad6e8515a78
patch 9.0.1761: g<kEnd> behaves different from g<end>
Christian Brabandt <cb@256bit.org>
parents:
32888
diff
changeset
|
259 *g<End>* *g<kEnd>* |
32888
b1162ad29d73
patch 9.0.1753: can't move to last non-blank char
Christian Brabandt <cb@256bit.org>
parents:
30547
diff
changeset
|
260 g<End> Like |g$| but to the last non-blank character |
b1162ad29d73
patch 9.0.1753: can't move to last non-blank char
Christian Brabandt <cb@256bit.org>
parents:
30547
diff
changeset
|
261 instead of the last character. |
7 | 262 |
263 *bar* | |
264 | To screen column [count] in the current line. | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
265 |exclusive| motion. Ceci n'est pas une pipe. |
7 | 266 |
267 *f* | |
268 f{char} To [count]'th occurrence of {char} to the right. The | |
269 cursor is placed on {char} |inclusive|. | |
270 {char} can be entered as a digraph |digraph-arg|. | |
271 When 'encoding' is set to Unicode, composing | |
272 characters may be used, see |utf-8-char-arg|. | |
273 |:lmap| mappings apply to {char}. The CTRL-^ command | |
274 in Insert mode can be used to switch this on/off | |
275 |i_CTRL-^|. | |
276 | |
277 *F* | |
278 F{char} To the [count]'th occurrence of {char} to the left. | |
456 | 279 The cursor is placed on {char} |exclusive|. |
7 | 280 {char} can be entered like with the |f| command. |
281 | |
282 *t* | |
283 t{char} Till before [count]'th occurrence of {char} to the | |
284 right. The cursor is placed on the character left of | |
285 {char} |inclusive|. | |
286 {char} can be entered like with the |f| command. | |
287 | |
288 *T* | |
289 T{char} Till after [count]'th occurrence of {char} to the | |
290 left. The cursor is placed on the character right of | |
456 | 291 {char} |exclusive|. |
7 | 292 {char} can be entered like with the |f| command. |
293 | |
294 *;* | |
2925 | 295 ; Repeat latest f, t, F or T [count] times. See |cpo-;| |
7 | 296 |
297 *,* | |
298 , Repeat latest f, t, F or T in opposite direction | |
2925 | 299 [count] times. See also |cpo-;| |
7 | 300 |
301 ============================================================================== | |
302 3. Up-down motions *up-down-motions* | |
303 | |
304 k or *k* | |
305 <Up> or *<Up>* *CTRL-P* | |
306 CTRL-P [count] lines upward |linewise|. | |
307 | |
308 j or *j* | |
309 <Down> or *<Down>* | |
310 CTRL-J or *CTRL-J* | |
311 <NL> or *<NL>* *CTRL-N* | |
312 CTRL-N [count] lines downward |linewise|. | |
313 | |
314 gk or *gk* *g<Up>* | |
315 g<Up> [count] display lines upward. |exclusive| motion. | |
316 Differs from 'k' when lines wrap, and when used with | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
317 an operator, because it's not linewise. |
7 | 318 |
319 gj or *gj* *g<Down>* | |
320 g<Down> [count] display lines downward. |exclusive| motion. | |
321 Differs from 'j' when lines wrap, and when used with | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
322 an operator, because it's not linewise. |
7 | 323 |
324 *-* | |
325 - <minus> [count] lines upward, on the first non-blank | |
326 character |linewise|. | |
327 | |
328 + or *+* | |
329 CTRL-M or *CTRL-M* *<CR>* | |
330 <CR> [count] lines downward, on the first non-blank | |
331 character |linewise|. | |
332 | |
333 *_* | |
334 _ <underscore> [count] - 1 lines downward, on the first non-blank | |
335 character |linewise|. | |
336 | |
337 *G* | |
338 G Goto line [count], default last line, on the first | |
339 non-blank character |linewise|. If 'startofline' not | |
340 set, keep the same column. | |
16023 | 341 G is one of the |jump-motions|. |
7 | 342 |
343 *<C-End>* | |
344 <C-End> Goto line [count], default last line, on the last | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
345 character |inclusive|. |
7 | 346 |
347 <C-Home> or *gg* *<C-Home>* | |
348 gg Goto line [count], default first line, on the first | |
349 non-blank character |linewise|. If 'startofline' not | |
350 set, keep the same column. | |
351 | |
3750 | 352 *:[range]* |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
353 :[range] Set the cursor on the last line number in [range]. |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
354 [range] can also be just one line number, e.g., ":1" |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
355 or ":'m". |
2152 | 356 In contrast with |G| this command does not modify the |
357 |jumplist|. | |
7 | 358 *N%* |
359 {count}% Go to {count} percentage in the file, on the first | |
360 non-blank in the line |linewise|. To compute the new | |
361 line number this formula is used: | |
362 ({count} * number-of-lines + 99) / 100 | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
363 See also 'startofline' option. |
7 | 364 |
365 :[range]go[to] [count] *:go* *:goto* *go* | |
5663
1dea14d4c738
Update runtime files. Add support for systemverilog.
Bram Moolenaar <bram@vim.org>
parents:
5294
diff
changeset
|
366 [count]go Go to [count] byte in the buffer. Default [count] is |
7 | 367 one, start of the file. When giving [range], the |
368 last number in it used as the byte count. End-of-line | |
369 characters are counted depending on the current | |
370 'fileformat' setting. | |
2908 | 371 Also see the |line2byte()| function, and the 'o' |
372 option in 'statusline'. | |
7 | 373 {not available when compiled without the |
374 |+byte_offset| feature} | |
375 | |
376 These commands move to the specified line. They stop when reaching the first | |
377 or the last line. The first two commands put the cursor in the same column | |
378 (if possible) as it was after the last command that changed the column, | |
379 except after the "$" command, then the cursor will be put on the last | |
380 character of the line. | |
381 | |
161 | 382 If "k", "-" or CTRL-P is used with a [count] and there are less than [count] |
383 lines above the cursor and the 'cpo' option includes the "-" flag it is an | |
384 error. |cpo--|. | |
385 | |
7 | 386 ============================================================================== |
387 4. Word motions *word-motions* | |
388 | |
389 <S-Right> or *<S-Right>* *w* | |
390 w [count] words forward. |exclusive| motion. | |
391 | |
392 <C-Right> or *<C-Right>* *W* | |
393 W [count] WORDS forward. |exclusive| motion. | |
26438 | 394 If <C-Right> does not work, check out |
395 |arrow_modifiers|. | |
7 | 396 |
397 *e* | |
398 e Forward to the end of word [count] |inclusive|. | |
1621 | 399 Does not stop in an empty line. |
7 | 400 |
401 *E* | |
402 E Forward to the end of WORD [count] |inclusive|. | |
1621 | 403 Does not stop in an empty line. |
7 | 404 |
405 <S-Left> or *<S-Left>* *b* | |
406 b [count] words backward. |exclusive| motion. | |
407 | |
408 <C-Left> or *<C-Left>* *B* | |
409 B [count] WORDS backward. |exclusive| motion. | |
26438 | 410 If <C-Left> does not work, check out |
411 |arrow_modifiers|. | |
7 | 412 |
413 *ge* | |
414 ge Backward to the end of word [count] |inclusive|. | |
415 | |
416 *gE* | |
417 gE Backward to the end of WORD [count] |inclusive|. | |
418 | |
419 These commands move over words or WORDS. | |
420 *word* | |
421 A word consists of a sequence of letters, digits and underscores, or a | |
422 sequence of other non-blank characters, separated with white space (spaces, | |
625 | 423 tabs, <EOL>). This can be changed with the 'iskeyword' option. An empty line |
424 is also considered to be a word. | |
7 | 425 *WORD* |
426 A WORD consists of a sequence of non-blank characters, separated with white | |
625 | 427 space. An empty line is also considered to be a WORD. |
7 | 428 |
429 A sequence of folded lines is counted for one word of a single character. | |
430 "w" and "W", "e" and "E" move to the start/end of the first word or WORD after | |
431 a range of folded lines. "b" and "B" move to the start of the first word or | |
432 WORD before the fold. | |
433 | |
434 Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is | |
435 on a non-blank. This is because "cw" is interpreted as change-word, and a | |
16610 | 436 word does not include the following white space. |
7 | 437 |
438 Another special case: When using the "w" motion in combination with an | |
439 operator and the last word moved over is at the end of a line, the end of | |
440 that word becomes the end of the operated text, not the first word in the | |
441 next line. | |
442 | |
443 The original Vi implementation of "e" is buggy. For example, the "e" command | |
444 will stop on the first character of a line if the previous line was empty. | |
445 But when you use "2e" this does not happen. In Vim "ee" and "2e" are the | |
446 same, which is more logical. However, this causes a small incompatibility | |
447 between Vi and Vim. | |
448 | |
449 ============================================================================== | |
450 5. Text object motions *object-motions* | |
451 | |
452 *(* | |
28379 | 453 ( [count] |sentence|s backward. |exclusive| motion. |
7 | 454 |
455 *)* | |
28379 | 456 ) [count] |sentence|s forward. |exclusive| motion. |
7 | 457 |
458 *{* | |
28379 | 459 { [count] |paragraph|s backward. |exclusive| motion. |
7 | 460 |
461 *}* | |
28379 | 462 } [count] |paragraph|s forward. |exclusive| motion. |
7 | 463 |
464 *]]* | |
28379 | 465 ]] [count] |section|s forward or to the next '{' in the |
20 | 466 first column. When used after an operator, then also |
467 stops below a '}' in the first column. |exclusive| | |
468 Note that |exclusive-linewise| often applies. | |
7 | 469 |
470 *][* | |
28379 | 471 ][ [count] |section|s forward or to the next '}' in the |
20 | 472 first column. |exclusive| |
473 Note that |exclusive-linewise| often applies. | |
7 | 474 |
475 *[[* | |
28379 | 476 [[ [count] |section|s backward or to the previous '{' in |
20 | 477 the first column. |exclusive| |
478 Note that |exclusive-linewise| often applies. | |
7 | 479 |
480 *[]* | |
28379 | 481 [] [count] |section|s backward or to the previous '}' in |
20 | 482 the first column. |exclusive| |
483 Note that |exclusive-linewise| often applies. | |
7 | 484 |
485 These commands move over three kinds of text objects. | |
486 | |
487 *sentence* | |
488 A sentence is defined as ending at a '.', '!' or '?' followed by either the | |
489 end of a line, or by a space or tab. Any number of closing ')', ']', '"' | |
490 and ''' characters may appear after the '.', '!' or '?' before the spaces, | |
491 tabs or end of line. A paragraph and section boundary is also a sentence | |
492 boundary. | |
493 If the 'J' flag is present in 'cpoptions', at least two spaces have to | |
494 follow the punctuation mark; <Tab>s are not recognized as white space. | |
495 The definition of a sentence cannot be changed. | |
496 | |
497 *paragraph* | |
498 A paragraph begins after each empty line, and also at each of a set of | |
499 paragraph macros, specified by the pairs of characters in the 'paragraphs' | |
1621 | 500 option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to |
501 the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in | |
502 the first column). A section boundary is also a paragraph boundary. | |
164 | 503 Note that a blank line (only containing white space) is NOT a paragraph |
504 boundary. | |
505 Also note that this does not include a '{' or '}' in the first column. When | |
506 the '{' flag is in 'cpoptions' then '{' in the first column is used as a | |
507 paragraph boundary |posix|. | |
7 | 508 |
509 *section* | |
510 A section begins after a form-feed (<C-L>) in the first column and at each of | |
511 a set of section macros, specified by the pairs of characters in the | |
512 'sections' option. The default is "SHNHH HUnhsh", which defines a section to | |
513 start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh". | |
514 | |
21991 | 515 The "]]" and "[[" commands stop at the '{' in the first column. This is |
516 useful to find the start of a function in a C program. To search for a '}' in | |
517 the first column, the end of a C function, use "][" (forward) or "[]" | |
518 (backward). Note that the first character of the command determines the | |
519 search direction. | |
7 | 520 |
521 If your '{' or '}' are not in the first column, and you would like to use "[[" | |
522 and "]]" anyway, try these mappings: > | |
523 :map [[ ?{<CR>w99[{ | |
524 :map ][ /}<CR>b99]} | |
525 :map ]] j0[[%/{<CR> | |
526 :map [] k$][%?}<CR> | |
527 [type these literally, see |<>|] | |
528 | |
529 ============================================================================== | |
530 6. Text object selection *object-select* *text-objects* | |
531 *v_a* *v_i* | |
532 | |
533 This is a series of commands that can only be used while in Visual mode or | |
534 after an operator. The commands that start with "a" select "a"n object | |
535 including white space, the commands starting with "i" select an "inner" object | |
536 without white space, or just the white space. Thus the "inner" commands | |
537 always select less text than the "a" commands. | |
538 | |
3713 | 539 Also see `gn` and `gN`, operating on the last search pattern. |
540 | |
7 | 541 *v_aw* *aw* |
542 aw "a word", select [count] words (see |word|). | |
543 Leading or trailing white space is included, but not | |
544 counted. | |
545 When used in Visual linewise mode "aw" switches to | |
546 Visual characterwise mode. | |
547 | |
548 *v_iw* *iw* | |
549 iw "inner word", select [count] words (see |word|). | |
550 White space between words is counted too. | |
551 When used in Visual linewise mode "iw" switches to | |
552 Visual characterwise mode. | |
553 | |
554 *v_aW* *aW* | |
555 aW "a WORD", select [count] WORDs (see |WORD|). | |
556 Leading or trailing white space is included, but not | |
557 counted. | |
558 When used in Visual linewise mode "aW" switches to | |
559 Visual characterwise mode. | |
560 | |
561 *v_iW* *iW* | |
562 iW "inner WORD", select [count] WORDs (see |WORD|). | |
563 White space between words is counted too. | |
564 When used in Visual linewise mode "iW" switches to | |
565 Visual characterwise mode. | |
566 | |
567 *v_as* *as* | |
568 as "a sentence", select [count] sentences (see | |
569 |sentence|). | |
570 When used in Visual mode it is made characterwise. | |
571 | |
572 *v_is* *is* | |
573 is "inner sentence", select [count] sentences (see | |
574 |sentence|). | |
575 When used in Visual mode it is made characterwise. | |
576 | |
577 *v_ap* *ap* | |
578 ap "a paragraph", select [count] paragraphs (see | |
579 |paragraph|). | |
580 Exception: a blank line (only containing white space) | |
581 is also a paragraph boundary. | |
582 When used in Visual mode it is made linewise. | |
583 | |
584 *v_ip* *ip* | |
585 ip "inner paragraph", select [count] paragraphs (see | |
586 |paragraph|). | |
587 Exception: a blank line (only containing white space) | |
588 is also a paragraph boundary. | |
589 When used in Visual mode it is made linewise. | |
590 | |
591 a] *v_a]* *v_a[* *a]* *a[* | |
592 a[ "a [] block", select [count] '[' ']' blocks. This | |
593 goes backwards to the [count] unclosed '[', and finds | |
594 the matching ']'. The enclosed text is selected, | |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
595 including the '[' and ']'. The |cpo-M| option flag |
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
596 is used to handle escaped brackets. |
7 | 597 When used in Visual mode it is made characterwise. |
598 | |
599 i] *v_i]* *v_i[* *i]* *i[* | |
600 i[ "inner [] block", select [count] '[' ']' blocks. This | |
601 goes backwards to the [count] unclosed '[', and finds | |
602 the matching ']'. The enclosed text is selected, | |
34076
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
603 excluding the '[' and ']'. It's an error to select an |
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
604 empty inner block like "[]". The |cpo-M| option flag |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
605 is used to handle escaped brackets. |
7 | 606 When used in Visual mode it is made characterwise. |
607 | |
608 a) *v_a)* *a)* *a(* | |
9533
9f921133ee90
commit https://github.com/vim/vim/commit/269f595f9eef584937e7eae70fde68cdd7da5bcf
Christian Brabandt <cb@256bit.org>
parents:
9286
diff
changeset
|
609 a( *vab* *v_ab* *v_a(* *ab* |
7 | 610 ab "a block", select [count] blocks, from "[count] [(" to |
611 the matching ')', including the '(' and ')' (see | |
612 |[(|). Does not include white space outside of the | |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
613 parenthesis. The |cpo-M| option flag is used to |
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
614 handle escaped parenthesis. |
7 | 615 When used in Visual mode it is made characterwise. |
616 | |
617 i) *v_i)* *i)* *i(* | |
9533
9f921133ee90
commit https://github.com/vim/vim/commit/269f595f9eef584937e7eae70fde68cdd7da5bcf
Christian Brabandt <cb@256bit.org>
parents:
9286
diff
changeset
|
618 i( *vib* *v_ib* *v_i(* *ib* |
7 | 619 ib "inner block", select [count] blocks, from "[count] [(" |
620 to the matching ')', excluding the '(' and ')' (see | |
29756 | 621 |[(|). If the cursor is not inside a () block, then |
34076
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
622 find the next "(". It's an error to select an empty |
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
623 inner block like "()". The |cpo-M| option flag |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
624 is used to handle escaped parenthesis. |
7 | 625 When used in Visual mode it is made characterwise. |
626 | |
627 a> *v_a>* *v_a<* *a>* *a<* | |
628 a< "a <> block", select [count] <> blocks, from the | |
629 [count]'th unmatched '<' backwards to the matching | |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
630 '>', including the '<' and '>'. The |cpo-M| option flag |
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
631 is used to handle escaped '<' and '>'. |
7 | 632 When used in Visual mode it is made characterwise. |
633 | |
634 i> *v_i>* *v_i<* *i>* *i<* | |
635 i< "inner <> block", select [count] <> blocks, from | |
636 the [count]'th unmatched '<' backwards to the matching | |
34076
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
637 '>', excluding the '<' and '>'. It's an error to |
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
638 select an empty inner block like "<>". The |cpo-M| |
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
639 option flag is used to handle escaped '<' and '>'. |
7 | 640 When used in Visual mode it is made characterwise. |
641 | |
422 | 642 *v_at* *at* |
643 at "a tag block", select [count] tag blocks, from the | |
644 [count]'th unmatched "<aaa>" backwards to the matching | |
645 "</aaa>", including the "<aaa>" and "</aaa>". | |
646 See |tag-blocks| about the details. | |
647 When used in Visual mode it is made characterwise. | |
29765
bc6cf208b1b4
patch 9.0.0222: no good reason why text objects are only in larger builds
Bram Moolenaar <Bram@vim.org>
parents:
29756
diff
changeset
|
648 Only available when compiled with the |+eval| feature. |
422 | 649 |
650 *v_it* *it* | |
651 it "inner tag block", select [count] tag blocks, from the | |
652 [count]'th unmatched "<aaa>" backwards to the matching | |
653 "</aaa>", excluding the "<aaa>" and "</aaa>". | |
654 See |tag-blocks| about the details. | |
655 When used in Visual mode it is made characterwise. | |
656 | |
7 | 657 a} *v_a}* *a}* *a{* |
658 a{ *v_aB* *v_a{* *aB* | |
659 aB "a Block", select [count] Blocks, from "[count] [{" to | |
660 the matching '}', including the '{' and '}' (see | |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
661 |[{|). The |cpo-M| option flag is used to handle |
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
662 escaped braces. |
7 | 663 When used in Visual mode it is made characterwise. |
664 | |
665 i} *v_i}* *i}* *i{* | |
666 i{ *v_iB* *v_i{* *iB* | |
667 iB "inner Block", select [count] Blocks, from "[count] [{" | |
668 to the matching '}', excluding the '{' and '}' (see | |
34076
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
669 |[{|). It's an error to select an empty inner block |
21fc3f1676be
patch 9.1.0007: can select empty inner text blocks
Christian Brabandt <cb@256bit.org>
parents:
34057
diff
changeset
|
670 like "{}". The |cpo-M| option flag is used to handle |
33386
bec417c694fd
runtime(doc): text-objects: document how escaped delimiters are handled
Christian Brabandt <cb@256bit.org>
parents:
33315
diff
changeset
|
671 escaped braces. |
7 | 672 When used in Visual mode it is made characterwise. |
673 | |
12 | 674 a" *v_aquote* *aquote* |
675 a' *v_a'* *a'* | |
676 a` *v_a`* *a`* | |
677 "a quoted string". Selects the text from the previous | |
849 | 678 quote until the next quote. The 'quoteescape' option |
679 is used to skip escaped quotes. | |
680 Only works within one line. | |
12 | 681 When the cursor starts on a quote, Vim will figure out |
682 which quote pairs form a string by searching from the | |
683 start of the line. | |
2033
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
684 Any trailing white space is included, unless there is |
de5a43c5eedc
Update documentation files.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
685 none, then leading white space is included. |
12 | 686 When used in Visual mode it is made characterwise. |
687 Repeating this object in Visual mode another string is | |
688 included. A count is currently not used. | |
689 | |
690 i" *v_iquote* *iquote* | |
691 i' *v_i'* *i'* | |
692 i` *v_i`* *i`* | |
693 Like a", a' and a`, but exclude the quotes and | |
694 repeating won't extend the Visual selection. | |
527 | 695 Special case: With a count of 2 the quotes are |
696 included, but no extra white space as with a"/a'/a`. | |
12 | 697 |
33290
9a7b1f8aea55
runtime(doc): add help tag describing object-selection
Christian Brabandt <cb@256bit.org>
parents:
32905
diff
changeset
|
698 *o_object-select* |
7 | 699 When used after an operator: |
700 For non-block objects: | |
701 For the "a" commands: The operator applies to the object and the white | |
702 space after the object. If there is no white space after the object | |
703 or when the cursor was in the white space before the object, the white | |
704 space before the object is included. | |
705 For the "inner" commands: If the cursor was on the object, the | |
706 operator applies to the object. If the cursor was on white space, the | |
707 operator applies to the white space. | |
708 For a block object: | |
709 The operator applies to the block where the cursor is in, or the block | |
710 on which the cursor is on one of the braces. For the "inner" commands | |
711 the surrounding braces are excluded. For the "a" commands, the braces | |
712 are included. | |
713 | |
33290
9a7b1f8aea55
runtime(doc): add help tag describing object-selection
Christian Brabandt <cb@256bit.org>
parents:
32905
diff
changeset
|
714 *v_object-select* |
7 | 715 When used in Visual mode: |
716 When start and end of the Visual area are the same (just after typing "v"): | |
717 One object is selected, the same as for using an operator. | |
718 When start and end of the Visual area are not the same: | |
719 For non-block objects the area is extended by one object or the white | |
720 space up to the next object, or both for the "a" objects. The | |
721 direction in which this happens depends on which side of the Visual | |
722 area the cursor is. For the block objects the block is extended one | |
723 level outwards. | |
724 | |
725 For illustration, here is a list of delete commands, grouped from small to big | |
726 objects. Note that for a single character and a whole line the existing vi | |
727 movement commands are used. | |
728 "dl" delete character (alias: "x") |dl| | |
729 "diw" delete inner word *diw* | |
730 "daw" delete a word *daw* | |
731 "diW" delete inner WORD (see |WORD|) *diW* | |
732 "daW" delete a WORD (see |WORD|) *daW* | |
3713 | 733 "dgn" delete the next search pattern match *dgn* |
7 | 734 "dd" delete one line |dd| |
735 "dis" delete inner sentence *dis* | |
736 "das" delete a sentence *das* | |
737 "dib" delete inner '(' ')' block *dib* | |
738 "dab" delete a '(' ')' block *dab* | |
739 "dip" delete inner paragraph *dip* | |
740 "dap" delete a paragraph *dap* | |
741 "diB" delete inner '{' '}' block *diB* | |
742 "daB" delete a '{' '}' block *daB* | |
743 | |
744 Note the difference between using a movement command and an object. The | |
745 movement command operates from here (cursor position) to where the movement | |
746 takes us. When using an object the whole object is operated upon, no matter | |
747 where on the object the cursor is. For example, compare "dw" and "daw": "dw" | |
748 deletes from the cursor position to the start of the next word, "daw" deletes | |
749 the word under the cursor and the space after or before it. | |
750 | |
422 | 751 |
752 Tag blocks *tag-blocks* | |
753 | |
754 For the "it" and "at" text objects an attempt is done to select blocks between | |
755 matching tags for HTML and XML. But since these are not completely compatible | |
756 there are a few restrictions. | |
757 | |
758 The normal method is to select a <tag> until the matching </tag>. For "at" | |
759 the tags are included, for "it" they are excluded. But when "it" is repeated | |
853 | 760 the tags will be included (otherwise nothing would change). Also, "it" used |
761 on a tag block with no contents will select the leading tag. | |
422 | 762 |
763 "<aaa/>" items are skipped. Case is ignored, also for XML where case does | |
764 matter. | |
765 | |
766 In HTML it is possible to have a tag like <br> or <meta ...> without a | |
767 matching end tag. These are ignored. | |
768 | |
769 The text objects are tolerant about mistakes. Stray end tags are ignored. | |
770 | |
7 | 771 ============================================================================== |
772 7. Marks *mark-motions* *E20* *E78* | |
773 | |
774 Jumping to a mark can be done in two ways: | |
775 1. With ` (backtick): The cursor is positioned at the specified location | |
776 and the motion is |exclusive|. | |
777 2. With ' (single quote): The cursor is positioned on the first non-blank | |
778 character in the line of the specified location and | |
779 the motion is linewise. | |
780 | |
781 *m* *mark* *Mark* | |
782 m{a-zA-Z} Set mark {a-zA-Z} at cursor position (does not move | |
783 the cursor, this is not a motion command). | |
784 | |
785 *m'* *m`* | |
786 m' or m` Set the previous context mark. This can be jumped to | |
787 with the "''" or "``" command (does not move the | |
788 cursor, this is not a motion command). | |
789 | |
790 *m[* *m]* | |
791 m[ or m] Set the |'[| or |']| mark. Useful when an operator is | |
792 to be simulated by multiple commands. (does not move | |
793 the cursor, this is not a motion command). | |
794 | |
3682 | 795 *m<* *m>* |
796 m< or m> Set the |'<| or |'>| mark. Useful to change what the | |
797 `gv` command selects. (does not move the cursor, this | |
798 is not a motion command). | |
799 Note that the Visual mode cannot be set, only the | |
800 start and end position. | |
801 | |
7 | 802 *:ma* *:mark* *E191* |
9 | 803 :[range]ma[rk] {a-zA-Z'} |
804 Set mark {a-zA-Z'} at last line number in [range], | |
7 | 805 column 0. Default is cursor line. |
806 | |
807 *:k* | |
9 | 808 :[range]k{a-zA-Z'} Same as :mark, but the space before the mark name can |
7 | 809 be omitted. |
26779 | 810 This command is not supported in |Vim9| script, |
811 because it is too easily confused with a variable | |
812 name. | |
7 | 813 |
814 *'* *'a* *`* *`a* | |
1121 | 815 '{a-z} `{a-z} Jump to the mark {a-z} in the current buffer. |
7 | 816 |
817 *'A* *'0* *`A* *`0* | |
1121 | 818 '{A-Z0-9} `{A-Z0-9} To the mark {A-Z0-9} in the file where it was set (not |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
819 a motion command when in another file). |
7 | 820 |
821 *g'* *g'a* *g`* *g`a* | |
822 g'{mark} g`{mark} | |
823 Jump to the {mark}, but don't change the jumplist when | |
824 jumping within the current buffer. Example: > | |
825 g`" | |
826 < jumps to the last known position in a file. See | |
9 | 827 $VIMRUNTIME/vimrc_example.vim. |
828 Also see |:keepjumps|. | |
7 | 829 |
830 *:marks* | |
831 :marks List all the current marks (not a motion command). | |
832 The |'(|, |')|, |'{| and |'}| marks are not listed. | |
843 | 833 The first column has number zero. |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
834 |
7 | 835 *E283* |
836 :marks {arg} List the marks that are mentioned in {arg} (not a | |
837 motion command). For example: > | |
838 :marks aB | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
839 < to list marks 'a' and 'B'. |
7 | 840 |
24 | 841 *:delm* *:delmarks* |
856 | 842 :delm[arks] {marks} Delete the specified marks. Marks that can be deleted |
24 | 843 include A-Z and 0-9. You cannot delete the ' mark. |
844 They can be specified by giving the list of mark | |
845 names, or with a range, separated with a dash. Spaces | |
846 are ignored. Examples: > | |
847 :delmarks a deletes mark a | |
848 :delmarks a b 1 deletes marks a, b and 1 | |
849 :delmarks Aa deletes marks A and a | |
850 :delmarks p-z deletes marks in the range p to z | |
851 :delmarks ^.[] deletes marks ^ . [ ] | |
852 :delmarks \" deletes mark " | |
853 | |
854 :delm[arks]! Delete all marks for the current buffer, but not marks | |
855 A-Z or 0-9. | |
856 | |
7 | 857 A mark is not visible in any way. It is just a position in the file that is |
858 remembered. Do not confuse marks with named registers, they are totally | |
859 unrelated. | |
860 | |
861 'a - 'z lowercase marks, valid within one file | |
862 'A - 'Z uppercase marks, also called file marks, valid between files | |
863 '0 - '9 numbered marks, set from .viminfo file | |
864 | |
865 Lowercase marks 'a to 'z are remembered as long as the file remains in the | |
866 buffer list. If you remove the file from the buffer list, all its marks are | |
867 lost. If you delete a line that contains a mark, that mark is erased. | |
868 | |
869 Lowercase marks can be used in combination with operators. For example: "d't" | |
870 deletes the lines from the cursor position to mark 't'. Hint: Use mark 't' for | |
871 Top, 'b' for Bottom, etc.. Lowercase marks are restored when using undo and | |
872 redo. | |
873 | |
16610 | 874 Uppercase marks 'A to 'Z include the file name. You can use them to jump from |
875 file to file. You can only use an uppercase mark with an operator if the mark | |
876 is in the current file. The line number of the mark remains correct, even if | |
877 you insert/delete lines or edit another file for a moment. When the 'viminfo' | |
878 option is not empty, uppercase marks are kept in the .viminfo file. See | |
879 |viminfo-file-marks|. | |
7 | 880 |
881 Numbered marks '0 to '9 are quite different. They can not be set directly. | |
882 They are only present when using a viminfo file |viminfo-file|. Basically '0 | |
883 is the location of the cursor when you last exited Vim, '1 the last but one | |
884 time, etc. Use the "r" flag in 'viminfo' to specify files for which no | |
885 Numbered mark should be stored. See |viminfo-file-marks|. | |
886 | |
887 | |
888 *'[* *`[* | |
889 '[ `[ To the first character of the previously changed | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
890 or yanked text. |
7 | 891 |
892 *']* *`]* | |
893 '] `] To the last character of the previously changed or | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
894 yanked text. |
7 | 895 |
896 After executing an operator the Cursor is put at the beginning of the text | |
897 that was operated upon. After a put command ("p" or "P") the cursor is | |
898 sometimes placed at the first inserted line and sometimes on the last inserted | |
899 character. The four commands above put the cursor at either end. Example: | |
900 After yanking 10 lines you want to go to the last one of them: "10Y']". After | |
901 inserting several lines with the "p" command you want to jump to the lowest | |
902 inserted line: "p']". This also works for text that has been inserted. | |
903 | |
904 Note: After deleting text, the start and end positions are the same, except | |
905 when using blockwise Visual mode. These commands do not work when no change | |
906 was made yet in the current file. | |
907 | |
908 *'<* *`<* | |
1698 | 909 '< `< To the first line or character of the last selected |
910 Visual area in the current buffer. For block mode it | |
911 may also be the last character in the first line (to | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
912 be able to define the block). |
7 | 913 |
914 *'>* *`>* | |
1698 | 915 '> `> To the last line or character of the last selected |
916 Visual area in the current buffer. For block mode it | |
917 may also be the first character of the last line (to | |
918 be able to define the block). Note that 'selection' | |
856 | 919 applies, the position may be just after the Visual |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
920 area. |
7 | 921 |
922 *''* *``* | |
36 | 923 '' `` To the position before the latest jump, or where the |
924 last "m'" or "m`" command was given. Not set when the | |
7 | 925 |:keepjumps| command modifier was used. |
926 Also see |restore-position|. | |
927 | |
928 *'quote* *`quote* | |
929 '" `" To the cursor position when last exiting the current | |
930 buffer. Defaults to the first character of the first | |
931 line. See |last-position-jump| for how to use this | |
932 for each opened file. | |
933 Only one position is remembered per buffer, not one | |
934 for each window. As long as the buffer is visible in | |
935 a window the position won't be changed. | |
936 | |
937 *'^* *`^* | |
938 '^ `^ To the position where the cursor was the last time | |
42 | 939 when Insert mode was stopped. This is used by the |
940 |gi| command. Not set when the |:keepjumps| command | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
941 modifier was used. |
7 | 942 |
943 *'.* *`.* | |
944 '. `. To the position where the last change was made. The | |
945 position is at or near where the change started. | |
946 Sometimes a command is executed as several changes, | |
947 then the position can be near the end of what the | |
948 command changed. For example when inserting a word, | |
949 the position will be on the last character. | |
10449
222b1432814e
commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
950 To jump to older changes use |g;|. |
7 | 951 |
952 *'(* *`(* | |
953 '( `( To the start of the current sentence, like the |(| | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
954 command. |
7 | 955 |
956 *')* *`)* | |
957 ') `) To the end of the current sentence, like the |)| | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
958 command. |
7 | 959 |
960 *'{* *`{* | |
961 '{ `{ To the start of the current paragraph, like the |{| | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
962 command. |
7 | 963 |
964 *'}* *`}* | |
965 '} `} To the end of the current paragraph, like the |}| | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
966 command. |
7 | 967 |
968 These commands are not marks themselves, but jump to a mark: | |
969 | |
970 *]'* | |
971 ]' [count] times to next line with a lowercase mark below | |
972 the cursor, on the first non-blank character in the | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
973 line. |
7 | 974 |
975 *]`* | |
24278 | 976 ]` [count] times to lowercase mark after the cursor. |
7 | 977 |
978 *['* | |
979 [' [count] times to previous line with a lowercase mark | |
980 before the cursor, on the first non-blank character in | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
981 the line. |
7 | 982 |
983 *[`* | |
984 [` [count] times to lowercase mark before the cursor. | |
985 | |
986 | |
16944 | 987 :loc[kmarks] {command} *:loc* *:lock* *:lockmarks* |
7 | 988 Execute {command} without adjusting marks. This is |
989 useful when changing text in a way that the line count | |
990 will be the same when the change has completed. | |
991 WARNING: When the line count does change, marks below | |
992 the change will keep their line number, thus move to | |
993 another text line. | |
994 These items will not be adjusted for deleted/inserted | |
995 lines: | |
996 - lower case letter marks 'a - 'z | |
997 - upper case letter marks 'A - 'Z | |
998 - numbered marks '0 - '9 | |
999 - last insert position '^ | |
1000 - last change position '. | |
18639 | 1001 - last affected text area '[ and '] |
7 | 1002 - the Visual area '< and '> |
1003 - line numbers in placed signs | |
1004 - line numbers in quickfix positions | |
1005 - positions in the |jumplist| | |
1006 - positions in the |tagstack| | |
1007 These items will still be adjusted: | |
1008 - previous context mark '' | |
1009 - the cursor position | |
1010 - the view of a window on a buffer | |
1011 - folds | |
1012 - diffs | |
1013 | |
16944 | 1014 :kee[pmarks] {command} *:kee* *:keep* *:keepmarks* |
7 | 1015 Currently only has effect for the filter command |
1016 |:range!|: | |
1017 - When the number of lines after filtering is equal to | |
1018 or larger than before, all marks are kept at the | |
1019 same line number. | |
1020 - When the number of lines decreases, the marks in the | |
9 | 1021 lines that disappeared are deleted. |
7 | 1022 In any case the marks below the filtered text have |
1023 their line numbers adjusted, thus stick to the text, | |
1024 as usual. | |
1025 When the 'R' flag is missing from 'cpoptions' this has | |
1026 the same effect as using ":keepmarks". | |
1027 | |
1028 *:keepj* *:keepjumps* | |
1029 :keepj[umps] {command} | |
9 | 1030 Moving around in {command} does not change the |''|, |
1031 |'.| and |'^| marks, the |jumplist| or the | |
1032 |changelist|. | |
1033 Useful when making a change or inserting text | |
1034 automatically and the user doesn't want to go to this | |
1035 position. E.g., when updating a "Last change" | |
1036 timestamp in the first line: > | |
1037 | |
586 | 1038 :let lnum = line(".") |
9 | 1039 :keepjumps normal gg |
1040 :call SetLastChange() | |
27903 | 1041 :keepjumps exe "normal " .. lnum .. "G" |
9 | 1042 < |
1043 Note that ":keepjumps" must be used for every command. | |
1044 When invoking a function the commands in that function | |
856 | 1045 can still change the jumplist. Also, for |
85 | 1046 ":keepjumps exe 'command '" the "command" won't keep |
1047 jumps. Instead use: ":exe 'keepjumps command'" | |
7 | 1048 |
1049 ============================================================================== | |
1050 8. Jumps *jump-motions* | |
1051 | |
14347 | 1052 A "jump" is a command that normally moves the cursor several lines away. If |
1053 you make the cursor "jump" the position of the cursor before the jump is | |
16023 | 1054 remembered. You can return to that position with the "''" and "``" commands, |
14347 | 1055 unless the line containing that position was changed or deleted. The |
1056 following commands are "jump" commands: "'", "`", "G", "/", "?", "n", "N", | |
1057 "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and the | |
15033 | 1058 commands that start editing a new file. |
7 | 1059 |
1060 *CTRL-O* | |
1061 CTRL-O Go to [count] Older cursor position in jump list | |
9286
64035abb986b
commit https://github.com/vim/vim/commit/c95a302a4c42ec8230473cd4a5e0064d0a143aa8
Christian Brabandt <cb@256bit.org>
parents:
6823
diff
changeset
|
1062 (not a motion command). |
7 | 1063 |
1064 <Tab> or *CTRL-I* *<Tab>* | |
1065 CTRL-I Go to [count] newer cursor position in jump list | |
1066 (not a motion command). | |
1067 | |
24278 | 1068 NOTE: In the GUI and in a terminal supporting |
1069 |modifyOtherKeys|, CTRL-I can be mapped separately | |
1070 from <Tab>, on the condition that CTRL-I is | |
1071 mapped before <Tab>, otherwise the mapping applies to | |
1072 both. | |
1073 | |
7 | 1074 *:ju* *:jumps* |
9286
64035abb986b
commit https://github.com/vim/vim/commit/c95a302a4c42ec8230473cd4a5e0064d0a143aa8
Christian Brabandt <cb@256bit.org>
parents:
6823
diff
changeset
|
1075 :ju[mps] Print the jump list (not a motion command). |
64035abb986b
commit https://github.com/vim/vim/commit/c95a302a4c42ec8230473cd4a5e0064d0a143aa8
Christian Brabandt <cb@256bit.org>
parents:
6823
diff
changeset
|
1076 |
64035abb986b
commit https://github.com/vim/vim/commit/c95a302a4c42ec8230473cd4a5e0064d0a143aa8
Christian Brabandt <cb@256bit.org>
parents:
6823
diff
changeset
|
1077 *:cle* *:clearjumps* |
64035abb986b
commit https://github.com/vim/vim/commit/c95a302a4c42ec8230473cd4a5e0064d0a143aa8
Christian Brabandt <cb@256bit.org>
parents:
6823
diff
changeset
|
1078 :cle[arjumps] Clear the jump list of the current window. |
7 | 1079 |
1080 *jumplist* | |
1081 Jumps are remembered in a jump list. With the CTRL-O and CTRL-I command you | |
1082 can go to cursor positions before older jumps, and back again. Thus you can | |
1083 move up and down the list. There is a separate jump list for each window. | |
1084 The maximum number of entries is fixed at 100. | |
1085 | |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1086 For example, after three jump commands you have this jump list: > |
7 | 1087 |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1088 jump line col file/text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1089 3 1 0 some text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1090 2 70 0 another line |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1091 1 1154 23 end. |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1092 > |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1093 < |
2681 | 1094 The "file/text" column shows the file name, or the text at the jump if it is |
7 | 1095 in the current file (an indent is removed and a long line is truncated to fit |
1096 in the window). | |
1097 | |
28388
320991d9812e
patch 8.2.4719: ">" marker sometimes not displayed in the jumplist
Bram Moolenaar <Bram@vim.org>
parents:
28379
diff
changeset
|
1098 The marker ">" indicates the current position in the jumplist. It may not be |
28517 | 1099 shown when filtering the |:jumps| command using |:filter| |
28388
320991d9812e
patch 8.2.4719: ">" marker sometimes not displayed in the jumplist
Bram Moolenaar <Bram@vim.org>
parents:
28379
diff
changeset
|
1100 |
7 | 1101 You are currently in line 1167. If you then use the CTRL-O command, the |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1102 cursor is put in line 1154. This results in: > |
7 | 1103 |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1104 jump line col file/text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1105 2 1 0 some text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1106 1 70 0 another line |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1107 > 0 1154 23 end. |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1108 1 1167 0 foo bar |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1109 < |
7 | 1110 The pointer will be set at the last used jump position. The next CTRL-O |
1111 command will use the entry above it, the next CTRL-I command will use the | |
1112 entry below it. If the pointer is below the last entry, this indicates that | |
1113 you did not use a CTRL-I or CTRL-O before. In this case the CTRL-O command | |
1114 will cause the cursor position to be added to the jump list, so you can get | |
1115 back to the position before the CTRL-O. In this case this is line 1167. | |
1116 | |
1117 With more CTRL-O commands you will go to lines 70 and 1. If you use CTRL-I | |
1118 you can go back to 1154 and 1167 again. Note that the number in the "jump" | |
1119 column indicates the count for the CTRL-O or CTRL-I command that takes you to | |
1120 this position. | |
1121 | |
1122 If you use a jump command, the current line number is inserted at the end of | |
1123 the jump list. If the same line was already in the jump list, it is removed. | |
1124 The result is that when repeating CTRL-O you will get back to old positions | |
1125 only once. | |
1126 | |
1127 When the |:keepjumps| command modifier is used, jumps are not stored in the | |
836 | 1128 jumplist. Jumps are also not stored in other cases, e.g., in a |:global| |
5220 | 1129 command. You can explicitly add a jump by setting the ' mark with "m'". Note |
1130 that calling setpos() does not do this. | |
7 | 1131 |
1132 After the CTRL-O command that got you into line 1154 you could give another | |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1133 jump command (e.g., "G"). The jump list would then become: > |
7 | 1134 |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1135 jump line col file/text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1136 4 1 0 some text |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1137 3 70 0 another line |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1138 2 1167 0 foo bar |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1139 1 1154 23 end. |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1140 > |
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1141 < |
7 | 1142 The line numbers will be adjusted for deleted and inserted lines. This fails |
1143 if you stop editing a file without writing, like with ":n!". | |
1144 | |
1145 When you split a window, the jumplist will be copied to the new window. | |
1146 | |
1147 If you have included the ' item in the 'viminfo' option the jumplist will be | |
1148 stored in the viminfo file and restored when starting Vim. | |
1149 | |
33311
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1150 *jumplist-stack* |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1151 When 'jumpoptions' option includes "stack", the jumplist behaves like the tag |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1152 stack. When jumping to a new location from the middle of the jumplist, the |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1153 locations after the current position will be discarded. With this option set |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1154 you can move through a tree of jump locations. When going back up a branch and |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1155 then down another branch, CTRL-O still takes you further up the tree. |
7 | 1156 |
33311
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1157 Given a jumplist like the following in which CTRL-O has been used to move back |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1158 three times to location X: > |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1159 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1160 jump line col file/text |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1161 2 1260 8 mark.c <-- location X-2 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1162 1 685 0 eval.c <-- location X-1 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1163 > 0 462 36 eval.c <-- location X |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1164 1 479 39 eval.c |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1165 2 213 2 mark.c |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1166 3 181 0 mark.c |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1167 < |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1168 jumping to (new) location Y results in the locations after the current |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1169 locations being removed: > |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1170 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1171 jump line col file/text |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1172 3 1260 8 mark.c <-- location X-2 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1173 2 685 0 eval.c <-- location X-1 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1174 1 462 36 eval.c <-- location X |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1175 > |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1176 < |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1177 Then, when yet another location Z is jumped to, the new location Y appears |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1178 directly after location X in the jumplist and location X remains in the same |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1179 position relative to the locations (X-1, X-2, etc., ...) that had been before |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1180 it prior to the original jump from X to Y: > |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1181 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1182 jump line col file/text |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1183 4 1260 8 mark.c <-- location X-2 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1184 3 685 0 eval.c <-- location X-1 |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1185 2 462 36 eval.c <-- location X |
33315
d198db604bcf
runtime(doc): format jumplist examples more consistently (#13137)
Christian Brabandt <cb@256bit.org>
parents:
33311
diff
changeset
|
1186 1 100 0 buffer.c <-- location Y |
33311
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1187 > |
1f3bcb7f3bd0
patch 9.0.1921: not possible to use the jumplist like a stack
Christian Brabandt <cb@256bit.org>
parents:
33290
diff
changeset
|
1188 < |
7 | 1189 CHANGE LIST JUMPS *changelist* *change-list-jumps* *E664* |
1190 | |
1191 When making a change the cursor position is remembered. One position is | |
1192 remembered for every change that can be undone, unless it is close to a | |
1193 previous change. Two commands can be used to jump to positions of changes, | |
1194 also those that have been undone: | |
1195 | |
1196 *g;* *E662* | |
1197 g; Go to [count] older position in change list. | |
1198 If [count] is larger than the number of older change | |
1199 positions go to the oldest change. | |
1200 If there is no older change an error message is given. | |
1201 (not a motion command) | |
1202 | |
1203 *g,* *E663* | |
30547 | 1204 g, Go to [count] newer position in change list. |
236 | 1205 Just like |g;| but in the opposite direction. |
7 | 1206 (not a motion command) |
1207 | |
1208 When using a count you jump as far back or forward as possible. Thus you can | |
1209 use "999g;" to go to the first change for which the position is still | |
1210 remembered. The number of entries in the change list is fixed and is the same | |
1211 as for the |jumplist|. | |
1212 | |
1213 When two undo-able changes are in the same line and at a column position less | |
1214 than 'textwidth' apart only the last one is remembered. This avoids that a | |
1215 sequence of small changes in a line, for example "xxxxx", adds many positions | |
1216 to the change list. When 'textwidth' is zero 'wrapmargin' is used. When that | |
1217 also isn't set a fixed number of 79 is used. Detail: For the computations | |
1218 bytes are used, not characters, to avoid a speed penalty (this only matters | |
21991 | 1219 for multibyte encodings). |
7 | 1220 |
1221 Note that when text has been inserted or deleted the cursor position might be | |
1222 a bit different from the position of the change. Especially when lines have | |
1223 been deleted. | |
1224 | |
24278 | 1225 When the `:keepjumps` command modifier is used the position of a change is not |
7 | 1226 remembered. |
1227 | |
1228 *:changes* | |
1229 :changes Print the change list. A ">" character indicates the | |
1230 current position. Just after a change it is below the | |
14372 | 1231 newest entry, indicating that `g;` takes you to the |
7 | 1232 newest entry position. The first column indicates the |
1233 count needed to take you to this position. Example: | |
1234 | |
1235 change line col text ~ | |
1236 3 9 8 bla bla bla | |
1237 2 11 57 foo is a bar | |
1238 1 14 54 the latest changed line | |
1239 > | |
1240 | |
14372 | 1241 The `3g;` command takes you to line 9. Then the |
1242 output of `:changes` is: | |
7 | 1243 |
1244 change line col text ~ | |
1245 > 0 9 8 bla bla bla | |
1246 1 11 57 foo is a bar | |
1247 2 14 54 the latest changed line | |
1248 | |
1249 Now you can use "g," to go to line 11 and "2g," to go | |
1250 to line 14. | |
1251 | |
1252 ============================================================================== | |
1253 9. Various motions *various-motions* | |
1254 | |
1255 *%* | |
1256 % Find the next item in this line after or under the | |
1257 cursor and jump to its match. |inclusive| motion. | |
1258 Items can be: | |
1259 ([{}]) parenthesis or (curly/square) brackets | |
1260 (this can be changed with the | |
1261 'matchpairs' option) | |
1262 /* */ start or end of C-style comment | |
1263 #if, #ifdef, #else, #elif, #endif | |
1264 C preprocessor conditionals (when the | |
1265 cursor is on the # or no ([{ | |
24278 | 1266 is following) |
7 | 1267 For other items the matchit plugin can be used, see |
1621 | 1268 |matchit-install|. This plugin also helps to skip |
1269 matches in comments. | |
7 | 1270 |
1271 When 'cpoptions' contains "M" |cpo-M| backslashes | |
1272 before parens and braces are ignored. Without "M" the | |
1273 number of backslashes matters: an even number doesn't | |
1274 match with an odd number. Thus in "( \) )" and "\( ( | |
1275 \)" the first and last parenthesis match. | |
1621 | 1276 |
7 | 1277 When the '%' character is not present in 'cpoptions' |
1278 |cpo-%|, parens and braces inside double quotes are | |
1279 ignored, unless the number of parens/braces in a line | |
1280 is uneven and this line and the previous one does not | |
1281 end in a backslash. '(', '{', '[', ']', '}' and ')' | |
1282 are also ignored (parens and braces inside single | |
1283 quotes). Note that this works fine for C, but not for | |
1284 Perl, where single quotes are used for strings. | |
1621 | 1285 |
1286 Nothing special is done for matches in comments. You | |
1287 can either use the matchit plugin |matchit-install| or | |
1288 put quotes around matches. | |
1289 | |
1290 No count is allowed, {count}% jumps to a line {count} | |
1291 percentage down the file |N%|. Using '%' on | |
7 | 1292 #if/#else/#endif makes the movement linewise. |
1293 | |
1294 *[(* | |
24278 | 1295 [( Go to [count] previous unmatched '('. |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1296 |exclusive| motion. |
7 | 1297 *[{* |
24278 | 1298 [{ Go to [count] previous unmatched '{'. |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1299 |exclusive| motion. |
7 | 1300 *])* |
24278 | 1301 ]) Go to [count] next unmatched ')'. |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1302 |exclusive| motion. |
7 | 1303 *]}* |
24278 | 1304 ]} Go to [count] next unmatched '}'. |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1305 |exclusive| motion. |
7 | 1306 |
1307 The above four commands can be used to go to the start or end of the current | |
1308 code block. It is like doing "%" on the '(', ')', '{' or '}' at the other | |
1309 end of the code block, but you can do this from anywhere in the code block. | |
1310 Very useful for C programs. Example: When standing on "case x:", "[{" will | |
1311 bring you back to the switch statement. | |
1312 | |
1313 *]m* | |
1314 ]m Go to [count] next start of a method (for Java or | |
1315 similar structured language). When not before the | |
1316 start of a method, jump to the start or end of the | |
34020
fb167ca472fe
runtime(doc): clarify behaviour of ]m and ]M motions
Christian Brabandt <cb@256bit.org>
parents:
33386
diff
changeset
|
1317 class. |exclusive| motion. |
7 | 1318 *]M* |
1319 ]M Go to [count] next end of a method (for Java or | |
1320 similar structured language). When not before the end | |
1321 of a method, jump to the start or end of the class. | |
34020
fb167ca472fe
runtime(doc): clarify behaviour of ]m and ]M motions
Christian Brabandt <cb@256bit.org>
parents:
33386
diff
changeset
|
1322 |exclusive| motion. |
7 | 1323 *[m* |
1324 [m Go to [count] previous start of a method (for Java or | |
1325 similar structured language). When not after the | |
1326 start of a method, jump to the start or end of the | |
1327 class. When no '{' is found before the cursor this is | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1328 an error. |exclusive| motion. |
7 | 1329 *[M* |
1330 [M Go to [count] previous end of a method (for Java or | |
1331 similar structured language). When not after the | |
1332 end of a method, jump to the start or end of the | |
1333 class. When no '}' is found before the cursor this is | |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1334 an error. |exclusive| motion. |
7 | 1335 |
24278 | 1336 The above four commands assume that the file contains a class with methods. |
7 | 1337 The class definition is surrounded in '{' and '}'. Each method in the class |
1338 is also surrounded with '{' and '}'. This applies to the Java language. The | |
1339 file looks like this: > | |
1340 | |
1341 // comment | |
1342 class foo { | |
1343 int method_one() { | |
1344 body_one(); | |
1345 } | |
1346 int method_two() { | |
1347 body_two(); | |
1348 } | |
1349 } | |
24278 | 1350 |
1351 [To try this out copy the text and put it in a new buffer, the help text above | |
1352 confuses the jump commands] | |
1353 | |
7 | 1354 Starting with the cursor on "body_two()", using "[m" will jump to the '{' at |
1355 the start of "method_two()" (obviously this is much more useful when the | |
1356 method is long!). Using "2[m" will jump to the start of "method_one()". | |
1357 Using "3[m" will jump to the start of the class. | |
1358 | |
1359 *[#* | |
24278 | 1360 [# Go to [count] previous unmatched "#if" or "#else". |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1361 |exclusive| motion. |
7 | 1362 |
1363 *]#* | |
24278 | 1364 ]# Go to [count] next unmatched "#else" or "#endif". |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1365 |exclusive| motion. |
7 | 1366 |
1367 These two commands work in C programs that contain #if/#else/#endif | |
1368 constructs. It brings you to the start or end of the #if/#else/#endif where | |
1369 the current line is included. You can then use "%" to go to the matching line. | |
1370 | |
1371 *[star* *[/* | |
24278 | 1372 [* or [/ Go to [count] previous start of a C comment "/*". |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1373 |exclusive| motion. |
7 | 1374 |
1375 *]star* *]/* | |
24278 | 1376 ]* or ]/ Go to [count] next end of a C comment "*/". |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1377 |exclusive| motion. |
7 | 1378 |
1379 | |
1380 *H* | |
1381 H To line [count] from top (Home) of window (default: | |
1382 first line on the window) on the first non-blank | |
1383 character |linewise|. See also 'startofline' option. | |
12646
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1384 Cursor is adjusted for 'scrolloff' option, unless an |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1385 operator is pending, in which case the text may |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1386 scroll. E.g. "yH" yanks from the first visible line |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1387 until the cursor line (inclusive). |
7 | 1388 |
1389 *M* | |
1390 M To Middle line of window, on the first non-blank | |
1391 character |linewise|. See also 'startofline' option. | |
1392 | |
1393 *L* | |
1394 L To line [count] from bottom of window (default: Last | |
1395 line on the window) on the first non-blank character | |
1396 |linewise|. See also 'startofline' option. | |
12646
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1397 Cursor is adjusted for 'scrolloff' option, unless an |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1398 operator is pending, in which case the text may |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1399 scroll. E.g. "yL" yanks from the cursor to the last |
b908a3682f6e
patch 8.0.1201: "yL" is affected by 'scrolloff'
Christian Brabandt <cb@256bit.org>
parents:
11160
diff
changeset
|
1400 visible line. |
7 | 1401 |
1402 <LeftMouse> Moves to the position on the screen where the mouse | |
36 | 1403 click is |exclusive|. See also |<LeftMouse>|. If the |
7 | 1404 position is in a status line, that window is made the |
16553
0e473e9e70c2
patch 8.1.1280: remarks about functionality not in Vi clutters the help
Bram Moolenaar <Bram@vim.org>
parents:
16023
diff
changeset
|
1405 active window and the cursor is not moved. |
7 | 1406 |
14421 | 1407 vim:tw=78:ts=8:noet:ft=help:norl: |