0%

VIM常用操作整理

前言

Vim 8.2的文档中 mark 了一些常用 VIM 操作,方便以后使用查阅

快捷操作

g

操作N 可选计数含义
g0至屏幕首个字符
g0g0至屏幕行首个字符 (行回绕时不同于 “0”)
g^g^至屏幕行首个非空白字符 (行回绕时不同于 “^”)
g$N g$至屏幕行末个字符 (行回绕时不同于 “$“)
gmgm至屏幕行中点
gMgM至本行中点
gkN gk上移 N 屏幕行 (回绕行时不同于 “k”)
gjN gj下移 N 屏幕行 (回绕行时不同于 “j”)
geN ge向后至第 N 个单词词尾(w 是向前单词头,e 是向前单词尾,b 是向后单词头)

f t

操作N 可选计数含义
barN |至第 N 列 (缺省: 1)
fN f{char}至右边第 N 次出现 {char} 之处 (find)
FN F{char}至左边第 N 次出现 {char} 之处 (Find)
tN t{char}至右边第 N 次出现 {char} 之前 (till)
TN 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 可选计数含义
starN *向前查找光标下的标识符
#N #向后查找光标下的标识符
gstarN g*同 “*“,但也查找部分匹配
g#N g#同 “*“,但也查找部分匹配
gdgd至光标下标识符的局部声明 (goto declaration)
gDgD至光标下标识符的全局声明 (goto Declaration)

查找模式中的特殊字符

含义magicnomagic
匹配任意单个字符.\.
匹配行首^^
匹配 <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}
隔开两种可替换的匹配&#124;&#124;
组合模式为单个匹配原\(\)\(\)

位置 mark 标记

命令操作含义
mm{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]列出跳转表
HN H至窗口的第 N 行的首个非空白字符处 (Home)
MM至窗口的中间行的首个非空白字符处 (Middle)
LN L至窗口的从下方算第 N 行的首个非空白字符处 (Last)

tags 标签

使用 ctags 等插件生成标签文件

命令操作含义
:ta:ta[g][!] {tag}跳转到标签 {tag}
CTRL-]CTRL-]跳转到光标下的标签,除非文件被改动
CTRL-TN 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-EN CTRL-E窗口下滚 N 行 (缺省: 1) (Extra)
CTRL-DN CTRL-D窗口下滚 N 行 (缺省: 1/2 窗口) (Downwards)
CTRL-FN CTRL-F窗口下滚 N 页 (Forwards)
CTRL-YN CTRL-Y窗口上滚 N 行 (缺省: 1)
CTRL-UN CTRL-U窗口上滚 N 行 (缺省: 1/2 窗口) (Upwards)
CTRL-BN CTRL-B窗口上滚 N 页 (Backwards)
z<CR>z<CR> 或 zt重画,当前行置于窗口顶端
z.z. 或 zz重画,当前行置于窗口正中
z-z- 或 zb重画,当前行置于窗口底端

插入文本

命令操作含义
AN A在行末添加文本 (N 次)
IN I在当前行首个非空白字符前插入文本 (N 次)
gIN gI在第一栏中插入文本 (N 次)
v_b_II在所有选中的行之前插入相同的文本
v_b_AA在所有选中的行之后添加相同的文本

特殊插入

命令操作含义
i_CTRL-ECTRL-E插入光标下方的字符
i_CTRL-YCTRL-Y插入光标上方的字符
i_CTRL-ACTRL-A插入前次插入的文本
:r:r [file]将文件 [file] 的内容插入到光标之下
:r!:r! {command}将命令 {command} 的标准输出插入到光标之下

删除文本

命令操作含义
DN D删除至行尾 (及 N - 1 后续行)
JN J连接 N - 1 行 (删除 <EOL>)
v_J{visual}J连接高亮的行
gJN gJ同 “J”,但不插入空格
v_gJ{visual}gJ同 “{visual}J”,但不插入空格
:d:[range]d [x]删除范围 [range] 覆盖的行 [存入寄存器 x],如 :1,3d