vim 三种模式示意图
1.命令行模式
用户刚刚启动 vi/vim,便进入了命令模式。或者在任何时候,不管用户处于何种模式,只要按一下ESC键,即可使vi/vim进入命令模式。
进入输入模式
i: 插入光标前一个字符
a: 插入光标后一个字符
o: 向下新开一行,插入行首
I: 插入行首
A: 插入行未
O: 向上新开一行,插入行首
光标移动
←/h: 左移
→/l: 右移
↓/j: 下移
↑/k: 上移
`例如向下移动30行, 可使用30↓/30j的组合按键`
n<Enter>: n为数字. 向下跳转n行
nG: n为数字. 移动到指定行. 例如 20G 则会移动到这个档案的第 20 行
gg: 光标移动文件开头
G: 光标移动到文件末尾
复制粘贴删除剪切
yy: 复制当前行
nyy: n为数字. 复制光标所在(包括)的向下 n 行,例如 20dd 则是删除 20 行
dd: 删除(剪切)光标所在行,n dd 删除指定的行数
ndd: n为数字. 删除(剪切)光标所在(包括)的向下 n 行,例如 20dd 则是删除 20 行
p: 在光标所在位置下一行,粘贴
x: 删除光标后一个字符,相当于 Del
X: 删除光标前一个字符,相当于 Backspace
查找命令
/: 输入想要查找的字符串
n: 下一个查找结果
N:上一个查找结果
其他常用命令
ZZ: 保存并退出
u: 撤销上一步操作
Ctr+r: 反撤销
.: 重复上一次操作的命令
>>: 文本行右移
<<: 文本行左移
v: 可视模式,方向键选中文本
可视模式可以配合 d、y、>>、<<实现对文本块的删除、复制、左右移
Ctrl+v: 可视块模式, 上下选取文本
可视块模式可以实现批量注释:
选中需要注释的多行的开头, 再按Shift + i 进入编辑模式然后输入你想要在行首插入的字符,按ESC为每一行生效
批量删除注释:
选中要删除的字符,按d即可删除
2.文本输入模式
在命令模式下输入插入命令i、附加命令a 、打开命令o都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi/vim当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。
代码提示
Ctrl+n/p: 文本自动补全
3.末行模式
在命令模式下按下:(英文冒号)就进入了末行模式。
按ESC键可随时退出末行模式返回命令模式
保存命令
:wq/x: 保存并退出
:q!: 不保存, 强制退出
显示取消行号
:set nu(set number):显示行号
:set nonu:取消显示行号
替换命令
:%s/abc/123/g 将所有行的abc替换成123
:1, 10s/abc/123/g 将第一行至第10行之间的abc替换成123
粘贴模式
如果从别的地方复制的文本直接在vim中粘贴可能会出现缩进错乱,可以通过粘贴模式解决
:set paste 进入粘贴模式
:set nopaste 推出粘贴模式
4. 其他技巧
打开文件直接跳转到某一行
打开文件test并跳转到16行
vim test +16
跳转到某一行
nG 跳转到第n行
在vim中执行shell命令
:!command
在vim中打开另一个文件
:sp file (split) 水平切分窗口
:vsp file (vsplit) 垂直切分窗口
Ctrl+w+方向键 切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l 同上
Ctrl+w+w 依次向后切换到下一个窗格中
5.常用配置
在用户家目录~
下添加.vimrc配置文件
set nu " 显示行号
set ai " 自动缩进
set tabstop=4 " 设置tab键为4个空格
set shiftwidth=4 " 自动缩进时使用4个空格
set softtabstop=4 " 设置tab键设置的4个空格可配退格键一次删除
set expandtab " 输入tab时自动将其转化为空格
set autoindent " 自动对齐