VIM:编辑器核心模式与全功能命令速查手册

299 阅读8分钟

VIM

VIM 是由经典 vi 编辑器迭代发展而来的高性能文本编辑器,搭载海量功能命令,凭借模式化编辑机制成为运维、开发场景的核心编辑工具。VIM 摒弃复杂多键组合操作,常用指令极简高效,终端输入vimtutor即可启动官方交互式入门教程。

VIM键盘图

image.png

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 motiond number motion

  • d:删除操作符,代表要执行的删除行为
  • motion:动作,代表操作的文本范围,如w代表单词、$代表行末
  • number:数字,代表动作的重复次数

特别提示:在普通模式下,单独按下代表操作符的键而不搭配动作,该字符会显示在屏幕最后一行,等待输入动作以指定操作范围。

基础命令

  • x,X:x 向后删除 1 个字符(等同于 [del] 按键),X 向前删除 1 个字符(等同于 [backspace] 退格键)【常用】
  • p,P:置入类命令,p 将已复制的数据粘贴到光标下一行,P 粘贴到光标上一行【常用】
  • J:将光标所在行与下一行的数据合并为同一行
  • c:重复删除多个数据,例如向下删除 10 行可执行10cj
  • u:复原上一个操作【常用】
  • 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/g1,$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 个字符可执行10x
  • dd:剪切光标所在的整行【常用】,可通过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,若文件被修改则保存,随后退出,效果等同于:wq
  • ZQ:不保存文件,强制退出,效果等同于: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 <回车>