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 ...
,以空格隔开
- 布尔值