VIM
VIM 是由经典 vi 编辑器迭代发展而来的高性能文本编辑器,搭载海量功能命令,凭借模式化编辑机制成为运维、开发场景的核心编辑工具。VIM 摒弃复杂多键组合操作,常用指令极简高效,终端输入vimtutor即可启动官方交互式入门教程。
VIM键盘图
VIM 核心编辑模式
VIM 采用模式化编辑设计,不同模式下按键功能独立,核心包含四大模式,是高效使用 VIM 的基础:普通模式、输入模式、命令模式、可视模式。
普通模式用于文件浏览,输入模式用于文本录入,可视模式用于文本选区,命令模式用于执行系统级指令,无需组合键即可完成绝大多数操作,常用操作按键数量极少。
和模式编辑深度配合的核心编辑逻辑是操作符 + 动作:操作符用于定义编辑行为(比如修改、删除、选中文本),动作用于指定操作的文本范围,二者搭配就能精准控制操作区域。例如执行de,就会从当前光标位置删除到单词末尾。
普通模式
VIM 启动后默认进入该模式,键盘输入会被识别为操作命令而非输入字符,是所有模式的切换枢纽,按下ESC键可从任意模式返回普通模式。
输入模式
普通模式下按下i、o、a等快捷键进入,编辑器左下角显示--INSERT--或--REPLACE--标识,此时可正常输入文本;按下ESC键即可退出并返回普通模式。
输入模式常用按键:
- 字符按键 / Shift 组合:输入对应字符
ENTER:回车键,实现换行BACK SPACE:退格键,删除光标前一个字符DEL:删除键,删除光标后一个字符- 方向键:在文本中自由移动光标
HOME/END:快速移动光标到行首 / 行尾Page Up/Page Down:实现页面上翻 / 下翻Insert:切换光标为输入 / 替换模式,光标会对应变为竖线 / 下划线ESC:退出输入模式,返回普通模式
命令模式
在普通模式下按下英文冒号:,即可进入命令模式,光标会自动跳转到编辑器底部的命令行,在此模式下可执行各类高级编辑命令;按ESC键可随时退出,返回普通模式。
可视化模式
可视模式是 VIM 的专属文本选择模式,按对应快捷键进入,按ESC键可随时退出,主要用于批量选中文本后执行统一编辑操作,分为三种类型:
v:字符可视化模式,文本选择以单个字符为单位V:行可视化模式,文本选择以整行为单位[Ctrl]-[V]:块可视化模式,可精准选择矩形区域内的文本
VIM按键说明
VIM 中多数修改文本的命令,均遵循操作符+动作或操作符+数字+动作的格式,数字代表动作的重复次数,可实现批量编辑。以删除操作符d为例,命令格式为d motion或d number motion:
d:删除操作符,代表要执行的删除行为motion:动作,代表操作的文本范围,如w代表单词、$代表行末number:数字,代表动作的重复次数
特别提示:在普通模式下,单独按下代表操作符的键而不搭配动作,该字符会显示在屏幕最后一行,等待输入动作以指定操作范围。
基础命令
x,X:x 向后删除 1 个字符(等同于 [del] 按键),X 向前删除 1 个字符(等同于 [backspace] 退格键)【常用】p,P:置入类命令,p 将已复制的数据粘贴到光标下一行,P 粘贴到光标上一行【常用】J:将光标所在行与下一行的数据合并为同一行c:重复删除多个数据,例如向下删除 10 行可执行10cju:复原上一个操作【常用】yy:复制光标所在的整行【常用】w:光标从当前位置跳转到下一个单词起始处(不包含首字符)e:光标从当前位置跳转到单词末尾(包含最后一个字符)0或功能键[Home]:移动光标到当前行的最前面字符处【常用】$或功能键[End]移动光标到当前行的最后面字符处【常用】
移动光标
h或向左箭头键(←):光标向左移动 1 个字符j或向下箭头键(↓)):光标向下移动 1 个字符k或向上箭头键(↑):光标向上移动 1 个字符l或向右箭头键(→):光标向右移动 1 个字符 (备注:h的键位于左边,每次按下就会向左移动,l的键位于右边,每次按下就会向右移动,j 键看起来很像一支尖端方向朝下的箭头。)[Ctrl] + [f]:屏幕向下移动一页,等同于[Page Down]按键【常用】[Ctrl] + [b]:屏幕向上移动一页,等同于[Page Up]按键【常用】[Ctrl] + [d]:屏幕向下移动半页[Ctrl] + [u]:屏幕向上移动半页[+]:光标移动到非空格符的下一行[-]:光标移动到非空格符的上一行H:光标移动到屏幕最上方那一行的第一个字符M:光标移动到屏幕中央那一行的第一个字符L:光标移动到屏幕最下方那一行的第一个字符G:光标移动到文件的最后一行【常用】gg:光标移动到文件的第一行,等同于1G【常用】[Ctrl]-[W]:在 VIM 的多个窗口之间跳转,执行[:q]+ 回车可关闭窗口j$:将光标移动到下一行的行尾nG:n 为数字,移动光标到文件的第 n 行(可配合:set nu显示行号,更易定位)n[Space]:n 为数字,按下数字后按空格键,光标向右移动当前行的 n 个字符n[Enter>]:n 为数字,光标向下移动 n 行【常用】
编辑、搜索与替换
i,I:进入输入模式,i 从光标当前位置输入,I 从当前行第一个非空格符处开始输入【常用】a,A:进入输入模式,a 从光标下一个字符处输入,A 从光标所在行最后一个字符处输入【常用】o,O:进入输入模式,o 在光标所在下一行新建一行并输入,O 在光标所在上一行新建一行并输入【常用】r,R:进入替换模式,r 仅取代光标所在的 1 个字符,R 持续取代光标所在文字直至按下ESC【常用】ce:替换从当前光标位置到单词末尾的字符cw:替换从当前光标位置到下一个单词起始处的字符c$:替换从当前光标位置到行末的所有字符%查找配对的括号)、]、},光标停在(、[、{处时按 %,光标会跳转到配对括号处,再次按 % 可返回原位置/字符串:在当前文件中,向光标之下查找指定字符串,例如搜寻 vbird 可输入/vbird【常用】?字符串:在当前文件中,向光标之上查找指定字符串n,N:n 重复前一个搜寻动作,与原搜索方向一致;N 为反向重复前一个搜寻动作【常用】[CTRL]-[O]:跳转到较旧的字符串搜索位置[CTRL]-[I]:跳转到较新的字符串搜索位置s/old/new/g:将当前行中所有的 old 替换为 new#,#s/old/new/g:#,# 为行号,将指定行范围内的所有 old 替换为 new%s/old/new/g或1,$s/old/new/g:将整个文件中的所有 old 替换为 new【常用】%s/old/new/gc或者1,$s/old/new/gc:将整个文件中的 old 替换为 new,且每次替换前弹出提示,确认是否执行【常用】cne:n 为数字,替换 n 个单词中从当前光标位置到单词末尾的字符cnw:n 为数字,替换 n 个单词中从当前光标位置到下一个单词起始处的字符 注意:进入输入 / 替换模式后,VIM 画面左下角会出现--INSERT--或--REPLACE--字样,此时才能正常输入字符;按下Esc可退出输入 / 替换模式,回到普通模式【常用】。
删除、复制与粘贴
nx:n 为数字,连续向后删除 n 个字符,例如删除 10 个字符可执行10xdd:剪切光标所在的整行【常用】,可通过p/P粘贴ndd:n 为数字,剪切光标所在位置向下的 n 行【常用】,例如20dd则是剪切20行,可通过p/P粘贴d1G:删除从光标所在行到文件第一行的所有数据dG:删除从光标所在行到文件最后一行的所有数据de:从当前光标位置删除到单词末尾dne:n 为数字,从当前光标位置删除 n 个单词,直至最后一个单词末尾dw:从当前光标位置删除到下一个单词起始处dnw:n 为数字,从当前光标位置删除 n 个单词,直至最后一个单词的下一个单词起始处d$:删除从光标位置到当前行最后一个字符的所有内容d0:删除从光标位置到当前行最前面一个字符的所有内容nyy:n 为数字,复制光标所在位置向下的 n 行【常用】,例如20yy则是复制20行y1G:复制从光标所在行到文件第一行的所有数据yG:复制从光标所在行到文件最后一行的所有数据y$:复制从光标所在字符到当前行行尾的所有数据y0:复制从光标所在字符到当前行行首的所有数据[Ctrl]+[r]重做上一个被撤销的动作【常用】(备注:u与[Ctrl]+[r]是高频常用指令,一个用于复原操作,一个用于重做操作)[.]重复执行前一个操作,如需重复删除、粘贴等动作,按下小数点即可【常用】
命令模式可用按键
:w:将编辑的数据写入硬盘文件中【常用】:w!:文件属性为只读时,强制写入该文件(能否成功取决于文件权限):q离开 VIM 编辑器【常用】:q!:若修改过文件但不想保存,强制离开且不保存修改【常用】(注意:感叹号!在 VIM 中常表示「强制」的含义):wq:保存文件后离开,:wq!为强制保存后离开【常用】ZZ:大写 Z,若文件被修改则保存,随后退出,效果等同于:wqZQ:不保存文件,强制退出,效果等同于:q!:w [filename]:将编辑的数据另存为指定名称的文件(另存新档):n1,n2 w [filename]:将文件中 n1 到 n2 行的内容,保存为指定名称的文件v motion :w FILENAME:将可视模式下选中的内容,保存到指定名称的文件中:r [filename]:读取指定文件的内容,添加到当前光标所在行的后面:! command:暂时离开 VIM,到终端执行指定的 command 命令并查看结果,例如:! ls /home可查看 /home 目录下的文件信息:r !command:执行指定的 command 命令,将其输出结果读取并放置到当前文件的光标位置后
VIM环境的信息
在 VIM 命令模式下,输入:set xxx可开启 xxx 环境选项,在选项前添加no则可关闭该选项,例如:set noic表示关闭忽略大小写的搜索功能。
常用环境设置选项:
:set nu:显示行号,设定后每一行前缀会显示对应行号【常用】:set nonu:与set nu相反,取消行号显示【常用】:set hls:即hlsearch,高亮显示所有搜索到的匹配短语:set is:即incsearch,查找短语时实时显示部分匹配结果:set ic:即ignorecase,搜索时忽略字母的大小写CTRL-G:在编辑文件的页面最底部,显示当前光标所在行位置以及文件的状态信息
在线帮助信息
vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方法之一:
- 按下
<HELP>键 (如果键盘上有的话) - 按下
<F1>键 (如果键盘上有的话) - 输入 :
help <回车>