1. 介绍
- vim是一个功能很完善的多模式编辑器,包括三种:普通模式、插入模式、命令行模式
- 以命令为中心,使用少量命令执行复杂的文本相关任务
- 内存占用很小
- 具有高度可配置性,并使用简单的文本文件来存储其配置
vim的操作非常多,本文只是列举了日常使用中常见的操作。
2. 启动
命令 | 说明 |
---|
vim | 直接进入 |
vim filename | 打开或新建文件filename |
vim +n filename | 打开文件filename,并将光标置于第n行首 |
vim + filename | 打开文件filename,并将光标置于最后一行 |
vim + /pattern filename | 打开文件filename,并将光标置于第一个于pattern匹配串的位置 |
vim -r filename | 恢复上次异常退出的文件filename |
vim -y n filename | 打开文件filename,并将编辑窗口的大小设为n行 |
vim -R filename | 以只读的方式打开文件filename,但可以强制保存 |
vim -M filename | 以只读的方式打开文件filename,不可以强制保存 |
vim -c com filename | 在打开文件filename前,先执行指定的命令com |
vim的启动方式很多,根据需求选择。
3. 基本使用
vim编辑器有三个模式:普通模式、插入模式、命令行模式。
- 普通模式:可以进入插入模式和命令行模式
- 插入模式:对文件进行修改
- 命令行模式:执行命令行命令
三种模式的转换:
![vim编辑器模式转换](https://i-blog.csdnimg.cn/blog_migrate/9c4d99c7dfb446d51936fea4d3803cf7.png#pic_center)
3.1 文档操作
**命令 ** | 功能 |
---|
:q | 退出vim编辑器,如果对当前文件的修改未保存,vim会警告 |
:w | 保存文件 |
:! | 强制执行 |
:q! | 强制退出,不保存 |
:wq | 保存并退出 |
ZZ | 保存并退出 |
:x | 保存并退出 |
:e file | 关闭当前编辑的文件,并开启新的文件,如果对当前文件的修改未保存,vim会警告 |
:e! file | 放弃对当前文件的修改,编辑新的文件 |
:e# 或 ctrl+^ | 回到刚才编辑的文件 |
f 或 ctrl+g | 显示文档名,是否修改,和光标位置 |
:f filename | 改变编辑的文件名,这时再保存相当于另存为 |
:saveas newfilename | 另存为 |
:Sex | 水平分割一个窗口,浏览文件系统 |
:Vex | 垂直分割一个窗口,浏览文件系统 |
3.2 光标移动
3.2.1 基本移动
下面的操作,可以搭配n使用,普通模式下输入3l
,光标向右移动3个字符
命令 | 功能 |
---|
h 或 退格(BackSpace) | 光标左移一个字符 |
l 或 空格(Space) | 光标右移一个字符 |
k | 光标上移一行(段间) |
j | 光标下移一行(段间) |
gk | 光标上移一行(段内) |
gj | 光标下移一行(段内) |
+ 或 回车(Enter) | 光标移至下一行的第一个非空白字符 |
- | 光标移至上一行的第一个非空白字符 |
w | 光标移至下一个单词的开头 |
W | 光标移至下一个单词的开头,忽略(跳过)标点 |
e | 光标移至下一个单词的末尾 |
E | 光标移至下一个单词的末尾,忽略(跳过)标点 |
b | 光标移至上一个单词的开头 |
B | 光标移至上一个单词的开头,忽略(跳过)标点 |
ge | 光标移至上一个单词的末尾 |
gE | 光标移至上一个单词的末尾,忽略(跳过)标点 |
( | 光标移至上一句 |
) | 光标移至下一句 |
{ | 光标移至上一段 |
} | 光标移至下一段 |
fc | 光标移至同一行的下一个字符c处,c是任意字符 |
Fc | 光标移至同一行的上一个字符c处,c是任意字符 |
; | 配合f & t使用,重复一次上一次的光标移动 |
, | 配合f & t使用,反向重复一次上一次的光标移动 |
0 | 光标移至同一行的开头 |
^ | 光标移至同一行的第一个非空字符 |
$ | 光标移至同一行的末尾 |
nG | 光标移至第n行的开头 |
n| | 光标移至第n列的开头 |
gg | 光标移至第一行的开头 |
G | 光标移至最后一行的开头 |
3.2.2 翻屏
命令 | 功能 |
---|
ctrl+f | 下翻一屏 |
ctrl+b | 上翻一屏 |
ctrl+d | 下翻半屏 |
ctrl+u | 上翻半屏 |
ctrl+e | 向下滚动一行 |
ctrl+y | 向上滚动一行 |
n% | 到文件n%的位置 |
zz | 将当前行移动到屏幕中央 |
zt | 将当前行移动到屏幕顶端 |
zb | 将当前行移动到屏幕底端 |
3.2.3 标记
使用标记可以快速移动。到达标记后,可以用Ctrl+o
返回原来的位置。 Ctrl+o
和Ctrl+i
很像浏览器上的前进
和后退
命令 | 功能 |
---|
m{a-z} | 标记光标所在位置,局部标记,只用于当前文件 |
m{A-Z} | 标记光标所在位置,全局标记,标记之后,退出Vim, 重新启动,标记仍然有效 |
`{a-z} | 移动到标记位置 |
'{a-z} | 移动到标记位置的行首 |
`` | 移动到上次编辑的位置 |
‘’ | 移动到上次编辑的位置所在的行 |
`" | 移动到上次离开的地方 |
`. | 移动到最后改动的地方 |
:marks | 显示所有标记 |
:delmarks a b | 删除标记a和b |
:delmarks a c-f | 删除标记a、c、d、e、f |
:delmarks! | 删除所有标记 |
:help mark-motions | 查看mark帮助文档 |
3.3 插入文本
小技巧:ni
或na
进入插入模式输入一个字符c,再按Esc
退出插入模式,会自动补全成n个字符c,用于快速输入分割线
命令 | 功能 |
---|
i | 在光标前插入 |
I | 在当前行第一个非空字符前插入 |
gI | 在当前行第一列插入 |
a | 在光标后插入 |
A | 在当前行最后插入 |
o | 在当前行后面新建一行插入 |
O | 在当前行前面新建一行插入 |
3.4 复制、剪切、粘贴
3.4.1 复制
命令 | 功能 |
---|
y | 复制在可视化模式下选中的文本 |
yy or Y | 复制整行文本 |
y[n]w | 复制n个词,默认为1 |
y[n]l | 复制光标右边n个字符,默认为1 |
y[n]h | 复制光标左边n个字符,默认为1 |
y0 | 从光标当前位置复制到行首 |
y$ | 从光标当前位置复制到行尾 |
:m,n co k | 将m~n行的内容复制粘贴到k行之后(k+1行) |
3.4.2 剪切
命令 | 功能 |
---|
d | 剪切(删除)在可视化模式下选中的文本 |
d$ or D | 剪切(删除)当前位置到行尾的内容 |
d[n]w | 剪切(删除)n个词,默认为1 |
d[n]l | 剪切(删除)光标右边n个字符,默认为1 |
d[n]h | 剪切(删除)光标左边n个字符,默认为1 |
d0 | 剪切(删除)当前位置到行首的内容 |
[n]dd | 剪切(删除)从当前位置向后的n行,默认为1 |
3.4.3 粘贴
3.5 查找和替换
3.5.1 查找
命令 | 功能 |
---|
/pattern | 在光标后面的文本中查找包含pattern的内容 |
?pattern | 在光标前面的文本中查找包含pattern的内容 |
n | 向后查找下一个 |
N | 向前查找下一个 |
3.5.2 替换
命令 | 功能 |
---|
😒/old/new | 用new替换当前行的第一个old |
😒/old/new/g | 用new替换当前行的所有old |
:n1,n2 s/old/new/g | 用new替换n1~n2行的所有old |
:% s/old/new/g | 用new替换当前文件所有的old |
:% s/^/new/g | ^表示行首,将行首替换为new,即在每一行的行首插入new |
:% s/$/new/g | $表示行尾,将行尾替换为new,即在每一行的行尾插入new |