Vim Docs
Unix-style 系统中,shell 的光标默认是色块,而不是 Windows 中的 |
。因此讨论光标位置时,要严格区分光标前、光标所在位置与光标后。
命令模式
从命令模式切换到底线命令模式, :
常规输入
命令 |
作用 |
i |
切换到输入模式,从当前光标位置开始输入 |
a |
切换到输入模式,从光标位置后一位开始输入 |
o |
当前行下方插入新行,并进入输入模式 |
O |
在当前行上方插入新行,并进入输入模式 |
v |
切换到选择模式,类似于鼠标框选文本 |
光标移动
以下命令输入后,按 Enter
触发
命令 |
作用 |
<num> + ↑↓←→ |
光标向上/下/左/右移动 num 位,例如 30↑ 。左右移动时不会超过行首/行尾。 |
ctrl + u/d |
屏幕向上/下移动半页 |
<num> + Space |
光标向后移动 num 位(可换行) |
0/$ |
光标移动到行首/行尾( Home/End 也行 ) |
G |
光标移动到文件最后一行 |
gg |
光标移动到文件第一行 |
<num> + G |
光标移动到 num 行 |
<num> + Enter |
光标向下移动 num 行 |
查找替换
命令 |
作用 |
/word |
向光标后寻找 word 字符串 |
?word |
向光标前寻找 word 字符串 |
n |
重复前一个查找动作(等价于查找下一个/上一个) |
N |
反向进行前一个查找动作(向前变向后,向后变向前) |
:<num1>,<num2>s/word1/word2/g |
在 num1 行到 num2 行之间搜索字符串 word1 ,将其替换为 word2 |
:<num1>,<num2>s/word1/word2/gc |
跟上面效果一样,但是替换时会请求确认 (confirm) |
:%s/word1/word2/g |
在所有行进行上述操作 |
:%s/word1/word2/gc |
同理 |
批量操作
命令 |
作用 |
x |
删除光标所在处的字符(后面的会自动向前缩进) |
X |
删除光标前一个字符 |
<num>x |
从光标所在处开始, 向后删除 num 个字符 |
dd |
剪切当前行 (带换行符) |
<num>dd |
从光标所在行开始, 向下剪切 num 行 |
d0 |
剪切光标前一位到行首 |
d$ |
剪切光标所在处到行尾 (不带换行符) |
d<num>G |
从光标所在行开始, 剪切到 num 行 |
yy |
复制当前行 |
<num>yy |
复制光标所在的向下 num 行 |
y0 |
复制光标前一位到行首 |
y$ |
复制光标所在处到行尾 (不带换行符) |
y<num>G |
从光标所在行开始, 复制到 num 行 |
小写 p |
粘贴到光标后(若带有换行符, 则粘贴到下一行) |
大写 P |
粘贴到光标前(若带有换行符, 则粘贴到上一行) |
J |
将光标下一行合并到光标所在行, 用空格隔开 |
u |
撤销上一次操作 |
ctrl + r |
重做被撤销的操作 |
小数点 . |
重复上一个操作 |
"+y |
双引号 + 加号 + y,将 visual 模式中的内容复制到系统剪切板(不是 vim 的默认缓冲区) |
"+p |
将系统剪切板中的内容粘贴到 vim |
> / < |
向前或向后缩进光标选中的文本d |
底线命令
从底线命令模式切换到命令模式, ESC
命令 |
作用 |
:w |
保存文件 |
:wq |
保存文件,并退出 Vim 编辑器 |
:q |
退出 Vim 编辑器 |
:q! |
强制退出 Vim 编辑器,不保存修改 |
:w <file_name> |
将编辑的数据另存为新文件 |
:r <file_name> |
在编辑的数据中,读入另一个文件(即将新文件内容添加到光标后) |
:<num1>,<num2> w <file_name> |
将 num1 到 num2 行的内容另存为新文件 |
! <command> |
暂且离开 vi/vim 环境,执行 command 并显示结果 |
输入模式
按键 |
作用 |
Enter |
换行 |
Backspace |
删除光标前字符 |
Del |
删除光标后字符 |
Home/End |
光标移动到行首/行尾 |
Page Up/Down |
上/下翻页 |
配置文件
vim 的配置文件位于 ~/.vimrc
。配置文件中的 set
指令可以在 vim 窗口中通过 :
底线命令模式直接执行,当然也就只会在当前窗口中生效。写入配置文件时则会在每次编辑前默认加载。
字符集
缩进
1
| set autoindent expandtab tabstop=2 shiftwidth=2
|
- autoindent:换行时自动缩进
- expandtab:按下 Tab 键时插入空格而不是制表符
- tabstop=2:设置 tab 键的宽度为 2 个空格
- shiftwidth:使用 << 和 >> 命令缩进或移动文本时的宽度为 2 个空格
行号