前言
从Vim 8.2的文档中 mark 了一些常用 VIM 操作,方便以后使用查阅
快捷操作
g
操作 | N 可选计数 | 含义 |
---|
g0 | | 至屏幕首个字符 |
g0 | g0 | 至屏幕行首个字符 (行回绕时不同于 “0”) |
g^ | g^ | 至屏幕行首个非空白字符 (行回绕时不同于 “^”) |
g$ | N g$ | 至屏幕行末个字符 (行回绕时不同于 “$“) |
gm | gm | 至屏幕行中点 |
gM | gM | 至本行中点 |
gk | N gk | 上移 N 屏幕行 (回绕行时不同于 “k”) |
gj | N gj | 下移 N 屏幕行 (回绕行时不同于 “j”) |
ge | N ge | 向后至第 N 个单词词尾(w 是向前单词头,e 是向前单词尾,b 是向后单词头) |
f t
操作 | N 可选计数 | 含义 |
---|
bar | N | | 至第 N 列 (缺省: 1) |
f | N f{char} | 至右边第 N 次出现 {char} 之处 (find) |
F | N F{char} | 至左边第 N 次出现 {char} 之处 (Find) |
t | N t{char} | 至右边第 N 次出现 {char} 之前 (till) |
T | N T{char} | 至左边第 N 次出现 {char} 之前 (Till) |
; , - + _ %
操作 | N 可选计数 | 含义 |
---|
; | N ; | 重复前次 “f”、”F”、”t” 或 “T” 命令 N 次 |
, | N , | 以相反方向重复前次 “f”、”F”、”t” 或 “T” 命令 N 次 |
- | N - | 上移 N 行,至首个非空白字符处 |
+ | N + | 下移 N 行,至首个非空白字符处 (亦: CTRL-M 和 <CR> ) |
_ | N _ | 下移 N - 1 行,至首个非空白字符处 |
N% | N % | 至全文件行数百分之 N 处;必须给出 N,否则是 % 命令 |
( ) [ ] { }
操作 | N 可选计数 | 含义 |
---|
) | N ) | 向前 N 个句子 |
( | N ( | 向后 N 个句子 |
} | N } | 向前 N 个段落 |
{ | N { | 向后 N 个段落 |
[( | N [( | 向后至第 N 个未闭合的 ‘(‘ |
[{ | N [{ | 向后至第 N 个未闭合的 ‘{‘ |
]) | N ]) | 向前至第 N 个未闭合的 ‘)’ |
]} | N ]} | 向前至第 N 个未闭合的 ‘}’ |
* #
操作 | N 可选计数 | 含义 |
---|
star | N * | 向前查找光标下的标识符 |
# | N # | 向后查找光标下的标识符 |
gstar | N g* | 同 “*“,但也查找部分匹配 |
g# | N g# | 同 “*“,但也查找部分匹配 |
gd | gd | 至光标下标识符的局部声明 (goto declaration) |
gD | gD | 至光标下标识符的全局声明 (goto Declaration) |
查找模式中的特殊字符
含义 | magic | nomagic |
---|
匹配任意单个字符 | . | \. |
匹配行首 | ^ | ^ |
匹配 <EOL> | $ | $ |
匹配单词开始 | \< | \< |
匹配单词结束 | \> | \> |
匹配单个标定范围中的字符 | [a-z] | \[a-z] |
匹配单个不在标定范围中的字符 | [^a-z] | \[^a-z] |
匹配一个标识符字符 | \i | \i |
同上但不包括数字 | \I | \I |
匹配一个关键字字符 | \k | \k |
同上但不包括数字 | \K | \K |
匹配一个文件名字符 | \f | \f |
同上但不包括数字 | \F | \F |
匹配一个可显示的字符 | \p | \p |
同上但不包括数字 | \P | \P |
匹配一个空白字符 | \s | \s |
匹配一个非空白字符 | \S | \S |
匹配 <Esc> | \e | \e |
匹配 <Tab> | \t | \t |
匹配 <CR> | \r | \r |
匹配 <BS> | \b | \b |
匹配 0 或多个前面的匹配原 | * | \* |
匹配 1 或多个前面的匹配原 | \+ | \+ |
匹配 0 或 1 个前面的匹配原 | \= | \= |
匹配 2 至 5 个前面的匹配原 | \{2,5} | \{2,5} |
隔开两种可替换的匹配 | | | | |
组合模式为单个匹配原 | \(\) | \(\) |
位置 mark 标记
命令 | 操作 | 含义 |
---|
m | m{a-zA-Z} | 用标记 {a-zA-Z} 记录当前位置 |
`a | `{a-z} | 至当前文件中的标记 {a-z} |
`A | `{A-Z} | 至任何文件中的标记 {A-Z} |
`0 | `{0-9} | 至 Vim 前次退出的位置 |
`` | `` | 至前次跳转之前的位置 |
`[ | `[ | 至前次被操作或放置的文本的开始 |
`] | `] | 至前次被操作或放置的文本的结尾 |
`< | `< | 至 (前次) 可视区域的开始 |
`> | `> | 至 (前次) 可视区域的结尾 |
`. | `. | 至当前文件最后被改动的位置 |
‘ | ‘{a-zA-Z0-9[]’”<>.} | 同 `,但同时移动至该行的首个非空白字符上 |
:marks | :marks | 列出活动的标记 |
:ju | :ju[mps] | 列出跳转表 |
| | |
H | N H | 至窗口的第 N 行的首个非空白字符处 (Home) |
M | M | 至窗口的中间行的首个非空白字符处 (Middle) |
L | N L | 至窗口的从下方算第 N 行的首个非空白字符处 (Last) |
使用 ctags 等插件生成标签文件
命令 | 操作 | 含义 |
---|
:ta | :ta[g][!] {tag} | 跳转到标签 {tag} |
CTRL-] | CTRL-] | 跳转到光标下的标签,除非文件被改动 |
CTRL-T | N CTRL-T | 跳转到标签列表中第 N 个较早的标签 |
:ts | :ts[elect][!] [tag] | 列出匹配的标签并选择其中一个跳转 |
:tjump | :tj[ump][!] [tag] | 跳转到标签 [tag],当有多个匹配时从列表中选择 |
:tags | :tags | 显示标签列表 |
:tnext | :[count]tn[ext][!] | 跳转到向后第 [count] 个匹配的标签 |
:tp | :[count]tp[revious][!] | 跳转到向前第 [count] 个匹配的标签 |
:tl | :tl[ast][!] | 跳转到前次匹配的标签 |
:tr | :[count]tr[ewind][!] | 跳转到第 [count] 个匹配的标签 |
| | |
:ptag | :pt[ag] {tag} | 打开预览窗口来显示 {tag} 标签 |
:pts | :pts[elect] | 同 “:tselect” 但在预览窗口显示标签 |
:ptjump | :ptj[ump] | 同 “:tjump” 但在预览窗口显示标签 |
:pclose | :pc[lose] | 关闭标签预览窗口 |
屏幕滚动
命令 | 操作 | 含义 |
---|
CTRL-E | N CTRL-E | 窗口下滚 N 行 (缺省: 1) (Extra) |
CTRL-D | N CTRL-D | 窗口下滚 N 行 (缺省: 1/2 窗口) (Downwards) |
CTRL-F | N CTRL-F | 窗口下滚 N 页 (Forwards) |
CTRL-Y | N CTRL-Y | 窗口上滚 N 行 (缺省: 1) |
CTRL-U | N CTRL-U | 窗口上滚 N 行 (缺省: 1/2 窗口) (Upwards) |
CTRL-B | N CTRL-B | 窗口上滚 N 页 (Backwards) |
z<CR> | z<CR> 或 zt | 重画,当前行置于窗口顶端 |
z. | z. 或 zz | 重画,当前行置于窗口正中 |
z- | z- 或 zb | 重画,当前行置于窗口底端 |
插入文本
命令 | 操作 | 含义 |
---|
A | N A | 在行末添加文本 (N 次) |
I | N I | 在当前行首个非空白字符前插入文本 (N 次) |
gI | N gI | 在第一栏中插入文本 (N 次) |
v_b_I | I | 在所有选中的行之前插入相同的文本 |
v_b_A | A | 在所有选中的行之后添加相同的文本 |
特殊插入
命令 | 操作 | 含义 |
---|
i_CTRL-E | CTRL-E | 插入光标下方的字符 |
i_CTRL-Y | CTRL-Y | 插入光标上方的字符 |
i_CTRL-A | CTRL-A | 插入前次插入的文本 |
:r | :r [file] | 将文件 [file] 的内容插入到光标之下 |
:r! | :r! {command} | 将命令 {command} 的标准输出插入到光标之下 |
删除文本
命令 | 操作 | 含义 |
---|
D | N D | 删除至行尾 (及 N - 1 后续行) |
J | N J | 连接 N - 1 行 (删除 <EOL> ) |
v_J | {visual}J | 连接高亮的行 |
gJ | N gJ | 同 “J”,但不插入空格 |
v_gJ | {visual}gJ | 同 “{visual}J”,但不插入空格 |
:d | :[range]d [x] | 删除范围 [range] 覆盖的行 [存入寄存器 x],如 :1,3d |