模式
正常模式:浏览文本、从宏观处理文本等操作
编辑模式:文本修改、编辑等操作
命令行模式:保存、退出、搜索等操作
视觉模式:见下文
打开终端,输入命令
vim ab.c # 用vim打开一个名为ab.c的文件(无论这个文件是否存在)
修改vim配置,输入命令
vim --version # 查看配置文件
vim $HOME/.vimrc # 编辑配置文件
配置内容:
syntax on
set ts=4
set expandtab
set autoindent
set number
set relativenumber
按键对应功能
1.模式切换与保存退出等操作
i 进入编辑模式
esc 回到正常模式
: 进入命令行模式
:q 仅退出,如果内容有改动会无法直接退出
:q! 强制退出,不会保存改动的内容
:wq 保存并退出
:wqa 存在多个打开的vim时,全部保存并退出
:x 保存并退出
:wq与:x不同的是,:wq无论文件内容是否被实际修改都会重新写入,会强制更新文件的修改时间,使文件需要重新编译。而:x仅在文件内容被实际修改之后才会重新写入,否则不会重新写入并更新文件的修改时间
2.光标移动操作(正常模式下,非正常模式需要按esc返回正常模式)
k 上移
j 下移
h 左移
l 右移
光标一定范围内移动
w 移动到下一个单词开头
e 移动到下一个单词结尾
b 回退到上一个单词开头
G 移动到最后一行
gg 移动到第一行
:n n为数字,回车移动到第n行
^ 移动到相对行首 (shift+6)
$ 移动到行尾 (shift+4)
0 移动到绝对行首
{ 移动到上一个空行
} 移动到下一个空行
以下操作需要提前修改好vim配置文件,且 行号显示会与上面的命令行模式指定行跳转有歧义
nk n为数字,上移到第n行
nj n为数字,下移到第n行
ngg n为数字,移动到第n行,没有上下限制
nG n为数字,效果同ngg
更推荐使用ngg或nG以及命令行跳转
3.文本编辑操作(正常模式下,非正常模式需要按esc返回正常模式)
插入
i 在光标前插入文本,在行首插入文本用对应的大写字母I
a 在光标后插入文本,在行尾插入文本用对应的大写字母A
o 新增下一行,新增上一行用对应的大写字母O
复制粘贴
yy 复制当前光标所在的行
nyy 复制当前光标开始的n行(也可以写成yny)
yw 复制当前光标处开始的一个单词
p 在当前行粘贴复制的内容,在前面加个数字n,表示进行n次粘贴操作
删除
注意:删除内容后可以使用p键粘贴删除的内容,相当于剪切
dd 删除当前光标所在的行
dw 删除从光标处开始的一个单词
cw 在dw的基础上删除后自动进入编辑模式
ciw 删除光标所在处的一个完整单词后自动进入编辑模式
ci{} 删除光标所在大括号里的内容并自动进入编辑模式,中括号、小括号同理。需要特别注意多层嵌套括号以及光标所处的位置
d$ 删除从光标开始到行尾的所有内容
c$ 删除从光标开始到行尾的所有内容并自动进入编辑模式
撤销与恢复
. 英文句点,重复上一次操作
u 撤销上一次操作
ctrl + r 恢复上一次操作,与撤销相反
视觉模式
v 进入视觉模式——可视化字符(对单个字符)
shift + v 进入视觉模式——可视化行(对一整行)
配合>(shift+.)键向右缩进调整格式
配合ctrl+?进行批量注释
ctrl + v 进入视觉模式——可视化块(用法尚不明确)
视觉模式下,光标初始的位置和光标最后停留的位置之间会被标记
d 删除被标记的内容,并返回正常模式
4.搜索、全局替换等操作(命令行模式下,以英文冒号:开头,输入完命令后按回车)
:/xxx 搜索指定名称的文本,xxx为指定的名称。通过n键查找下一个匹配的文本,通过shift+n键查找上一个匹配的文本
:%s/xxx/yyy/g 全局替换xxx的旧文本为yyy的新文本,g表示全局替换