vim 一共分三种模式:
- 命令模式(command mode)
- 编辑模式(insert mode)
- 命令行模式(command-line mode)
命令模式又被称为一般模式,进入 vim 时默认为命令模式。命令模式下按 i 可进入编辑模式,编辑模式下按 Esc 可进入命令模式。命令模式下输入“:”能进入命令行模式,命令行模式也能进入命令模式。但是命令行模式和编辑模式不能直接切换,必须经过命令模式才可。
每个模式都有其特有的命令和功能。
- 命令模式可以做浏览,删除等操作
- 编辑模式可以输入内容
- 命令行模式可以保持,退出等操作
命令模式(command mode)
移动光标
| 命令 | 解释 | |||
|---|---|---|---|---|
| h(或 left) | 左移动 | |||
| j(或 down) | 下移动 | |||
| k(或 top) | 上移动 | |||
| l(或 right) | 下移动 | |||
| n(数字)+h \ | j \ | k \ | l | 移动 n 个位置 |
| PageDown 或^f | 向下移一页 | |||
| PageUp 或^b | 向上移一页 | |||
| ^d | 向上移半页 | |||
| ^u | 向上移半页 | |||
| + | 光标移动到非空白字符的下一列头部 | |||
| - | 光标移动到非空白字符的上一列头部 | |||
| Home 或 0 | 到列的头部 | |||
| End 或\$ | 到列的尾部 | |||
| ^Home | 到文件头部 | |||
| ^End | 到文件尾部 | |||
| H | 到屏幕的首行 | |||
| M | 到屏幕的中间行 | |||
| L | 到屏幕的尾行 | |||
| G | 到文件的尾行类似^End | |||
| nG | 到文件的第 n 行 | |||
| gg | 到文件的头部类似^Home |
区块选择
| 命令 | 解释 |
|---|---|
| v | 以字符为单位选择区块 |
| V | 以列为单位选择区块 |
| ^v | 以矩形的形式选择区块 |
| y | 复制区块 |
| p | 粘贴区块 |
| d | 删除区块 |
搜索与取代
| 命令 | 解释 |
|---|---|
| /word | 向下查找 |
| ?word | 向上查找 |
| n | 下一个 |
| N | 前一个 |
| :n1,n2s/word1/word2/g | 将 n1 列到 n2 列的 word1 替换为 word2 |
| :1,\$s/word1/word2/g | 将第一列到最后一列的 word1 替换为 word2 |
| :1,\$s/word1/word2/gc | 将第一列到最后一列的 word1 替换为 word2,并提示使用者是否替代 |
删除、复制、粘贴、撤销、恢复
| 命令 | 解释 | |
|---|---|---|
| x | 向后删除,类似编辑模式的 Del | |
| X | 向前删除,类似编辑模式的 backspace | |
| nx \ | nX | n 为数字,表示删除 n 个 |
| dd | 删除光标所在行 | |
| ndd | 删除光标所在行开始的 n 行 | |
| d1G | 删除光标所在行到文件第一行间的所有内容 | |
| dG | 删除光标所在行到文件最后一行间的所有内容 | |
| d\$ | 删除光标到改行结尾间的内容 | |
| d0 | 删除光标到改行头部间的内容 | |
| yy | 复制光标所在行 | |
| nyy | 复制光标所在行开始的 n 行 | |
| y1G | 复制光标所在行到文件第一行间的内容 | |
| yG | 复制光标所在行到文件最后一行间的内容 | |
| y\$ | 复制光标到行尾间的内容 | |
| y0 | 复制光标到行头间的内容 | |
| p(小写) | 粘贴,如果复制的内容是一列,将粘贴到光标所在含的下一行 | |
| P(大写) | 粘贴,如果复制的内容是一列,将粘贴到光标所在含的上一行 | |
| u | 撤销 | |
| ^r | 恢复 | |
| . | 重复刚才的操作 |
编辑模式(insert mode)
| 命令 | 解释 |
|---|---|
| i | 进入编辑模式,并在光标处开始编辑 |
| I | 进入编辑模式,并在光标所在行头部开始编辑 |
| a | 进入编辑模式,并在光标处的后一个位置开始编辑 |
| A | 进入编辑模式,并在光标所在尾部开始编辑 |
| o | 进入编辑模式,并在光标所在行的下一行开始编辑 |
| O | 进入编辑模式,并在光标所在行的上一行开始编辑 |
| r | 进入替换模式,替换当前光标上的那个字 |
| R | 进入替换模式,可一直替换,直到按下 Esc |
命令行模式(command-line mode)
| 命令 | 解释 |
|---|---|
| :w | 将编辑的数据写入硬盘 |
| :w! | 强行写入硬盘,即使没有写入权限。前提是当前的用户有修改权限的能力 |
| :q | 离开 |
| :q! | 强制离开,不保存 |
| :wq | 保存后离开 |
| :wq! | 强制保存后离开 |
| :wq! | 强制保存后离开 |
| ZZ | 若文件没改动就不储存离开,如果有改动就储存再离开 |
| :! command | 可以输入命令行界面的命令 |
| :w [filename] | 将文件另存为 |
| :n1,n2 w [filename] | 将文件 n1 到 n2 行间的内容另存为 |
| :r [filename] | 读取其他文件并插入到当前光标的下一行 |
| :set nu | 设置行号 |
| :set nonu | 取消行号 |
多文件编辑功能
当用 vim file1 file2 …同时打开多个文件时,可使用多文件编辑功能。
| 命令 | 解释 |
|---|---|
| :files | 查看当前这个 vim 打开的所有文件 |
| :n | 查看下一个文件 |
| :N | 查看前一个文件 |
多窗口功能
多窗口功能非常的方便,能让我买在同一 bash 中并列查看多个文件。
| 命令 | 解释 |
|---|---|
| :sp [filename] | 在新窗口中打开文件,如果不加名字就将当前文件在新窗口中打开 |
| ^w+down | 切到下一个窗口 |
| ^w+up | 切到上一个窗口 |
文字补全功能
例如在 htm 的 style 标签内些 css 时忘记了背景颜色的 css 名字,就可以用文字补全功能了。
| 组合按钮 | 补齐的内容 |
|---|---|
| ^x->^n | 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐 |
| ^x->^f | 以当前目录内的“文件名”作为关键字,予以补齐 |
| ^x->^o | 以扩展名作为语法补充,以 vim 内置的关键字,予以补齐 |