1 | VIM == "编辑器之神" |
退出
Command | Alias |
---|---|
:q | 未修改退出 |
:q! | 强制不保存退出 |
:x | 保存并退出 |
## 切换 tab | |
Command | Alias |
:———- | :——– |
gt | 下个 tab |
gT | 上个 tab |
## 查找 | |
Command | Alias |
:———- | :——– |
n | 正序查找 |
/ | 后面加内容 |
f{char} | 查找第一个 [char] |
; | 重复最后一个 f, F, t, T 指令 |
移动
单词移动
Command | Alias |
---|---|
W w | 移动到下一个单词开头 |
E e | 移动到下一个单词结尾 |
B b | 倒退到上一个单词开头 |
* | 跳到下个词 |
# | 跳到上个词 |
### 整行移动 | |
Command | Alias |
:———- | :——– |
0 | 移动到行首 |
$ | 移动到行末 |
+ | 移动到下一行开头 |
- | 移动到上一行开头 |
### 根据行号来移动 | |
Command | Alias |
:———- | :——– |
Ctrl+g | 显示当前行信息 |
nG | 转至第n行 |
G | 转至文本末尾 |
gg | 移至文本开头 |
### 屏幕 | |
Command | Alias |
:———- | :——– |
H | 屏幕上方 |
M | 屏幕中间 |
L | 屏幕底部 |
### 复合命令 | |
Command | Alias |
:———- | :——– |
C | 相当于 c$,从光标所在位置删除到末尾 |
s | 相当于 cl,删除光标所在位置字符并进入插入模式 |
S | 相当于 cc |
A | 在一行的结尾处追加 |
I | 在一行的开头处插入 |
o | 在光标所在位置的下一行打开新行插入 |
O | 在光标所在位置的上一行打开新行插入 |
tips1:10I* |
这样就可以在一行开头输入十个*
tips2:同样,5o###
这样就可以在下列5行中每一行开头插入###
插入
字符位置插入
Command | Alias |
---|---|
i | 在光标之前插入 |
a | 在光标之后追加 |
删除
字符删除
Command | Alias |
---|---|
x | 删除光标所在处字符 |
X | 删除光标所在前字符 |
### 单词删除 | |
Command | Alias |
:———- | :——– |
dw | 删除到下一个单词开头 |
de | 删除到本单词末尾 |
dE | 删除到本单词末尾包括标点在内 |
db | 删除到前一个单词 |
dB | 删除到前一个单词包括标点在内 |
dt) | 删除到)之前所有内容 |
df) | 删除光标包括)所有内容 |
dT) | 删除光标到光标前)所有内容 |
dF) | 删除光标到光标前包括)所有内容 |
### 行删除 | |
Command | Alias |
:———- | :——– |
dd | 删除一整行 |
3dd | 删除三整行 |
D d$ | 删除光标位置到本行结尾 |
d0 | 删除光标位置到本行开头 |
### 标点内删除 | |
Command | Alias |
:———- | :——– |
ci( | 更改配对标点符号中的文本内容 |
di[ | 删除配对标点符号中的文本内容 |
yi{ | 复制配对标点符号中的文本内容 |
vi< | 选择配对标点符号中的文本内容 |
### 带标点删除 | |
Command | Alias |
:———- | :——– |
ca( | 更改配对标点符号中的文本内容和标点 |
da[ | 删除配对标点符号中的文本内容和标点 |
ya{ | 复制配对标点符号中的文本内容和标点 |
va< | 选择配对标点符号中的文本内容和标点 |
## 复制 | |
### 行复制 | |
Command | Alias |
:———- | :——– |
y^ | 复制至行首 |
y$ | 复制至行尾 |
yy | 复制整行 |
yH | 从当前行复制到屏幕顶端 |
yL | 从当前行复制到屏幕低端 |
### 单词和字符复制 | |
Command | Alias |
:———- | :——– |
ynl | 向右复制n个字符 |
ynh | 向左复制n个字符 |
ynw | 向前复制n个单词 |
ynb | 向后复制n个单词 |
yiw | 复制一个单词 |
diw | 剪切一个单词 |
## 修改 | |
### 字符替换 | |
Command | Alias |
:———- | :——– |
r | 单个字符替换 |
R | 连续替换 |
~ | 更改大小写 |
### 单词修改 | |
Command | Alias |
:———- | :——– |
cw | 从光标处修改到单词结尾 |
cb | 从光标处修改到单词开头 |
ciw | 改写整个单词 |
### 行修改 | |
Command | Alias |
:———- | :——– |
c$ | 从光标修改到本行末尾 |
C | 功能同上 |
c0 | 从光标修改到本行开头 |
cc | 删除整行从头修改 |
S | 功能同上 |
s | 删除光标所在位置的字符,然后插入 |
## 运算 | |
Command | Alias |
:———- | :——– |
对数字加操作 | |
对数字减操作 | |
{count} |
加上 [count] |
如果当前光标不在数字上,则正向查找第一个数字 | |
## 合并行 | |
### 多行合并成一行 | |
AAAAA | |
BBBBB | |
CCCCC |
合并为:
AAAAA BBBBB CCCCC
方法1: normal状态下 3J 其中的3是范围,可以是书签或者搜索位置等方式实现,J为合并
注: 如果改为3gJ的话,则合并时各行没有空白AAAAABBBBBCCCCC, 下面方法类似,不再重复这两种合并方式的区别.
方法2: 命令状态下 :1,3 join 或 :1,3 j
方法3: 传统一点的,替换换行符的方式,为避免最后一行也被换掉,范围缩小了,命令状态下 :1,2s/\n/ /
隔行合并
AAAAA
BBBBB
CCCCC
DDDDD
合并为:
AAAAA BBBBB
CCCCC DDDDD
方法1: 借用一下宏录制功能, normal状态下 qaJjq 实现录制, 然后在合适的区域重复执行n遍,这里2遍即可,normal状态下2@a
方法2: 命令状态下 :1,4g/^/ join 增加了g过滤后,合并变成了隔行处理】
替换
Command | Alias |
---|---|
:s/old/new/ | 替换当前行第一个 old 为 new |
:s/old/new/g | 替换当前行所有 old 为 new |
:n,$s/old/new/ | 替换第 n 行开始到最后一行中每一行的第一个 old 为 new |
:n,$s/old/new/g | 替换第 n 行开始到最后一行中每一行所有 old 为 new |
:%s/old/new/ | 替换每一行的第一个 old 为 new |
:%s/old/new/g | 替换每一行中所有 old 为 new |
恢复
Command | Alias |
---|---|
u | 撤消上次命令 |
U | 恢复整行 |
ctrl+r | 重做 |
. | 重复 |
e! | 全文恢复 |
多窗口打开
Command | Alias |
---|---|
:vs file | 在新的垂直分屏中打开文件 |
:sv file | 在新的水平分屏中打开文件 |
Pattern 操作
Command | Example | Description |
---|---|---|
/{pattern}[/] |
/hello | 向前查找第一次出现 hello 的位置 |
/{pattern}/{offset} |
/hello/2 | 向前查找第一次出现 hello 的位置,并向下移动两行 |
/ | / | 使用上次的模式,向前查找 |
//{offset} |
//3 | 使用上次的模式,偏移值为3,偏移值为空和/功能一致 |
?{pattern}[?] |
?hello | 向后查找第一次出现 hello 的位置 |
?{pattern}?{offset} |
?hello?2 | 向后查找第一次出现 hello 的位置,并向下移动两行 |
? | ? | 使用上次的模式,向后查找 |
??{offset} |
??3 | 使用上次的模式,偏移值为3,偏移值为空和/功能一致 |
n | n | 向前查找 |
N | N | 向后查找 |
* | * | 向前查找距离光标最近的单词 |
# | # | 向后查找距离光标最近的单词 |
gd | gd | 跳转至局部变量声明的位置 |
gD | gD | 跳转至全局变量声明的位置 |
使用宏
- normal 模式下按下
qa
开始录制宏,a 就是该宏的,可以是任意字符 - 和正常使用 vim 一样,记录下需要的操作
- 操作完成后再次按下
q
结束录制 @a
:当前行使用该宏,3@a
:重复使用三次该宏,@@
:对上次宏的重复使用
评论