最近了解学习了被称为编辑之神的vim,感觉很有意思,也很有用
推荐刚接触vim的可以去实验楼学习学习,贴个链接,
也可以参考这篇文章进行学习。
一、关于vim的几种模式
vim是啥可以谷歌一下,这里想记录一下vim的六种基本模式
常用的是其中的普通模式、插入模式和命令执行模式
- 普通模式
① 在普通模式中,用的编辑器命令,比如移动光标、删除文本等等。这是启动vim后的默认模式。
② 普通模式命令往往需要一个操作符结尾。例如普通模式命令dd
删除当前行,但是第一个d的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的j键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd
(重复dd两次),和dj的效果是一样的。
③ 在普通模式中,有很多方法可以进入插入模式中。比较普通的方法是是按a
(append/追加)键或者i
(insert/插入)键。 - 插入模式
① 在这个模式中,大多数按钮都会向文本缓冲中插入文本。就跟平常的编辑器一样。
② 在插入模式中,可以按ESC
回到普通模式中 - 命令行模式
在命令行模式中,可以输入会被解释成并执行的文本。例如执行命令(:
键),搜索(/
和?
键)或者过滤命令(!
键)。在命令执行后,vim返回到命令模式之前的模式,通常是普通模式 - 可视模式
① 这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。
② vim的文本对象也能和移动命令一样用在这个模式中 - 选择模式
这个模式和无模式标记器的行为比较相似(windows标准文件控件的方式)。在这个模式中,可以用鼠标或者光标高亮选择文本,不过输入任何字符的话,vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式 - ex模式
这和命令模式比较相似,在使用:visual
命令离开ex模式前,可以一次执行多条命令
二、基本的三种模式的切换
- ① vim启动默认进入普通模式,按
i
或a
可以进入插入模式 - ② 普通模式中按
:
进入命令模式 - ③ 命令行模式中输入
wq
回车后保存并退出vim - ④ 处于插入模式或命令行模式时只需要按
ESC
或者ctrl+[
即可进入普通模式
三、进入插入模式
在普通模式下,使用下面的键将进入插入模式,并可以从响应的位置开始输入
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I(大写的i) | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在的位置后到一个单词结尾的字符 |
四、保存文档但不退出vim
在普通模式下,使用下面的键将保存文档但不退出vim
命令 | 说明 |
---|---|
w | 保存文档 |
w+文件名 | 将文档保存为其他文件名或存到其他路径下 |
五、退出vim
在命令模式下:
命令 | 说明 |
---|---|
wq | 保存并退出编辑 |
q! | 强制退出,不保存 |
q | 退出 |
wq! | 强制保存并退出 |
x | 保存并退出 |
wq | 保存并退出 |
在普通模式下:
使用组合键:shift+zz
即可保存并退出vim
六、删除文本(命令模式下)
命令 | 说明 |
---|---|
x | 删除光标所在的字符 |
X | 删除光标所在额前一个字符 |
delete | 同x |
dd | 删除整行 |
dw | 删除一个单词(不适用于中文) |
d$或D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文档结尾处 |
d1G | 删除至文档首部 |
除此之外,还可以在命令之前加上数字,表示一次删除多行,如2dd表示一次删除2行
七、重复命令
vim可以重复执行上次执行的命令
普通模式下:
命令 | 说明 |
---|---|
. (小数点) | 重复上一次的命令操作 |
N(command),N表示重复后面的次数 | 执行指定次数的相同命令 |
使用dw或者daw删除一个单词,也可以使用dnw(n替换为响应数字)表示删除n个单词(类似的还有很多)
八、光标的快速跳转
行间跳转:
普通模式下,使用下列命令在行间按行号进行跳转
命令 | 说明 |
---|---|
nG | 光标移动到第n行 |
gg | 光标移动到第一行 |
G | 光标移动到最后一行 |
注:
① 如果默认没有显示行号,先进入命令模式,输入set nu显示行号
② 在完成一次跳转后,可以使用ctrl+o快速回到上一次(跳转前)光标所在的位置
行内跳转:
普通模式下,使用下列命令在行内按栈单词为单位进行跳转
命令 | 说明 |
---|---|
w | 到下一单词的开头 |
e | 到当前单词的结尾 |
b | 到前一个单词的开头 |
ge | 到前一个单词的结尾 |
0或^ | 到行头 |
$ | 到行尾 |
f 字母 | 向后搜索指定字母并跳转到第一个匹配的位置 |
F 字母 | 向前搜索指定字母并跳转到第一个匹配的位置 |
九、复制粘贴和剪切
复制和粘贴文本
普通模式中使用y复制
命令 | 说明 |
---|---|
yy | 复制右边所在的整行(3yy表示复制3行) |
y^或y0 | 复制至行首,不含光标所在的字符 |
y$ | 复制至行尾。含光标所在的字符 |
yw | 复制一个单词(y2w表示复制2个单词) |
yG | 复制至文本末 |
y1G | 复制至文本开头 |
f 字母 | 向后搜索指定字母并跳转到第一个匹配的位置 |
F 字母 | 向前搜索指定字母并跳转到第一个匹配的位置 |
普通模式中使用p和P粘贴
命令 | 说明 |
---|---|
p | 粘贴至光标后 |
P | 粘贴至光标前 |
剪切及粘贴
其实前面的dd删除命令就是剪切,每次dd删除文档后便可以使用p来粘贴
tip:这一点可以让我们实现一个很爽快的功能——交换上下行: ddp
十、字符的替换和撤销命令
字符的替换和撤销命令都是在普通模式下的
命令 | 说明 |
---|---|
r待替换字母 | 将光标所在字母替换为指定字母 |
R | 连续替换,直到按下ESC为止 |
cc | 替换整行,即删除整行,并进入插入模式 |
cw | 替换一个单词,即删除一个单词,并进入插入模式 |
C | 替换光标以后至行末 |
~ | 转换光标所在字母的大小写 |
u | 撤销一次操作 |
U | 撤销当前行的所有修改 |
ctrl+r | 撤销一个已经撤销的操作 |
十一、查找
快速查找
普通模式下输入
/
,然后键入要查找的字符串,回车后就会进行查找?
与/
功能相同,只不过?
是向上而/
是向下查找。
进入查找之后,键入n
和N
可以继续查找。n
是查找下一个内容,N
是查找上一个内容
高级查找
普通模式下
命令 | 说明 |
---|---|
\* | 寻找光标所处的单词 |
\# | 同\*,但\*是向前找,而#是向后找 |
g\* | 同\*,但部分符合该单词即可 |
g\# | 同\#,但部分符合该单词即可 |
以上查找n和N的继续查找命令依然可以用
十二、快速缩进
缩进操作在普通模式下有效
命令 | 说明 |
---|---|
>> | 将整行向右缩进 |
<< | 将整行向左回退 |
命令模式下可对shiftwidth值进行设置可以控制缩进和回退的字符数
set shiftwidth=n
设置缩进字符数为n
十三、调整文本位置
命令模式下输入
命令 | 说明 |
---|---|
ce | 使本行文本内容居中(center) |
ri | 使本行文本内容靠右(right) |
le | 使本行文本内容靠左(left) |