vim分为几种模式,如命令模式(Command mode),输入模式(Insert mode),底线命令模式(Last line mode),可视化模式(Visval mode),每种模式下都有对应的快捷键操作。

一、几种模式
命令模式,也叫普通模式
dw:删除当前光标后一个单词bdw:复合命令,b将光标移动到单词首,再执行dwx:删除光标所在的字符u:撤销命令r:替换光标所在字符,先按r,然后输入替换字符10,100>:第10行至第100行缩进,与之对应的有反缩进<
输入模式:在命令模式下按下i就进入了输入模式
esc:退出输入模式
底线命令模式:在命令模式下按下英文冒号
:就进入了底线命令模式。q:退出程序w:保存文件
可视化模式
v:进入字符可视化模式w:选中至下一个单词的开头$:选中该行的其余部分u/U:大小写转换
V:进入行可视化模式ctrl+v:进入块可视化模式
二、常用快捷键
大小写转换
~将光标移动到词尾
e或E将光标移动到行尾
$- 将光标移动到行首
^或数字0^是行首的第一个字符位置,不包含空格0则是真正的行首,可以是空格
- 将光标移动到行首
将光标移动到下一行行首
+(不包含空格)- 将光标移动到上一行行首
-(不包含空格)
- 将光标移动到上一行行首
向前查找光标所在单词
#- 向后查找光标所在单词
*
- 向后查找光标所在单词
将光标移到下一个单词
w或W- 将光标移到上一个单词
b或B
- 将光标移到上一个单词
跳转到配对的括号()
%向前跳转到代码块的开头处
[[- 向后跳转到代码块的结尾处
]]
- 向后跳转到代码块的结尾处
将光标移动到文件开头
gg- 将光标移动到文件末尾
G
- 将光标移动到文件末尾
多文件切换(底角命令模式下)
- 查看当前编辑的文件
:f - 查看打开的文件列表
:ls或:files或:buffers - 切换指定的文件
:b 文件序号 - 切换下一个文件
:n(:2n下下个,以此类推) - 切换上一个文件
:N(:2N上上个,以此类推) - 编辑上一个文档
:e#或ctrl+ˆ
- 查看当前编辑的文件
三、各种删除
删除全文
- 普通命令模式:
ggdG - 底角命令模式:先
G将光标移至文件末尾,shift + :进入底角命令模式,输入1,.d
- 普通命令模式:
删除到指定行
- 删除1至9行
- 普通命令模式下将光标移至第9行
9G - 进入底角命令模式
shift + :,输入1,.d删除至当前行(即第九行)
- 普通命令模式下将光标移至第9行
- 删除9行至末尾
- 将光标移至末尾
- 进入底角命令模式
shift + :,输入9,.d删除至当前行(即末尾)
- 删除1至9行
删除字符
- 删除光标所在字符:普通命令模式下
x - 删除光标前一个字符:普通命令模式下
X,即大写的x
- 删除光标所在字符:普通命令模式下
删除单词
- 删除到下一个单词开头:普通命令模式下
dw- 光标在单词中间部分时则删除当前光标到下一个单词开头
- 删除到本单词的末尾不包括标点:普通命令模式下
de,光标在单词中间部分时则删除当前光标到当前单词词尾不包括标点- 删除到本单词的末尾并包括标点:普通命令模式下
dE,光标在单词中间部分时则删除当前光标到当前单词词尾并包括标点
- 删除到本单词的末尾并包括标点:普通命令模式下
- 删除到前一个单词开头不包括标点:普通命令模式下
db,光标在单词中间部分时则删除当前光标到当前单词开头不包括标点- 删除到前一个单词开头并包括标点:普通命令模式下
dB,光标在单词中间部分时则删除当前光标到当前单词开头并包括标点
- 删除到前一个单词开头并包括标点:普通命令模式下
- 删除到下一个单词开头:普通命令模式下
删除行
- 删除一行:普通命令模式下
dd - 删除光标所在处至末尾并将光标向前移:普通命令模式下
D - 删除光标到行首:普通命令模式下
d0
- 删除一行:普通命令模式下
四、光标移动
以下命令不做特殊说明都是在普通模式下进行,普通模式也叫做命令行模式,另外还有一个底线命令行模式,注意区分。
字符移动:上下左右
jkhl,也可用键盘上的方向键- 移动多个字符,如向左移动10个字符
10j
- 移动多个字符,如向左移动10个字符
单词移动
下一个单词词首
w- 多个单词如
4w向后移动4个单词 - 连续多个标点算一个单词
dw则是从光标处向后删除一个单词(不包含光标处),同理4dw从光标处向后删除4个单词W同样可以实现向后移动,不同的是分隔符是空格,如以下文本,分别用8w和8W可看出区别1
Hello everyone, My name is panda, I'm from China, I love Bamboo.
- 多个单词如
上一个单词词首
b- 多个单词如
4b向前移动4个单词 - 连续多个标点算一个单词
B同样可以实现,同W一样以空格为分隔符
- 多个单词如
下一个单词词尾
e- 多个单词如
4e向前移动4个单词并处于词尾 - 连续多个标点算一个单词
db则是从光标处向前删除一个单词(不包含光标处)E同样可以实现,同W一样以空格为分隔符
- 多个单词如
快速移动到行首行尾
^移动到行首$移动到行尾
相对屏幕移动
control + f:向下翻页control + b:向上翻页control + e:逐行下滚control + y:逐行上滚H:移动到屏幕首行L:移动到屏幕尾行M:移动到屏幕中间zt:将当前行置顶,即把当前行移动到屏幕首行zz:将当前行移到屏幕中部zb:将当前行移到屏幕底部:数字如:10:将光标到第10行set nu或set number可以显示行号gg:移动到文件首行G:移动到文件尾行/字符如/test:查找test并移动到test所在行?字符则是反向查找,即向上查找n:下一个N:上一个q/或q?可以查看查找历史
五、设置缩进
普通模式(命令模式)
- 单行操作
>>:当前行增加缩进<<:当前行减少缩进
- 单行操作
块可视化
- 进入块可视化模式
v/V/control+v - 使用
j或k或上下箭头选择代码块 - 键入
>或<进行缩进或回退
- 进入块可视化模式
底线命令行模式
- 多行操作:
shift + :进入底线命令模式 1,n>:1~n增加一个缩进1,n>>:1~n增加两个个缩进
1,n<:1~n减少一个缩进1,n<:1~n减少两个缩进
- 多行操作:
插入模式
- 进入插入模式
shift + control + t增加缩进shift + control + d减少缩进(mac下组合键有冲突)
相关设置
- shiftwidth:普通模式下
<<和>>时缩进的列数 - tabstop:一个tab键所占的列数,linux内核代码建议每个tab占用8列
- softtabstop:敲入tab键时实际占有的列数。
- expandtab:输入tab时自动将其转化为空格
- noexpandtab:取消输入tab自动转化为空格
- autoindent:回车后自动缩进
- shiftwidth:普通模式下
六、选项设置
以下所有操作都是在
shift + :进入底角命令模式后进行的
查看选项
- 查看所有选项
set all - 查看某个选项
set 选项或set 选项? - 查看非默认值的选项
set - 查看某个选项的帮助信息
help 选项
- 查看所有选项
设置选项
- 布尔值
- 设置布尔值
set 布尔选项 - 关闭布尔值
set no布尔选项 - 反向布尔值
set 布尔选项!或set inv布尔选项 - 设为默认值
set 布尔选项&- 重置所有选项
set all&
- 重置所有选项
- 设置布尔值
- 数值
- 设置数值
set 数值选项 =数值 - 增加数值
set 数值选项 +=val - 减少数值
set 数值选项 -=val - 乘以数值
set 数值选项 ^=val - 恢复数值
set 数值选项&
- 设置数值
- 字符串
- 设置字符串
set 字符串选项 =字符串 - 在末尾追加
set 字符串选项 +=字符串 - 选项中移除
set 字符串选项 -=字符串- 如果要移除的字符串有多个则默认移除第一个
- 在开头追加
set 字符串选项 ^=字符串 - 设为默认值
set 字符串选项&
- 设置字符串
- 设置多个
set 选项1 选项2 ...,以空格隔开
- 布尔值