mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2024-11-25 07:42:59 +01:00
1081 lines
54 KiB
Plaintext
1081 lines
54 KiB
Plaintext
*motion.txt* For IdeaVim version @VERSION@. Last change: 2006 Dec 31
|
|
|
|
|
|
IdeaVim REFERENCE MANUAL by Rick Maddy
|
|
|
|
|
|
Cursor motions *cursor-motions* *navigation*
|
|
|
|
These commands move the cursor position. If the new position is off of the
|
|
screen, the screen is scrolled to show the cursor (see also 'scrolljump' and
|
|
'scrolloff' options).
|
|
|
|
1. Motions and operators |operator|
|
|
2. Left-right motions |left-right-motions|
|
|
3. Up-down motions |up-down-motions|
|
|
4. Word motions |word-motions|
|
|
5. Text object motions |object-motions|
|
|
6. Text object selection |object-select|
|
|
7. Marks |mark-motions|
|
|
8. Jumps |jump-motions|
|
|
9. Various motions |various-motions|
|
|
|
|
General remarks:
|
|
|
|
If you want to know where you are in the file use the "CTRL-G" command
|
|
|CTRL-G| or the "g CTRL-G" command |g_CTRL-G|.
|
|
<!--
|
|
If you set the 'ruler' option,
|
|
the cursor position is continuously shown in the status line (which slows down
|
|
Vim a little).
|
|
|
|
-->
|
|
Experienced users prefer the hjkl keys because they are always right under
|
|
their fingers. Beginners often prefer the arrow keys, because they do not
|
|
know what the hjkl keys do. The mnemonic value of hjkl is clear from looking
|
|
at the keyboard. Think of j as an arrow pointing downwards.
|
|
|
|
<!--
|
|
The 'virtualedit' option can be set to make it possible to move the cursor to
|
|
positions where there is no character or halfway a character.
|
|
|
|
-->
|
|
==============================================================================
|
|
1. Motions and operators *operator*
|
|
|
|
The motion commands can be used after an operator command, to have the command
|
|
operate on the text that was moved over. That is the text between the cursor
|
|
position before and after the motion. Operators are generally used to delete
|
|
or change text. The following operators are available:
|
|
|
|
|c| c change
|
|
|d| d delete
|
|
|y| y yank into register (does not change the text)
|
|
|~| ~ swap case (only if 'tildeop' is set)
|
|
|g~| g~ swap case
|
|
|gu| gu make lowercase
|
|
|gU| gU make uppercase
|
|
|!| ! filter through an external program
|
|
<!--
|
|
|=| = filter through 'equalprg' or C-indenting if empty
|
|
|gq| gq text formatting
|
|
|g?| g? ROT13 encoding
|
|
-->
|
|
|>| > shift right
|
|
|<| < shift left
|
|
<!--
|
|
|zf| zf define a fold
|
|
-->
|
|
|
|
If the motion includes a count and the operator also had a count before it,
|
|
the two counts are multiplied. For example: "2d3w" deletes six words.
|
|
|
|
After applying the operator the cursor is mostly left at the start of the text
|
|
that was operated upon. For example, "yfe" doesn't move the cursor, but "yFe"
|
|
moves the cursor leftwards to the "e" where the yank started.
|
|
|
|
*linewise* *characterwise*
|
|
The operator either affects whole lines, or the characters between the start
|
|
and end position. Generally, motions that move between lines affect lines
|
|
(are linewise), and motions that move within a line affect characters (are
|
|
characterwise). However, there are some exceptions.
|
|
|
|
*exclusive* *inclusive*
|
|
A character motion is either inclusive or exclusive. When inclusive, the start
|
|
and end position of the motion are included in the operation. When exclusive,
|
|
the last character towards the end of the buffer is not included. Linewise
|
|
motions always include the start and end position.
|
|
|
|
Which motions are linewise, inclusive or exclusive is mentioned below. There
|
|
are however, two general exceptions:
|
|
1. If the motion is exclusive and the end of the motion is in column 1, the
|
|
end of the motion is moved to the end of the previous line and the motion
|
|
becomes inclusive. Example: "}" moves to the first line after a paragraph,
|
|
but "d}" will not include that line.
|
|
2. If the motion is exclusive, the end of the motion is in column 1 and the
|
|
start of the motion was at or before the first non-blank in the line, the
|
|
motion becomes linewise. Example: If a paragraph begins with some blanks
|
|
and you do "d}" while standing on the first non-blank, all the lines of
|
|
the paragraph are deleted, including the blanks. If you do a put now, the
|
|
deleted lines will be inserted below the cursor position.
|
|
|
|
<!--
|
|
Note that when the operator is pending (the operator command is typed, but the
|
|
motion isn't yet), a special set of mappings can be used. See |:omap|.
|
|
-->
|
|
|
|
Instead of first giving the operator and then a motion you can use Visual
|
|
mode: mark the start of the text with "v", move the cursor to the end of the
|
|
text that is to be affected and then hit the operator. The text between the
|
|
start and the cursor position is highlighted, so you can see what text will
|
|
be operated upon. This allows much more freedom, but requires more key
|
|
strokes and has limited redo functionality. See the chapter on Visual mode
|
|
|Visual-mode|.
|
|
|
|
<!--
|
|
You can use a ":" command for a motion. For example "d:call FindEnd()".
|
|
But this can't be redone with ".".
|
|
|
|
-->
|
|
|
|
<!--
|
|
FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE
|
|
|
|
When a motion is not of the type you would like to use, you can force another
|
|
type by using "v", "V" or CTRL-V just after the operator.
|
|
Example: >
|
|
dj
|
|
deletes two lines >
|
|
dvj
|
|
deletes from the cursor position until the character below the cursor >
|
|
d<C-V>j
|
|
deletes the character under the cursor and the character below the cursor. >
|
|
|
|
Be careful with forcing a linewise movement to be used characterwise or
|
|
blockwise, the column may not always be defined.
|
|
|
|
*o_v*
|
|
v When used after an operator, before the motion command: Force
|
|
the operator to work characterwise, also when the motion is
|
|
linewise. If the motion was linewise, it will become
|
|
|exclusive|.
|
|
If the motion already was characterwise, toggle
|
|
inclusive/exclusive. This can be used to make an exclusive
|
|
motion inclusive and an inclusive motion exclusive.
|
|
|
|
*o_V*
|
|
V When used after an operator, before the motion command: Force
|
|
the operator to work linewise, also when the motion is
|
|
characterwise.
|
|
|
|
*o_CTRL-V*
|
|
CTRL-V When used after an operator, before the motion commmand: Force
|
|
the operator to work blockwise. This works like Visual block
|
|
mode selection, with the corners defined by the cursor
|
|
position before and after the motion.
|
|
-->
|
|
|
|
==============================================================================
|
|
2. Left-right motions *left-right-motions*
|
|
|
|
h or *h*
|
|
<Left> or *<Left>*
|
|
CTRL-H or *CTRL-H* *<BS>*
|
|
<BS> [count] characters to the left. |exclusive| motion.
|
|
Note: If you prefer <BS> to delete a character, use
|
|
the mapping:
|
|
:map CTRL-V<BS> X
|
|
(to enter "CTRL-V<BS>" type the CTRL-V key, followed
|
|
by the <BS> key)
|
|
|
|
l or *l*
|
|
<Right> or *<Right>* *<Space>*
|
|
<Space> [count] characters to the right. |exclusive| motion.
|
|
|
|
*0*
|
|
0 To the first character of the line. |exclusive|
|
|
motion. When moving up or down, stay in same screen
|
|
column (if possible).
|
|
|
|
*<Home>* *<kHome>*
|
|
<Home> To the first character of the line. |exclusive|
|
|
motion. When moving up or down, stay in same text
|
|
column (if possible). Works like "1|", which differs
|
|
from "0" when the line starts with a <Tab>.
|
|
|
|
*^*
|
|
^ To the first non-blank character of the line.
|
|
|exclusive| motion.
|
|
|
|
*$* *<End>* *<kEnd>*
|
|
$ or <End> To the end of the line. When a count is given also go
|
|
[count - 1] lines downward (inclusive).
|
|
In Visual mode the cursor goes to just after the last
|
|
character in the line.
|
|
When 'virtualedit' is active, "$" may move the cursor
|
|
back from past the end of the line to the last
|
|
character in the line.
|
|
|
|
*g_*
|
|
g_ To the last non-blank character of the line and
|
|
[count - 1] lines downward (inclusive).
|
|
|
|
*g0* *g<Home>*
|
|
g0 or g<Home> When lines wrap ('wrap' on): To the first character of
|
|
the screen line. |exclusive| motion. Differs from
|
|
"0" when a line is wider than the screen.
|
|
When lines don't wrap ('wrap' off): To the leftmost
|
|
character of the current line that is on the screen.
|
|
Differs from "0" when the first character of the line
|
|
is not on the screen.
|
|
|
|
*g^*
|
|
g^ When lines wrap ('wrap' on): To the first non-blank
|
|
character of the screen line. |exclusive| motion.
|
|
Differs from "^" when a line is wider than the screen.
|
|
When lines don't wrap ('wrap' off): To the leftmost
|
|
non-blank character of the current line that is on the
|
|
screen. Differs from "^" when the first non-blank
|
|
character of the line is not on the screen.
|
|
|
|
*gm*
|
|
gm Like "g0", but half a screenwidth to the right (or as
|
|
much as possible).
|
|
|
|
*g$* *g<End>*
|
|
g$ or g<End> When lines wrap ('wrap' on): To the last character of
|
|
the screen line and [count - 1] screen lines downward
|
|
(inclusive). Differs from "$" when a line is wider
|
|
than the screen.
|
|
When lines don't wrap ('wrap' off): To the rightmost
|
|
character of the current line that is visible on the
|
|
screen. Differs from "$" when the last character of
|
|
the line is not on the screen or when a count is used.
|
|
|
|
*bar*
|
|
| To screen column [count] in the current line.
|
|
|exclusive| motion.
|
|
|
|
*f*
|
|
f{char} To [count]'th occurrence of {char} to the right. The
|
|
cursor is placed on {char} (inclusive).
|
|
{char} can be entered as a digraph |digraph-arg|.
|
|
<!--
|
|
When 'encoding' is set to Unicode, composing
|
|
characters may be used, see |utf-8-char-arg|.
|
|
|:lmap| mappings apply to {char}. The CTRL-^ command
|
|
in Insert mode can be used to switch this on/off
|
|
|i_CTRL-^|.
|
|
-->
|
|
|
|
*F*
|
|
F{char} To the [count]'th occurrence of {char} to the left.
|
|
The cursor is placed on {char} (inclusive).
|
|
{char} can be entered like with the |f| command.
|
|
|
|
*t*
|
|
t{char} Till before [count]'th occurrence of {char} to the
|
|
right. The cursor is placed on the character left of
|
|
{char} (inclusive).
|
|
{char} can be entered like with the |f| command.
|
|
|
|
*T*
|
|
T{char} Till after [count]'th occurrence of {char} to the
|
|
left. The cursor is placed on the character right of
|
|
{char} (inclusive).
|
|
{char} can be entered like with the |f| command.
|
|
|
|
*;*
|
|
; Repeat latest f, t, F or T [count] times.
|
|
|
|
*,*
|
|
, Repeat latest f, t, F or T in opposite direction
|
|
[count] times.
|
|
|
|
These commands move the cursor to the specified column in the current line.
|
|
They stop at the first column and at the end of the line, except "$", which
|
|
may move to one of the next lines. See 'whichwrap' option to make some of the
|
|
commands move across line boundaries.
|
|
|
|
==============================================================================
|
|
3. Up-down motions *up-down-motions*
|
|
|
|
k or *k*
|
|
<Up> or *<Up>* *CTRL-P*
|
|
CTRL-P [count] lines upward (linewise).
|
|
|
|
j or *j*
|
|
<Down> or *<Down>*
|
|
CTRL-J or *CTRL-J*
|
|
<NL> or *<NL>* *CTRL-N*
|
|
CTRL-N [count] lines downward (linewise).
|
|
|
|
gk or *gk* *g<Up>*
|
|
g<Up> [count] display lines upward. |exclusive| motion.
|
|
Differs from 'k' when lines wrap, and when used with
|
|
an operator, because it's not linewise.
|
|
|
|
gj or *gj* *g<Down>*
|
|
g<Down> [count] display lines downward. |exclusive| motion.
|
|
Differs from 'j' when lines wrap, and when used with
|
|
an operator, because it's not linewise.
|
|
|
|
*-*
|
|
- <minus> [count] lines upward, on the first non-blank
|
|
character (linewise).
|
|
|
|
+ or *+*
|
|
CTRL-M or *CTRL-M* *<CR>*
|
|
<CR> [count] lines downward, on the first non-blank
|
|
character (linewise).
|
|
|
|
*_*
|
|
_ <underscore> [count] - 1 lines downward, on the first non-blank
|
|
character (linewise).
|
|
|
|
*G*
|
|
G Goto line [count], default last line, on the first
|
|
non-blank character (linewise). If 'startofline' not
|
|
set, keep the same column.
|
|
|
|
*<C-End>*
|
|
<C-End> Goto line [count], default last line, on the last
|
|
character (inclusive).
|
|
|
|
<C-Home> or *gg* *<C-Home>*
|
|
gg Goto line [count], default first line, on the first
|
|
non-blank character (linewise). If 'startofline' not
|
|
set, keep the same column.
|
|
|
|
:[range] Set the cursor on the specified line number. If
|
|
there are several numbers, the last one is used.
|
|
|
|
*N%*
|
|
{count}% Go to {count} percentage in the file, on the first
|
|
non-blank in the line (linewise). To compute the new
|
|
line number this formula is used:
|
|
({count} * number-of-lines + 99) / 100
|
|
See also 'startofline' option.
|
|
|
|
:[range]go[to] [count] *:go* *:goto* *go*
|
|
[count]go Go to {count} byte in the buffer. Default [count] is
|
|
one, start of the file. When giving [range], the
|
|
last number in it used as the byte count. End-of-line
|
|
characters are counted depending on the current
|
|
'fileformat' setting.
|
|
|
|
These commands move to the specified line. They stop when reaching the first
|
|
or the last line. The first two commands put the cursor in the same column
|
|
(if possible) as it was after the last command that changed the column,
|
|
except after the "$" command, then the cursor will be put on the last
|
|
character of the line.
|
|
|
|
==============================================================================
|
|
4. Word motions *word-motions*
|
|
|
|
<S-Right> or *<S-Right>* *w*
|
|
w [count] words forward. |exclusive| motion.
|
|
|
|
<C-Right> or *<C-Right>* *W*
|
|
W [count] WORDS forward. |exclusive| motion.
|
|
|
|
*e*
|
|
e Forward to the end of word [count] (inclusive).
|
|
|
|
*E*
|
|
E Forward to the end of WORD [count] (inclusive).
|
|
|
|
<S-Left> or *<S-Left>* *b*
|
|
b [count] words backward. |exclusive| motion.
|
|
|
|
<C-Left> or *<C-Left>* *B*
|
|
B [count] WORDS backward. |exclusive| motion.
|
|
|
|
*ge*
|
|
ge Backward to the end of word [count] (inclusive).
|
|
|
|
*gE*
|
|
gE Backward to the end of WORD [count] (inclusive).
|
|
|
|
*[w*
|
|
[w [count] camel words forward. |exclusive| motion.
|
|
{not in Vim}.
|
|
|
|
*[b*
|
|
[b [count] camel words backward. |exclusive| motion.
|
|
{not in Vim}.
|
|
|
|
*]w*
|
|
]w Forward to the end of camel word [count] (inclusive).
|
|
{not in Vim}.
|
|
|
|
*]b*
|
|
]b Backward to the end of camel word [count] (inclusive).
|
|
{not in Vim}.
|
|
|
|
These commands move over words or WORDS.
|
|
*word*
|
|
A word consists of a sequence of letters, digits and underscores, or a
|
|
sequence of other non-blank characters, separated with white space (spaces,
|
|
tabs, <EOL>). This can be changed with the 'iskeyword' option.
|
|
*WORD*
|
|
A WORD consists of a sequence of non-blank characters, separated with white
|
|
space. An empty line is also considered to be a word and a WORD.
|
|
|
|
A sequence of folded lines is counted for one word of a single character.
|
|
"w" and "W", "e" and "E" move to the start/end of the first word or WORD after
|
|
a range of folded lines. "b" and "B" move to the start of the first word or
|
|
WORD before the fold.
|
|
|
|
Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is
|
|
on a non-blank. This is because "cw" is interpreted as change-word, and a
|
|
word does not include the following white space. {Vi: "cw" when on a blank
|
|
followed by other blanks changes only the first blank; this is probably a
|
|
bug, because "dw" deletes all the blanks}
|
|
|
|
Another special case: When using the "w" motion in combination with an
|
|
operator and the last word moved over is at the end of a line, the end of
|
|
that word becomes the end of the operated text, not the first word in the
|
|
next line.
|
|
|
|
The original Vi implementation of "e" is buggy. For example, the "e" command
|
|
will stop on the first character of a line if the previous line was empty.
|
|
But when you use "2e" this does not happen. In Vim "ee" and "2e" are the
|
|
same, which is more logical. However, this causes a small incompatibility
|
|
between Vi and Vim.
|
|
|
|
==============================================================================
|
|
5. Text object motions *object-motions*
|
|
|
|
*(*
|
|
( [count] sentences backward. |exclusive| motion.
|
|
|
|
*)*
|
|
) [count] sentences forward. |exclusive| motion.
|
|
|
|
*g(*
|
|
g( [count] sentence ends backward. |exclusive| motion.
|
|
(not in Vim.)
|
|
|
|
*g)*
|
|
g) [count] sentence ends forward. |exclusive| motion.
|
|
(not in Vim.)
|
|
|
|
*{*
|
|
{ [count] paragraphs backward. |exclusive| motion.
|
|
|
|
*}*
|
|
} [count] paragraphs forward. |exclusive| motion.
|
|
|
|
*]]*
|
|
]] [count] sections forward or to the next '{' in the
|
|
first column. When used after an operator, then the
|
|
'}' in the first column. |linewise|
|
|
|
|
*][*
|
|
][ [count] sections forward or to the next '}' in the
|
|
first column. |linewise|
|
|
|
|
*[[*
|
|
[[ [count] sections backward or to the previous '{' in
|
|
the first column. |linewise|
|
|
|
|
*[]*
|
|
[] [count] sections backward or to the previous '}' in
|
|
the first column. |linewise|
|
|
|
|
These commands move over three kinds of text objects.
|
|
|
|
*sentence*
|
|
A sentence is defined as ending at a '.', '!' or '?' followed by either the
|
|
end of a line, or by a space or tab. Any number of closing ')', ']', '"'
|
|
and ''' characters my appear after the '.', '!' or '?' before the spaces,
|
|
tabs or end of line. A paragraph and section boundary is also a sentence
|
|
boundary.
|
|
If the 'J' flag is present in 'cpoptions', at least two spaces have to
|
|
follow the punctuation mark; <Tab>s are not recognized as white space.
|
|
The definition of a sentence cannot be changed.
|
|
|
|
*paragraph*
|
|
A paragraph begins after each empty line, and also at each of a set of
|
|
paragraph macros, specified by the pairs of characters in the 'paragraphs'
|
|
option. The default is "IPLPPPQPP LIpplpipbp", which corresponds to the
|
|
macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in the
|
|
first column). A section boundary is also a paragraph boundary. Note that
|
|
this does not include a '{' or '}' in the first column. Also note that a
|
|
blank line (only containing white space) is NOT a paragraph boundary.
|
|
|
|
*section*
|
|
A section begins after a form-feed (<C-L>) in the first column and at each of
|
|
a set of section macros, specified by the pairs of characters in the
|
|
'sections' option. The default is "SHNHH HUnhsh", which defines a section to
|
|
start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
|
|
|
|
The "]" and "[" commands stop at the '{' or '}' in the first column. This is
|
|
useful to find the start or end of a function in a C program. Note that the
|
|
first character of the command determines the search direction and the
|
|
second character the type of brace found.
|
|
|
|
<!--
|
|
If your '{' or '}' are not in the first column, and you would like to use "[["
|
|
and "]]" anyway, try these mappings: >
|
|
:map [[ ?{<CR>w99[{
|
|
:map ][ /}<CR>b99]}
|
|
:map ]] j0[[%/{<CR>
|
|
:map [] k$][%?}<CR>
|
|
[type these literally, see |<>|]
|
|
|
|
-->
|
|
==============================================================================
|
|
6. Text object selection *object-select* *text-objects*
|
|
*v_a* *v_i*
|
|
|
|
This is a series of commands that can only be used while in Visual mode or
|
|
after an operator. The commands that start with "a" select "a"n object
|
|
including white space, the commands starting with "i" select an "inner" object
|
|
without white space, or just the white space. Thus the "inner" commands
|
|
always select less text than the "a" commands.
|
|
|
|
*v_aw* *aw*
|
|
aw "a word", select [count] words (see |word|).
|
|
Leading or trailing white space is included, but not
|
|
counted.
|
|
When used in Visual linewise mode "aw" switches to
|
|
Visual characterwise mode.
|
|
|
|
*v_iw* *iw*
|
|
iw "inner word", select [count] words (see |word|).
|
|
White space between words is counted too.
|
|
When used in Visual linewise mode "iw" switches to
|
|
Visual characterwise mode.
|
|
|
|
*v_aW* *aW*
|
|
aW "a WORD", select [count] WORDs (see |WORD|).
|
|
Leading or trailing white space is included, but not
|
|
counted.
|
|
When used in Visual linewise mode "aW" switches to
|
|
Visual characterwise mode.
|
|
|
|
*v_iW* *iW*
|
|
iW "inner WORD", select [count] WORDs (see |WORD|).
|
|
White space between words is counted too.
|
|
When used in Visual linewise mode "iW" switches to
|
|
Visual characterwise mode.
|
|
|
|
*v_as* *as*
|
|
as "a sentence", select [count] sentences (see
|
|
|sentence|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
*v_is* *is*
|
|
is "inner sentence", select [count] sentences (see
|
|
|sentence|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
*v_ap* *ap*
|
|
ap "a paragraph", select [count] paragraphs (see
|
|
|paragraph|).
|
|
Exception: a blank line (only containing white space)
|
|
is also a paragraph boundary.
|
|
When used in Visual mode it is made linewise.
|
|
|
|
*v_ip* *ip*
|
|
ip "inner paragraph", select [count] paragraphs (see
|
|
|paragraph|).
|
|
Exception: a blank line (only containing white space)
|
|
is also a paragraph boundary.
|
|
When used in Visual mode it is made linewise.
|
|
|
|
a] *v_a]* *v_a[* *a]* *a[*
|
|
a[ "a [] block", select [count] '[' ']' blocks. This
|
|
goes backwards to the [count] unclosed '[', and finds
|
|
the matching ']'. The enclosed text is selected,
|
|
including the '[' and ']'.
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
i] *v_i]* *v_i[* *i]* *i[*
|
|
i[ "inner [] block", select [count] '[' ']' blocks. This
|
|
goes backwards to the [count] unclosed '[', and finds
|
|
the matching ']'. The enclosed text is selected,
|
|
excluding the '[' and ']'.
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
a) *v_a)* *a)* *a(*
|
|
a( *v_ab* *v_a(* *ab*
|
|
ab "a block", select [count] blocks, from "[count] [(" to
|
|
the matching ')', including the '(' and ')' (see
|
|
|[(|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
i) *v_i)* *i)* *i(*
|
|
i( *v_ib* *v_i(* *ib*
|
|
ib "inner block", select [count] blocks, from "[count] [("
|
|
to the matching ')', excluding the '(' and ')' (see
|
|
|[(|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
a> *v_a>* *v_a<* *a>* *a<*
|
|
a< "a <> block", select [count] <> blocks, from the
|
|
[count]'th unmatched '<' backwards to the matching
|
|
'>', including the '<' and '>'.
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
i> *v_i>* *v_i<* *i>* *i<*
|
|
i< "inner <> block", select [count] <> blocks, from
|
|
the [count]'th unmatched '<' backwards to the matching
|
|
'>', excluding the '<' and '>'.
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
a} *v_a}* *a}* *a{*
|
|
a{ *v_aB* *v_a{* *aB*
|
|
aB "a Block", select [count] Blocks, from "[count] [{" to
|
|
the matching '}', including the '{' and '}' (see
|
|
|[{|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
i} *v_i}* *i}* *i{*
|
|
i{ *v_iB* *v_i{* *iB*
|
|
iB "inner Block", select [count] Blocks, from "[count] [{"
|
|
to the matching '}', excluding the '{' and '}' (see
|
|
|[{|).
|
|
When used in Visual mode it is made characterwise.
|
|
|
|
When used after an operator:
|
|
For non-block objects:
|
|
For the "a" commands: The operator applies to the object and the white
|
|
space after the object. If there is no white space after the object
|
|
or when the cursor was in the white space before the object, the white
|
|
space before the object is included.
|
|
For the "inner" commands: If the cursor was on the object, the
|
|
operator applies to the object. If the cursor was on white space, the
|
|
operator applies to the white space.
|
|
For a block object:
|
|
The operator applies to the block where the cursor is in, or the block
|
|
on which the cursor is on one of the braces. For the "inner" commands
|
|
the surrounding braces are excluded. For the "a" commands, the braces
|
|
are included.
|
|
|
|
When used in Visual mode:
|
|
When start and end of the Visual area are the same (just after typing "v"):
|
|
One object is selected, the same as for using an operator.
|
|
When start and end of the Visual area are not the same:
|
|
For non-block objects the area is extended by one object or the white
|
|
space up to the next object, or both for the "a" objects. The
|
|
direction in which this happens depends on which side of the Visual
|
|
area the cursor is. For the block objects the block is extended one
|
|
level outwards.
|
|
|
|
For illustration, here is a list of delete commands, grouped from small to big
|
|
objects. Note that for a single character and a whole line the existing vi
|
|
movement commands are used.
|
|
"dl" delete character (alias: "x") |dl|
|
|
"diw" delete inner word *diw*
|
|
"daw" delete a word *daw*
|
|
"diW" delete inner WORD (see |WORD|) *diW*
|
|
"daW" delete a WORD (see |WORD|) *daW*
|
|
"dd" delete one line |dd|
|
|
"dis" delete inner sentence *dis*
|
|
"das" delete a sentence *das*
|
|
"dib" delete inner '(' ')' block *dib*
|
|
"dab" delete a '(' ')' block *dab*
|
|
"dip" delete inner paragraph *dip*
|
|
"dap" delete a paragraph *dap*
|
|
"diB" delete inner '{' '}' block *diB*
|
|
"daB" delete a '{' '}' block *daB*
|
|
|
|
Note the difference between using a movement command and an object. The
|
|
movement command operates from here (cursor position) to where the movement
|
|
takes us. When using an object the whole object is operated upon, no matter
|
|
where on the object the cursor is. For example, compare "dw" and "da": "dw"
|
|
deletes from the cursor position to the start of the next word, "da" deletes
|
|
the word under the cursor and the space after or before it.
|
|
|
|
==============================================================================
|
|
7. Marks *mark-motions* *E20* *E78*
|
|
|
|
Jumping to a mark can be done in two ways:
|
|
1. With ` (backtick): The cursor is positioned at the specified location
|
|
and the motion is |exclusive|.
|
|
2. With ' (single quote): The cursor is positioned on the first non-blank
|
|
character in the line of the specified location and
|
|
the motion is linewise.
|
|
|
|
*m* *mark* *Mark*
|
|
m{a-zA-Z} Set mark {a-zA-Z} at cursor position (does not move
|
|
the cursor, this is not a motion command).
|
|
|
|
m' or m` Set the previous context mark. This can be jumped to
|
|
with the "''" or "``" command (does not move the
|
|
cursor, this is not a motion command).
|
|
|
|
*:ma* *:mark* *E191*
|
|
:[range]ma[rk] {a-zA-Z} Set mark {a-zA-Z} at last line number in [range],
|
|
column 0. Default is cursor line.
|
|
|
|
*:k*
|
|
:[range]k{a-zA-Z} Same as :mark, but the space before the mark name can
|
|
be omitted.
|
|
|
|
*'* *'a* *`* *`a*
|
|
'{a-z} `{a-z} Jump to the mark {a-z}.
|
|
|
|
*'A* *'0* *`A* *`0*
|
|
'{A-Z0-9} `{A-Z0-9} To the mark {A-Z0-9} in the correct file (not a motion
|
|
command when in another file).
|
|
|
|
*g'* *g'a* *g`* *g`a*
|
|
g'{mark} g`{mark}
|
|
Jump to the {mark}, but don't change the jumplist when
|
|
jumping within the current buffer. Example: >
|
|
g`"
|
|
< jumps to the last known position in a file. See
|
|
$VIMRUNTIME/vimrc_example.vim.
|
|
|
|
*:marks*
|
|
:marks List all the current marks (not a motion command).
|
|
The |'{| and |'}| marks are not listed.
|
|
|
|
*E283*
|
|
:marks {arg} List the marks that are mentioned in {arg} (not a
|
|
motion command). For example: >
|
|
:marks aB
|
|
< to list marks 'a' and 'B'.
|
|
|
|
A mark is not visible in any way. It is just a position in the file that is
|
|
remembered. Do not confuse marks with named registers, they are totally
|
|
unrelated.
|
|
|
|
'a - 'z lowercase marks, valid within one file
|
|
'A - 'Z uppercase marks, also called file marks, valid between files
|
|
'0 - '9 numbered marks, set from .viminfo file
|
|
|
|
Lowercase marks 'a to 'z are remembered as long as the file remains in the
|
|
buffer list. If you remove the file from the buffer list, all its marks are
|
|
lost. If you delete a line that contains a mark, that mark is erased.
|
|
Lowercase marks can be used in combination with operators. For example: "d't"
|
|
deletes the lines from the cursor position to mark 't'. Hint: Use mark 't' for
|
|
Top, 'b' for Bottom, etc.. Lowercase marks are restored when using undo and
|
|
redo.
|
|
|
|
Uppercase marks 'A to 'Z include the file name. {Vi: no uppercase marks} You
|
|
can use them to jump from file to file. You can only use an uppercase mark
|
|
with an operator if the mark is in the current file. The line number of the
|
|
mark remains correct, even if you insert/delete lines or edit another file for
|
|
a moment. When the 'viminfo' option is not empty, uppercase marks are kept in
|
|
the .viminfo file. See |viminfo-file-marks|.
|
|
|
|
Numbered marks '0 to '9 are quite different. They can not be set directly.
|
|
They are only present when using a viminfo file |viminfo-file|. Basically '0
|
|
is the location of the cursor when you last exited Vim, '1 the last but one
|
|
time, etc. See |viminfo-file-marks|.
|
|
|
|
|
|
*'[* *`[*
|
|
'[ `[ To the first character of the previously changed
|
|
or yanked text.
|
|
|
|
*']* *`]*
|
|
'] `] To the last character of the previously changed or
|
|
yanked text.
|
|
|
|
After executing an operator the Cursor is put at the beginning of the text
|
|
that was operated upon. After a put command ("p" or "P") the cursor is
|
|
sometimes placed at the first inserted line and sometimes on the last inserted
|
|
character. The four commands above put the cursor at either end. Example:
|
|
After yanking 10 lines you want to go to the last one of them: "10Y']". After
|
|
inserting several lines with the "p" command you want to jump to the lowest
|
|
inserted line: "p']". This also works for text that has been inserted.
|
|
|
|
Note: After deleting text, the start and end positions are the same, except
|
|
when using blockwise Visual mode. These commands do not work when no change
|
|
was made yet in the current file.
|
|
|
|
*'<* *`<*
|
|
'< `< To the first character of the last selected Visual
|
|
area in the current buffer.
|
|
|
|
*'>* *`>*
|
|
'> `> To the last character of the last selected Visual
|
|
area in the current buffer.
|
|
|
|
*''* *``*
|
|
'' `` To the position before latest jump, or where the last
|
|
"m'" or "m`" command was given.
|
|
Also see |restore-position|.
|
|
|
|
*'quote* *`quote*
|
|
'" `" To the cursor position when last exiting the current
|
|
buffer. Defaults to the first character of the first
|
|
line.
|
|
<!--
|
|
See |last-position-jump| for how to use this
|
|
for each opened file.
|
|
-->
|
|
Only one position is remembered per buffer, not one
|
|
for each window. As long as the buffer is visible in
|
|
a window the position won't be changed.
|
|
|
|
*'^* *`^*
|
|
'^ `^ To the position where the cursor was the last time
|
|
when Insert mode was stopped This is used by the |gi|
|
|
command.
|
|
|
|
*'.* *`.*
|
|
'. `. To the position where the last change was made. The
|
|
position is at or near where the change started.
|
|
Sometimes a command is executed as several changes,
|
|
then the position can be near the end of what the
|
|
command changed. For example when inserting a word,
|
|
the position will be on the last character.
|
|
|
|
*'(* *`(*
|
|
'( `( To the start of the current sentence, like the |(|
|
|
command.
|
|
|
|
*')* *`)*
|
|
') `) To the end of the current sentence, like the |)|
|
|
command.
|
|
|
|
*'{* *`{*
|
|
'{ `{ To the start of the current paragraph, like the |{|
|
|
command.
|
|
|
|
*'}* *`}*
|
|
'} `} To the end of the current paragraph, like the |}|
|
|
command.
|
|
|
|
These commands are not marks themselves, but jump to a mark:
|
|
|
|
*]'*
|
|
]' [count] times to next line with a lowercase mark below
|
|
the cursor, on the first non-blank character in the
|
|
line.
|
|
|
|
*]`*
|
|
]` [count] times to lowercase mark after the cursor. {not
|
|
in Vi}
|
|
|
|
*['*
|
|
[' [count] times to previous line with a lowercase mark
|
|
before the cursor, on the first non-blank character in
|
|
the line.
|
|
|
|
*[`*
|
|
[` [count] times to lowercase mark before the cursor.
|
|
|
|
==============================================================================
|
|
8. Jumps *jump-motions*
|
|
|
|
A "jump" is one of the following commands: "'", "`", "G", "/", "?", "n",
|
|
"N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and
|
|
the commands that start editing a new file. If you make the cursor "jump"
|
|
with one of these commands, the position of the cursor before the jump is
|
|
remembered. You can return to that position with the "''" and "``" command,
|
|
unless the line containing that position was changed or deleted.
|
|
|
|
*CTRL-O*
|
|
CTRL-O Go to [count] Older cursor position in jump list
|
|
(not a motion command).
|
|
|
|
<Tab> or *CTRL-I* *<Tab>*
|
|
CTRL-I Go to [count] newer cursor position in jump list
|
|
(not a motion command).
|
|
In a |quickfix-window| it takes you to the position of
|
|
the error under the cursor.
|
|
|
|
*:ju* *:jumps*
|
|
:ju[mps] Print the jump list (not a motion command). {not in
|
|
Vi} {not available without the +jumplist feature}
|
|
|
|
*jumplist*
|
|
Jumps are remembered in a jump list. With the CTRL-O and CTRL-I command you
|
|
can go to cursor positions before older jumps, and back again. Thus you can
|
|
move up and down the list. There is a separate jump list for each window.
|
|
The maximum number of entries is fixed at 100.
|
|
{not available without the +jumplist feature}
|
|
|
|
For example, after three jump commands you have this jump list:
|
|
|
|
jump line col file/line ~
|
|
3 1 0 some text ~
|
|
2 70 0 another line ~
|
|
1 1154 23 end. ~
|
|
> ~
|
|
|
|
The "file/line" column shows the file name, or the text at the jump if it is
|
|
in the current file (an indent is removed and a long line is truncated to fit
|
|
in the window).
|
|
|
|
You are currently in line 1167. If you then use the CTRL-O command, the
|
|
cursor is put in line 1154. This results in:
|
|
|
|
jump line col file/line ~
|
|
2 1 0 some text ~
|
|
1 70 0 another line ~
|
|
> 0 1154 23 end. ~
|
|
1 1167 0 foo bar ~
|
|
|
|
The pointer will be set at the last used jump position. The next CTRL-O
|
|
command will use the entry above it, the next CTRL-I command will use the
|
|
entry below it. If the pointer is below the last entry, this indicates that
|
|
you did not use a CTRL-I or CTRL-O before. In this case the CTRL-O command
|
|
will cause the cursor position to be added to the jump list, so you can get
|
|
back to the position before the CTRL-O. In this case this is line 1167.
|
|
|
|
With more CTRL-O commands you will go to lines 70 and 1. If you use CTRL-I
|
|
you can go back to 1154 and 1167 again. Note that the number in the "jump"
|
|
column indicates the count for the CTRL-O or CTRL-I command that takes you to
|
|
this position.
|
|
|
|
If you use a jump command, the current line number is inserted at the end of
|
|
the jump list. If the same line was already in the jump list, it is removed.
|
|
The result is that when repeating CTRL-O you will get back to old positions
|
|
only once.
|
|
|
|
After the CTRL-O command that got you into line 1154 you could give another
|
|
jump command (e.g., "G"). The jump list would then become:
|
|
|
|
jump line col file/line ~
|
|
4 1 0 some text ~
|
|
3 70 0 another line ~
|
|
2 1167 0 foo bar ~
|
|
1 1154 23 end. ~
|
|
> ~
|
|
|
|
The line numbers will be adjusted for deleted and inserted lines. This fails
|
|
if you stop editing a file without writing, like with ":n!".
|
|
|
|
When you split a window, the jumplist will be copied to the new window.
|
|
-->
|
|
|
|
If you have included the ' item in the 'viminfo' option the jumplist will be
|
|
stored in the viminfo file and restored when starting Vim.
|
|
|
|
==============================================================================
|
|
9. Various motions *various-motions*
|
|
|
|
*%*
|
|
% Find the next item in this line after or under the
|
|
cursor and jump to its match. |inclusive| motion.
|
|
Items can be:
|
|
([{}]) parenthesis or (curly/square) brackets
|
|
(this can be changed with the
|
|
'matchpairs' option)
|
|
/* */ start or end of C-style comment
|
|
#if, #ifdef, #else, #elif, #endif
|
|
C preprocessor conditionals (when the
|
|
cursor is on the # or no ([{
|
|
following)
|
|
For other items the matchit plugin can be used, see
|
|
|matchit-install|.
|
|
|
|
<!--
|
|
When 'cpoptions' contains "M" |cpo-M| backslashes
|
|
before parens and braces are ignored. Without "M" the
|
|
number of backslashes matters: an even number doesn't
|
|
match with an odd number. Thus in "( \) )" and "\( (
|
|
\)" the first and last parenthesis match.
|
|
When the '%' character is not present in 'cpoptions'
|
|
|cpo-%|, parens and braces inside double quotes are
|
|
ignored, unless the number of parens/braces in a line
|
|
is uneven and this line and the previous one does not
|
|
end in a backslash. '(', '{', '[', ']', '}' and ')'
|
|
are also ignored (parens and braces inside single
|
|
quotes). Note that this works fine for C, but not for
|
|
Perl, where single quotes are used for strings.
|
|
No count is allowed ({count}% jumps to a line {count}
|
|
percentage down the file |N%|). Using '%' on
|
|
#if/#else/#endif makes the movement linewise.
|
|
-->
|
|
|
|
*[(*
|
|
[( go to [count] previous unmatched '('.
|
|
|exclusive| motion.
|
|
|
|
*[{*
|
|
[{ go to [count] previous unmatched '{'.
|
|
|exclusive| motion.
|
|
|
|
*])*
|
|
]) go to [count] next unmatched ')'.
|
|
|exclusive| motion.
|
|
|
|
*]}*
|
|
]} go to [count] next unmatched '}'.
|
|
|exclusive| motion.
|
|
|
|
The above four commands can be used to go to the start or end of the current
|
|
code block. It is like doing "%" on the '(', ')', '{' or '}' at the other
|
|
end of the code block, but you can do this from anywhere in the code block.
|
|
Very useful for C programs. Example: When standing on "case x:", "[{" will
|
|
bring you back to the switch statement.
|
|
|
|
*]m*
|
|
]m Go to [count] next start of a method (for Java or
|
|
similar structured language). When not before the
|
|
start of a method, jump to the start or end of the
|
|
class. When no '{' is found after the cursor, this is
|
|
an error. |exclusive| motion.
|
|
*]M*
|
|
]M Go to [count] next end of a method (for Java or
|
|
similar structured language). When not before the end
|
|
of a method, jump to the start or end of the class.
|
|
When no '}' is found after the cursor, this is an
|
|
error. |exclusive| motion.
|
|
*[m*
|
|
[m Go to [count] previous start of a method (for Java or
|
|
similar structured language). When not after the
|
|
start of a method, jump to the start or end of the
|
|
class. When no '{' is found before the cursor this is
|
|
an error. |exclusive| motion.
|
|
*[M*
|
|
[M Go to [count] previous end of a method (for Java or
|
|
similar structured language). When not after the
|
|
end of a method, jump to the start or end of the
|
|
class. When no '}' is found before the cursor this is
|
|
an error. |exclusive| motion.
|
|
|
|
The above two commands assume that the file contains a class with methods.
|
|
The class definition is surrounded in '{' and '}'. Each method in the class
|
|
is also surrounded with '{' and '}'. This applies to the Java language. The
|
|
file looks like this: >
|
|
|
|
// comment
|
|
class foo {
|
|
int method_one() {
|
|
body_one();
|
|
}
|
|
int method_two() {
|
|
body_two();
|
|
}
|
|
}
|
|
Starting with the cursor on "body_two()", using "[m" will jump to the '{' at
|
|
the start of "method_two()" (obviously this is much more useful when the
|
|
method is long!). Using "2[m" will jump to the start of "method_one()".
|
|
Using "3[m" will jump to the start of the class.
|
|
<!--
|
|
|
|
*[#*
|
|
[# go to [count] previous unmatched "#if" or "#else".
|
|
|exclusive| motion.
|
|
|
|
*]#*
|
|
]# go to [count] next unmatched "#else" or "#endif".
|
|
|exclusive| motion.
|
|
|
|
These two commands work in C programs that contain #if/#else/#endif
|
|
constructs. It brings you to the start or end of the #if/#else/#endif where
|
|
the current line is included. You can then use "%" to go to the matching line.
|
|
|
|
*[star* *[/*
|
|
[* or [/ go to [count] previous start of a C comment "/*".
|
|
|exclusive| motion.
|
|
|
|
*]star* *]/*
|
|
]* or ]/ go to [count] next end of a C comment "*/".
|
|
|exclusive| motion.
|
|
|
|
|
|
-->
|
|
*H*
|
|
H To line [count] from top (Home) of screen (default:
|
|
first line on the screen) on the first non-blank
|
|
character (linewise). See also 'startofline' option.
|
|
Cursor is adjusted for 'scrolloff' option.
|
|
|
|
*M*
|
|
M To Middle line of screen, on the first non-blank
|
|
character (linewise). See also 'startofline' option.
|
|
|
|
*L*
|
|
L To line [count] from bottom of screen (default: Last
|
|
line on the screen) on the first non-blank character
|
|
(linewise). See also 'startofline' option.
|
|
Cursor is adjusted for 'scrolloff' option.
|
|
|
|
<LeftMouse> Moves to the position on the screen where the mouse
|
|
click is (inclusive). See also |<LeftMouse>|. If the
|
|
position is in a status line, that window is made the
|
|
active window and the cursor is not moved.
|
|
|