目录
1. Vim是什么
vim是Vi IMproved,是编辑器Vi的一个加强版,一个极其强大并符合IT工程师(程序员、运维)习惯的编辑器。如果你是一名职业的SE,那么一定在寻找一款出色的能够自由定制、满足灵活编辑功能的编辑器。那么答案,就是vim或者Emacs。
2. 三种基本模式
Normal Mode、Insert Mode和Command-line Mode
-
从Normal Mode进入Insert Mode,可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替换(replace)。
-
从Insert Mode进入Normal Mode,只需要按ESC键即可。
-
从Normal Mode进入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示输入vim命令,“/”表示后面输入要向下搜索的字符串,“?”表示后面输入要向上搜索字符串。
-
从Command-line Mode进入Normal Mode,只需要按ESC键即可了。
把Normal Mode理解为常态,进入其他任何一种模式,需要某种特殊方式,而从其他特殊模式回到Normal Mode,就按ESC键即可。
Normal Mode -> Insert Mode
- i 小写字母i,在光标位置插入
- a 小写字母a,在光标的下一个位置插入
- I 大写字母I,在光标所在行的第一个非空格处插入
- A 大写字母A,在光标所在行的最后一个字符处插入
- o 小写字母o,在光标所在行的下一行处插入新行
- O 大写字母O,在光标所在行的上一行处插入新航
- r 小写字母r,替换光标所在处的字符一次
- R 大写字母R,持续替换光标所在处的字符,直到按下ESC
Normal Mode -> Command-line Mode
-
:w 保存文件
-
:w! 强制保存文件(前提是用户有修改文件访问权限的权限)
-
:q 退出缓冲区
-
:q! 强制退出缓冲区而不保存
-
:wq 保存文件并退出缓冲区
-
:ZZ 保存文件并且退出
-
:wq! 强制保存文件并退出缓冲区(前提是用户有修改文件访问权限的权限)
-
:w 另存为名为filename文件
-
:n1,n2 w 将n1行到n2行的数据另存为名为filename文件
-
: x 如果文件有更改,则保存后退出。否则直接退出。
Insert Mode -> Normal Mode
- 按下ESC键
Command-line -> Normal Mode
- 按下ESC键
3. vim编辑器的退出
vim编辑器几种退出的形式
点击Esc键退出编辑模式
| 命令 | 含义 | 等同于 |
|---|---|---|
| :q | 退出 | quit |
| :q! | 不保存退出 | quit! |
| :wq | 写入文件并退出 | writequit |
| *:wq! | 退出时写入与否取决于文件的权限,有写权限写入并退出,没有写权限就强制退出 | |
| :x | 等同于:wq 写入与否取决于文件是否变动 | |
| :qa | 退出全部 | quitall |
4. 常用编辑快捷键
显示行号
| 命令 | 含义 |
|---|---|
| :set nu | 显示行号 |
| :set nu! | 关闭行号 |
删除操作(delete)
| 命令 | 含义 |
|---|---|
| dd | 删除光标所在行 |
| ndd | 删除从光标所在行开始,向下的n行 |
| d1G | 删除从光标所在行开始,到第一行的所有行 |
| dG | 删除从光标所在行开始,到最后一行的所有行 |
| d$ | 删除从光标所在位置,到行尾的所有字符 |
| d0 | 删除从光标所在位置,到行首的所有字符 |
复制操作(yank)
| 命令 | 含义 |
|---|---|
| yy | 复制光标所在行 |
| nyy | 复制从光标所在行开始,向下的n行 |
| y1G | 复制从光标所在行开始,到第一行的所有行 |
| yG | 复制从光标所在行开始,到最后一行的所有行 |
| y$ | 复制从光标所在位置,到行尾的所有字符 |
| y0 | 复制从光标所在位置,到行首的所有字符 |
粘贴操作(paste)
| 命令 | 含义 |
|---|---|
| p | 小写字母p,粘贴剪贴板中的数据,从光标所在行的下一行开始 |
| P | 大写字母P,粘贴剪贴板中的数据,从光标所在行的上一行开始 |
撤销与重做操作(undo,redo)
| 命令 | 含义 |
|---|---|
| u (Undo) | 撤销上一个操作 |
| Ctrl+r (Redo) | 重做上一个操作 |
搜索字符串
| 命令 | 含义 |
|---|---|
| /string | 向下搜索字符串“string” |
| ?string | 向上搜索字符串“string” |
如果已经用 / 找到了一个词,那么 n N 就分别就是向后,向前再找这个词。
相反,如果用的是 ? 找到的词,则 n 是向前找,N 是向后找。
即是说 n 总是按着当前的搜索方向往下找同一个词(术语叫搜索字串)
替换字符串
:s(substitute)命令用来查找和替换字符串。语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}
例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)。
快速移动光标
| 快捷键 | 含义 |
|---|---|
| j | 向下 |
| k | 向上 |
| h | 向左 |
| l | 向右 |
| $ | 光标移动到行尾(End),注意要按Shift键 |
| 0 | 光标移动到行首(Home) |
| ^ | 光标移动到行首第一个非空白字符(Home),注意要按Shift键 |
| gg | 移动到文本开头 |
| G | 移动到文本结尾 |
| 100j | 向下移动100行 |
| :100 | 移动到100行 |
5. 多文件同时编辑和分屏
同时打开两个
vi a.txt b.txt
| 命令 | 含义 |
|---|---|
| :n | 下一个文件 |
| :N | 上一个文件 |
| :wq! | 全保存退出 |
分屏
| 命令 | 含义 |
|---|---|
| :spilt | 设置为水平分屏 |
| :vsplit | 设置为垂直分屏 |
| :only | 取消分屏 |
| CTRL+ww | 后一个 |
| CTRL+wp | 前一个 |
6. 比较两个文件的不同
-
使用vim的比较模式打开两个文件:
vim -d file1 file2
或
vimdiff file1 file2 -
如果已经打开了文件file1,再打开另一个文件file2进行比较:
:vert diffsplit file2
如果没有用vert命令,diffsplit则会分上下两个窗口。 -
如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同。
分别在两个窗口里面输入命令:
:diffthis -
如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用如下命令更新:
:diffupdate -
定位到不同点:
[c 跳到前一个不同点
]c 跳到后一个不同点 -
在窗口间跳转:
ctrl-w w 跳到下一个窗口
ctrl-w h 跳到左侧窗口
ctrl-w l 跳到右侧窗口
ctrl-w j 跳到下方的窗口
ctrl-w k 跳到上方的窗口 -
合并文档:
dp 将差异点的当前文档内容应用到另一文档(diff put)
do 将差异点的另一文档的内容拷贝到当前文档(diff get) -
上下文的展开和查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置:
:set diffopt=context:3
可以用简单的折叠命令来临时展开被折叠的相同的文本行:
zo (folding open, z这个字母看上去比较像折叠的纸)
然后可以用下列命令来重新折叠:
zc (folding close)
7. 更多参考:
vim命令图解

本文详细介绍Vim编辑器的基本概念、操作模式切换、编辑器退出、常用编辑快捷键等功能,涵盖显示行号、删除、复制、粘贴、撤销、搜索、替换、光标移动、多文件编辑、分屏操作及文件比较等核心技巧。

被折叠的 条评论
为什么被折叠?



