基础操作
操作 | 说明 | 模式 |
---|---|---|
>G | 缩近到最后一行 | Normal |
c | 删除指定的文本,并切换到插入模式 | Normal |
f{char} | 在一行上查找下一个 char | Normal |
F{char} | 在一行上查找上一个 char | Normal |
; | 重复查找向后 f{char}\F{char}命令 | Normal |
, | 重复查找向前 f{char}\F{char}命令 | Normal |
* | 高亮当前单词 | Normal |
<C-a> | 加上数值 | Normal |
<C-x> | 减去数值 | Normal |
<C-h> | 删除前一个字符 | Insert |
<C-w> | 删除前一个单词 | Insert |
<C-u> | 删至行首 | Insert |
zz | 重绘制屏幕,使当前行居中展示 | Normal |
yt, | 将内容复制到专用的寄存器 | Normal |
<C-r>0 | 从 yt,寄存器拷贝内容 | Normal |
<C-r>=6*30 |
插入模式下,可以用来计算,先按 |
Insert |
ga | 显示字符编码 | Normal |
v | 激活面向字符的可视模式 | Normal |
V | 激活面向行的可视模式 | Normal |
<C-v> | 激活面向列块的可视模式 | Normal |
gv | 重选上次高亮区域 | Normal |
o | 切换高亮选区的活动端 | Visual |
gUit | 大写文本对象(u 小写) | Normal |
:read !{cmd} | 将 cmd 执行的结果放到当前缓冲区里 | Ex |
:write !{cmd} or :write ! {cmd} | 把当前缓冲区的内容当作 cmd 的标准输入 | Ex |
:write! sh | 将当前缓冲区的内容到 sh 的文件中 | Ex |
<C-^> | 切换%,#(%当前文件,#上一个文件)文件的缓冲文件 | Normal |
:wa | 保存所有 | Normal |
:qa | 放弃所有修改 | Normal |
:e | 将文件内容读入缓冲区 | Normal |
:edit %:h | 相对于活动文件目录打开一个文件 | Normal |
!mkdir -p %:h | 保存文件时路径不存在 | Normal |
:w !sudo tee %>/dev/null | 以超级用户权限保存文件 | Normal |
gj | 移动一个屏幕行 | Normal |
e | 正向移动到当前单词/下一单词的结尾 | Normal |
W | 跳到下一个字符串的开头 | Normal |
F{char} | 反向移动到上一个{char}所在之处 | Normal |
t{char} | 正向移动到下一个{char}所在之处的前一个字符 | Normal |
a 跟)}>' | 一堆符号及符号包围的内容//Normal 下需要搭配 y、d、c 使用 | Visual/Normal |
i 跟)}>' | 符号包围的内容 | Visual/Normal |
at/it | 一对标签/一对标签内部内容 | Visual/Normal |
m{a-zA-Z} | 标记,小写当前缓存区可见、大写全局可见 | Normal |
`{a-zA-Z} | 跳转到标记的地方 | Normal |
`. | 上次修改的地方 | Normal |
`` | 当前文件中上次跳转动作之前的位置 | Normal |
[count]G | 跳转到 count 行号 | Normal |
/word |
查找单词 | Normal |
Normal | ||
% | 在配对的括号中跳转 | Normal |
(/) | 跳转到上一句/下一句的开头 | Normal |
{/} | 跳转到上一段/下一段的开头 | Normal |
Ex 命令
range 可以写成 n,m 表示范围,也可以写成 n+/-m
address 一般是行号,也可以是下面表格里的符号
命令 | 用途 |
---|---|
[range]delete [x] | 删除指定范围内的行到寄存器 X 中 |
[range]copy [x] | 拷贝指定范围内的行到寄存器 X 中 |
[range]copy {address} | 拷贝指定范围的行到{addres 行号}的行下 |
[range]move {address} | 移动指定范围的行到{addres 行号}的行下 |
[range]normal {commands} | 对范围内的每一行,执行 normal 模式下的 commands |
Ex 命令下的符号
符号 | 地址 |
---|---|
0 | 虚拟行,文件第一行上方 |
1 | 文件第一行 |
$ | 文件最后一行 |
% | 全部行等同于:1,$ |
Tips
多行插入
\<C-v>
c
input somethind
<ESC>
or
:%normal i//
在长短不一的行上添加文本
\<C-v>jj$
A;
<ESC>
or
A;<ESC>
jVG
:'<'>normal .
or
%normal A;
寄存器
无名寄存器("")
删除内容时会自动保存到该寄存器
\<C-r>"
复制专用寄存器("0)
只有复制才会覆盖寄存器的内容
"0P
or
<C-r>0
常用操作
yiw
"0p
or
yiw
ve
P
有名寄存器("a - "z)
使用小写字母会覆盖原有内容,大写字母会追加原有内容
"ayiw // 拷贝到"a寄存器
"aP // 从"a寄存器拷贝
黑洞寄存器("_d)
删除时不会保存内容到无名寄存器
系统剪切板("+)
"+p // 从剪切板粘贴到 vim 内部
宏
1、录制(q[a-z]) 2、一系列操作 3、结束录制(q) 4、{m}@[a-z]
搜索
\v \V
\v 使用正则表达式
\V 原义开关
替换
简单替换
:s/old/new # 替换第一个
:s/old/new/g # 替换当前行
:%s/old/new/g # 替换所有行
:%s/old/new/gc # 替换前确认
重复上一次命令
:s/old/new/g
g& # 在整个文件范围内执行替换
重用上次的查找模式
:%s/v'(([^']|'\w)+'/"\1")/g
equal to
/v'(([^']|'\w)+)'
:%s//"\1"/g
多个文件执行查找替换
/Pragmatic\ze Vim
:vimgrep // **/*.txt
:cfdo %s//Pragmatic/gc
:cfdo update
equal to
/Pragmatic\ze Vim
:vimgrep // **/*.txt
:cfdo %s//Pragmatic/gc | update
global 命令
:g|v/re/p g|v 表示 global|vglobal re 表示正则 p 表示动作
删除和方向删除
删除
/\v\<\/?\w+> # 指定搜索项
:g//d
方向删除
:v/href/d # 删除不包含href的所有行
收集 TODO
qa
;g/TODO/yank A
:reg a
TODO bufdo argdo
Quickfix
命令 | 功能 |
---|---|
:copen | 打开 Quickfix 列表 |
:cprev | 跳转到上一项 |
:cnext | 跳转到下一项 |
:cfirst | 跳转到第一项 |
:clast | 跳转到最后一项 |
:cnfile | 跳转到上一个文件的最后一项 |
:cpfile | 跳转到上一个文件的最后一项 |
自动补全
出发自动补全
命令 | 补全数据来源 |
---|---|
<C-n> | 普通关键字 |
<C-x> |
当前缓冲区关键字 |
<C-x> |
文件名补全 |
<C-x> |
全能(Omni)补全 |
与自动补全的弹出式菜单进行交互
命令 | 功能 |
---|---|
<C-x> |
全能(Omni)补全 |
<C-n> | 匹配下一个来自补全列表的匹配项 |
<C-p> | 匹配上一个来自补全列表的匹配项 |
<C-e> | 取消自动补全 |
拼写检查
触发检查 :set spell
命令 | 功能 |
---|---|
z= | 展示更正建议 |
]s | 跳转到下一处拼写错误 |
[s | 跳转到上一处拼写错误 |