Vim 是从 Vi 编辑器发展出来的一款极其强大的文本编辑器,它保留了 Vi 编辑器的所有功能,并添加了许多新特性。Vim 具有代码补全、语法高亮、错误跳转、批量化处理等编辑功能,还支持异常丰富的插件扩展,且整个编辑全程可通过键盘完成,无需使用鼠标,以致其成为众多程序员一款高效的编程开发利器。
关于 Vim 获取与安装可以参考最强文本编辑器 Vim 获取与安装。Vim 的核心魅力在于完全通过键盘操作实现高效的文本处理,难就难在复杂的操作命令和脱离鼠标的痛苦,其实只要掌握了技巧并不多难。建议初学者从基础命令、模式切换等核心操作入手,再逐渐拓展并逐步进阶高级功能。
本文主要介绍关于 Vim 的一些常用命令。
Vim 模式
- 命令模式(Command Mode)
- 输入模式(Insert Mode)
- 视图模式(Visual Mode)
- 末行模式(Last-Line Mode)
模式转换
| 命令 |
描述 |
| i, I, a, A, o, O, s, S |
Command Mode ---> Insert Mode |
| Esc |
Insert Mode ---> Command Mode |
| v, V |
Command Mode ---> Visual Mode |
| Esc |
Visual Mode ---> Command Mode |
| :, /, ? |
Command Mode ---> Last-Line Mode |
常用命令
注:带 :、/、? 的是在末行模式下使用的命令。
如有错误,烦请指正!
打开文件
| 命令 |
描述 |
| vim filename |
打开或新建文件,并将光标置于第一行的首部 |
| vim -r filename |
恢复上次 vim 打开时崩溃的文件 |
| vim -R filename |
以只读的方式打开文件,仍然可以使用 :wq! 写入 |
| vim -M filename |
打开文件并关闭文件修改权限,无法写入或修改 |
| vim -x filename |
以加密的方式打开文件 |
| vim -b filename |
以二进制模式打开文件 |
| vim + filename |
打开文件,并将光标置于最后一行的首部 |
| vim +n filename |
打开文件,并将光标置于第 n 行的首部 |
| vim +/str filename |
打幵文件,并将光标置于第一个 str 所在位置 |
| vim -c cmd filename |
打开文件进行编辑前,先执行指定的 cmd 命令 |
| vim file1 file2 file3 ... |
打开多个文件 |
| vim -On file1 file2 ... |
打开多个文件并左右分屏 |
| vim -on file1 file2 ... |
打开多个文件并上下分屏 |
| vim -d file1 file2 |
打开 file1 和 file2 文件并比对两个文件的差异 |
查看文件
| 命令 |
描述 |
| :ls |
列出当前打开的所有文件 |
| :bn |
打开多个文件时,切换显示下一个文件 |
| :bp |
打开多个文件时,切换显示上一个文件 |
| :sp filename |
上下分割,并打开一个新的文件 |
| :vsp filename |
左右分割,并打开一个新的文件 |
| :prev |
切换至前一个文件 |
| :next |
切换至下一个文件 |
| :first |
切换至第一个文件 |
| :last |
切换至最后一个文件 |
| Ctrl + w, s |
按下 Ctrl + w,再按下 s,上下分屏打开当前文件 |
| Ctrl + w, v |
按下 Ctrl + w,再按下 v,左右分屏打开当前文件 |
| Ctrl + w, h |
文件左右分屏时,将光标定位到左边屏幕 |
| Ctrl + w, l |
文件左右分屏时,将光标定位到右边屏幕 |
| Ctrl + w, H |
文件左右分屏时,将当前分屏移动到左边 |
| Ctrl + w, L |
文件左右分屏时,将当前分屏移动到右边 |
| Ctrl + w, j |
文件上下分屏时,将光标定位到下边屏幕 |
| Ctrl + w, k |
文件上下分屏时,将光标定位到上边屏幕 |
| Ctrl + w, J |
文件上下分屏时,将当前分屏移动到下边 |
| Ctrl + w, K |
文件上下分屏时,将当前分屏移动到上边 |
| Ctrl + w, c |
文件分屏显示时,关闭当前分屏 |
| Ctrl + w, o |
文件分屏显示时,关闭除当前分屏之外的其他分屏 |
| Ctrl + w, q |
文件分屏显示时,关闭当前分屏,直到退出 VIM |
操作文件
| 命令 |
描述 |
| :q |
不保存文件并退出 |
| :q! |
不保存文件并强制退出 |
| :qa |
不保存所有文件并全部退出 |
| :qa! |
不保存所有文件并强制全部退出 |
| :w |
写入并保存文件,修改文件时间戳 |
| :wa |
保存所有文件 |
| :wq |
保存文件并退出 |
| :w! |
强制保存文件 |
| :wq! |
强制保存文件并退出 |
| :x |
保存文件并退出,不会修改文件时间戳 |
| :w filename |
另存到 filename 文件 |
| :saveas filename |
另存到 filename 文件 |
| :e filename |
打开或新建一个文件 |
| :e! |
放弃所有更改,恢复文件到上次保存 |
功能命令
| 命令 |
描述 |
| :set nu |
显示行号 |
| :set nonu |
取消显示行号 |
| :set ic |
忽略字符大小写 |
| :set noic |
区分字符大小写 |
| :syntax on |
语法高亮 |
| :syntax off |
取消语法高亮 |
| :changes |
查看文件变化 |
光标插入
| 命令 |
描述 |
| i |
光标插在当前字符左侧 |
| I |
光标插在当前行的行首 |
| a |
光标插在当前字符右侧 |
| A |
光标插在当前行的行尾 |
| o |
新增下一行,并将光标插在行首 |
| O |
新增上一行,并将光标插在行首 |
| s |
删除光标所在字符,并将光标插在此处 |
| S |
删除光标所在整行,并将光标插在行首 |
光标移动
| 命令 |
描述 |
| h |
光标向左移动 1 个字符 |
| j |
光标向下移动 1 个行 |
| k |
光标向上移动 1 个行 |
| l |
光标向右移动 1 个字符 |
| nj |
光标向下移动 n 个行 |
| nk |
光标向上移动 n 个行 |
| H |
光标移动到屏幕最上方一行的第 1 个非空字符 |
| M |
光标移动到屏幕中央一行的第 1 个非空字符 |
| L |
光标移动到屏幕最下方一行的第 1 个非空字符 |
| G |
光标移动到这个文件的最后一行 |
| nG |
光标移动到这个文件的第 n 行 |
| gg |
光标移动到这个文件的第一行,相当于 1G |
| n + [Enter] |
光标移动向下移动 n 行 |
| n + [Space] |
光标移动向右移动 n 个字符 |
| + |
光标移动到非空字符的下一行 |
| - |
光标移动到非空字符的上一行 |
| w |
光标移动到下个单词首部 |
| b |
光标移动到上个单词首部 |
| e |
光标移动到下个单词尾部 |
| ge |
光标移动到上个单词尾部 |
| 0 |
光标移动到本行行首 |
| $ |
光标移动到本行行尾 |
| $ |
移动到行首非空字符位置 |
| g_ |
移动到行尾非空字符位置 |
| fa |
移动到本行光标处开始向后第一个为 a 的字符处 |
| nfa |
移动到本行光标处开始向后第 n 个为 a 的字符处 |
| Fa |
移动到本行光标处开始向前第一个为 a 的字符处 |
| nFa |
移动到本行光标处开始向前第 n 个为 a 的字符处 |
| ta |
移动到本行光标处开始向后第一个为 a 的字符的前一个字符处 |
| nta |
移动到本行光标处开始向后第 n 个为 a 的字符的前一个字符处 |
| Ta |
移动到本行光标处开始向前第一个为 a 的字符的后一个字符处 |
| nTa |
移动到本行光标处开始向前第 n 个为 a 的字符的后一个字符处 |
文件翻页
| 命令 |
描述 |
| Ctrl + f |
屏幕向下移动一页 |
| Ctrl + b |
屏幕向上移动一页 |
| Ctrl + d |
屏幕向下移动半页 |
| Ctrl + u |
屏幕向上移动半页 |
| zt |
移动屏幕将当前行移动到屏幕上方 |
| zz |
移动屏幕将当前行移动到屏幕中间 |
| zb |
移动屏幕将当前行移动到屏幕下方 |
大小写转换
| 命令 |
描述 |
| ~ |
将光标下的字母改变大小写 |
| n~ |
将光标位置开始的 n 个字母改变其大小写 |
| g~~ |
改变当前行字母的大小写 |
| guu |
将当前行的字母全改成小写 |
| gUU |
将当前行的字母全改成大写 |
| guw |
将光标下的单词改成小写 |
| gUw |
将光标下的单词改成大写 |
| ngUU |
将从光标开始到下面 n 行字母改成大写 |
格式化代码
| 命令 |
描述 |
| == |
将光标所在行代码格式化缩进 |
| n== |
将光标所在行到向下 n 行格式化缩进 |
| gg=G |
将全文代码格式化缩进 |
| :set ai |
设定自动缩进 |
| :set noai |
取消自动缩进 |
| :set expandtab |
将 Tab 转换为 Space |
| :set tabstop=4 |
制表符宽度 tabstop=4 或 ts=4 |
| :retab |
按照设定值重新缩进 |
查找替换
| 命令 |
描述 |
| :s/str/abc/ |
将光标所在行的第一个 str 替换成 abc |
| :%s/str/abc/ |
将全文中的第一个 str 替换成 abc |
| :s/str/abc/g |
将光标所在行的所有 str 替换成 abc |
| :%s/str/abc/g |
将全文中的所有 str 替换成 abc |
| :m,ns/str/abc/g |
将 m 行到 n 行中所有的 str 替换为 abc |
| /str |
向后查找 str,n 查找下一个,N 查找前一个 |
| ?str |
向前查找 str,n 查找前一个,N 查找下一个 |
| :set hlsearch |
打开高亮搜索结果 |
| :set nohlsearch |
关闭高亮搜索显示 |
复制命令
| 命令 |
描述 |
| yy |
复制光标所在行 |
| nyy |
复制光标所在行,到向下 n 行所有内容 |
| y1G |
复制光标所在行,到第一行的所有内容 |
| yG |
复制光标所在行,到最后一行的所有内容 |
| y0 |
复制光标前一个字符,到该行行首所有内容 |
| y^ |
复制光标前一个字符,到该行第一个非空字符的所有内容 |
| y$ |
复制光标所在字符,到该行行尾的所有内容 |
| yw |
复制光标所在字符,到该单词结束所有内容 |
粘贴命令
| 命令 |
描述 |
| p(小写) |
将复制的内容粘贴到光标所在字符之后 |
| P(大写) |
将复制的内容粘贴到光标所在字符之前 |
| np |
将复制的内容粘贴 n 次 |
删除命令
| 命令 |
描述 |
| dd |
删除光标所在行 |
| ndd |
删除光标所在行,到向下 n 行所有内容 |
| d1G |
删除光标所在行,到第一行的所有内容 |
| dG |
删除光标所在行,到最后一行的所有内容 |
| d0 |
删除光标前一个字符,到该行行首所有内容 |
| d^ |
删除光标前一个字符,到该行第一个非空字符的所有内容 |
| d$ |
删除光标所在字符,到该行行尾的所有内容 |
| dw |
删除光标所在字符,到该单词结束所有内容 |
| dt |
删除当前光标到指定符号的所有内容 |
| x |
向后删除一个字符 |
| nx |
向后删除 n 个字符 |
| X |
向前删除一个字符 |
| ci{ |
删除 {} 里面的所有内容 |
| :m,nd |
删除第 m 行到 n 行的所有内容 |
修改命令
| 命令 |
描述 |
| cw |
修改光标所在处,到该单词结束所有字符 |
| r |
替换光标所在处字符 |
| R |
从光标所在处开始替换字符,按 Esc 结束 |
其他操作
| 命令 |
描述 |
| . |
重复上次操作 |
| u |
撤销上次操作 |
| nu |
撤销前 n 次操作 |
| Ctrl + r |
恢复上次操作 |
| J |
将光标所在行与下一行合成同一行 |
| Ctrl + v |
可视化块 |
| Shift + v |
可视化行 |
互动板块
- 问:如何快速入门 Vim 编辑器?
- 答:找规律,多敲多练,把键盘敲烂!
虽然初期学习较难适应,但是一旦掌握其命令逻辑和操作方法,就能显著提高编辑效率。随着肌肉记忆的形成,便可以体会到"双手不离键盘"的流畅编辑体验,这种高效、连贯且几乎无中断的编辑方式,正是 Vim 经久不衰的魅力所在。
更多内容