Vim 编程实践
1. 基础设置
1 | "显示行 |
2. 导航和查找
hjkl 光标在屏幕文本中的移动
w 后面一个word
W 后面一个WORD
b 前面一个word
B 前面一个WROD
e 代表单词末尾(end)
ge 前面一个单词
0 行首
$ 行末
gg 文档首
G 文档尾
:<行号>
or <行号>G
or <行号>gg
- 快速定位到行
<行号><回车>
- 往下跳转行数
<行号>[j/k]
- 往下、往上跳转行数
2.1 查找
fa
- 查找该行从光标位置首次出现a的位置/text
- 查找text,按n健查找下一个,按N健查找前一个。?text
- 查找text,反向查找,按n健查找下一个,按N健查找前一个。%
- 括号匹配
vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$
2.2 替换
ra
- 将当前字符替换为a,当期字符即光标所在字符。s/old/new/
- 用old替换new,替换当前行的第一个匹配s/old/new/g
- 用old替换new,替换当前行的所有匹配%s/old/new/
- 用old替换new,替换所有行的第一个匹配%s/old/new/g
- 用old替换new,替换整个文件的所有匹配:10,20 s/^/ /g
- 在第10行知第20行每行前面加四个空格,用于缩进。
2.3 滚屏
C-B
- 滚动屏幕上一屏
C-F
- 滚动屏幕下一屏
Ctrl + F 屏幕向下滚动一屏
Ctrl + B 屏幕向上滚动一屏
Ctrl + E 屏幕向下滚动一行
Ctrl + Y 屏幕向上滚动一行
Ctrl + D 屏幕向下滚动半屏
Ctrl + U 屏幕向上滚动半屏
3. 编辑
o - 在当前行下方插入新行并自动缩进
O - 在当前行上方插入新行并自动缩进
i - 在当前字符左方开始插入字符
a - 在当前字符右方开始插入字符
I - 光标移动到行首并进入插入模式
A - 光标移动到行尾并进入插入模式
s - 删除光标所在字符并进入插入模式
S - 删除光标所在行并进入插入模式
r - 修改光标所在字符,然后返回普通模式
R - 进入覆盖模式
p - 粘贴
3.1 范围指令
c<范围> - 删除光标所在位置周围某个范围的文本并进入插入模式。
常用的组合有:
caw
- 删除一个单词包括它后面的空格并开始插入;ciw
- 删除一个单词并开始插入;ci”
- 删除一个字符串内部文本并开始插入;ct字符
− 从光标位置删除本行某个字符之前(保留该字符)并开始插入;C
− 删除光标位置到行尾的内容并进入插入模式(相当于c$)
d<范围> - 删除一定范围内的文本
y<范围> - 将范围内的文本放入0号和”号注册栏
v<范围> - 选择范围内的文本
=<范围> - 自动缩进范围内的文本
gU<范围> - 将范围内的字符转换为大写
gu<范围> - 将范围内的字符转换为小写
3.2 范围
$ - 从光标位置到行尾
^ - 从光标位置到行首,不包含缩进空白
0 - 从光标位置到行首,包含缩进空白
gg - 从光标位置到文件开头
G - 从光标位置到文件结尾
% - 从光标位置到另一边匹配的括号
f<字符> - 从光标位置到光标右边某个字符首次出现的位置,包括该字符
F<字符> - 从光标位置到光标左边某个字符首次出现的位置,包括该字符
t<字符> - 从光标位置到光标右边某个字符首次出现的位置,包括该字符
T<字符> - 从光标位置到光标左边某个字符首次出现的位置,包括该字符
<空格> - 光标所在位置 (gU空格
表示将光标位置字符转为大写)
范围 a
& i
a 可理解为“一个”, i 可理解为 in.
aw - 一个单词加一个空格
iw - 一个单词
a” - 一个字符串包括双引号
i” - 一个字符串内部文本
a< - 一组< >包含的文本,包括< >号本身
i< - 一组< >内部文本
同理类推: a[, i[, a(, i(, a{, i{
3.3 对光标所在行操作。
dd 删除一行
yy 复制一行
cc 删除一行文本并开始插入
== 自动缩进当前行
>> 当前行缩进一格
<< 当前行减少缩进
4. 常用命令
daw 删除一个单词
ndd 删除当前行之后的n行
xp 交换当前字符和其后一个字符
ddp 交换行
yyp 复制行
ci” 删除””内的字符串并插入
ca{ 删除{}内容并插入,包含{}本身
:1,10d 删除1-10行,利用p命令可将剪切后的内容进行粘贴
:1,$d 删除所有行
J 删除两行之间的空行,实际上是合并两行
P 在当前行前粘贴
:1,10 co 20 将1-10行插入到第20行之后
:1,$ co $ 将整个文件复制一份并添加到文件尾部
:1, 10 m 20 将第1-10行移动到第20行之后