资讯动态

Vim常用快捷键地图:从模式入门到保存退出全解析

发布时间:2026/9/29 15:37:42 来源:尧图企业网站定制
很多新手刚打开 Vim 的时候看到的是一个没有菜单、没有按钮、连光标都动不了的黑色窗口。网上教 Vim 的教程不少但大部分人都卡在最前面几步不知道怎么输入文字不知道怎么保存退出甚至不知道方向键居然还要换一套操作逻辑。我见过最夸张的例子是有同事改了整整两天服务器配置全程用上下左右方向键一格一格挪光标直到闲聊时才知道 hjkl 才是 Vim 默认的方向键位。这篇内容不是什么“快速入门五分钟”而是一份直接照着用、值得收藏的 Vim 常用快捷键地图。我会覆盖安装打开、保存退出、查找字符串、打开文件里引用的文件路径、配置技巧以及和 IDEA、VSCode 常用快捷键的对照。新手可以按顺序读一遍老手直接跳到相关小节查漏补缺即可。1. 背快捷键前先建立Vim的模式直觉1.1 普通模式、插入模式、命令行模式各管哪一块很多人学 Vim 觉得快捷键难记核心原因是没有先理解模式。Vim 不是那种“按一下字母就输出字母”的编辑器而是把键盘分成了三种状态普通模式、插入模式、命令行模式另外还有视觉模式和块选择模式。普通模式Normal Mode是 Vim 的默认状态。这时候按下的每个字母都不是输入而是命令。按j是向下移动按w是跳到下一个词按d是删除按y是复制。大量最常用的操作都在这个模式完成。插入模式Insert Mode才是真正往文件里写字的模式。按i进入按Esc返回普通模式。很多新手误以为 Vim 的删除、复制是边输入边操作其实不是Vim 的设计思路是编辑和输入分开先通过命令安排再真正打字。命令行模式Command-line Mode是输入指令的地方。按冒号:触发比如:w保存、:q退出、/搜索。这个模式有点像在编辑器里留了一个命令行终端。理解了这三种模式前面那些“按 i 没用”“按 :wq 没反应”的问题就自然清楚了。1.2 一半快捷键都能用“动词范围”推出来Vim 的命令设计是有规律的记住规律以后大部分快捷键根本不需要死记硬背。它的核心是“动词 范围”。动词就是你想对这个文本做什么范围就是作用在多少文本上。比如d是删除、y是复制、c是修改而w是一个单词、$是行尾、^是行首、gg是整个文件。把两者组合起来dw删除从光标到下一个单词开头的部分。d$删除从光标到行尾。yy复制当前整行这里动词和对象的写法有点特殊。y$复制从光标到行尾。c$删除从光标到行尾并进入插入模式等效于“修改到行尾”。我一开始也是靠这个规律“推”出来的。先记住几个动词再记住几个范围遇见没见过的组合也能八九不离十猜中这个思路比拿着速查表硬背高效太多。1.3 数字前缀一次操作管多少对象另一个让 Vim 操作变强的设计是数字前缀。在命令前加一个数字表示重复执行多少次。3w向右跳过三个单词。5j向下移动五行。3dd删除三行。2yy复制两行。5x删除五个字符。这个设计让命令从“一次操作一个”变成“一次操作一批”。需要连续删十行时没人会按十遍dd都在数一下10dd。数字前缀也可以和上面说的“动词范围”叠加比如d3w删除三个单词。理解了这两条规律后面所有快捷键都像是在玩搭积木。2. 打开、保存、退出这几个命令值得永生记住2.1 打开文件的最常用姿势Vim 打开文件最直觉的方式就是vim 文件名。打开之后如果发现当前目录不对也可以用:e 文件名直接修改当前缓冲区的文件路径。注意:e后面可以写相对路径也可以写绝对路径。如果一口气要打开多个文件可以这样vim file1.txt file2.txt默认只会显示第一个文件。切换文件用:next或:n回退用:prev或:N查看打开了哪些文件用:files。不过这段逻辑对新手来说有点绕我更推荐在单个文件里用分屏去切后面会专门讲。打开文件时还有几个实用案例vim 10 file.txt是打开文件并直接跳到第 10 行vim /pattern file.txt是打开文件并直接定位到第一个匹配 pattern 的位置。vim -r file.txt则用于从交换文件恢复上次未保存的内容这个在文件异常退出时非常救命。2.2 保存和退出的全场景答案保存退出是新手提问率最高的点。最稳妥的命令是三键组合:w保存:q退出连起来就是:wq保存并退出。还有一些变体建议按场景选择场景命令含义保存但不退出:w写磁盘退出但不保存:q!强制退出放弃修改保存并退出:wq最常用保存并退出简写:x和:wq效果类似保存对所有文件:wall多缓冲区时全部保存退出所有文件:qall或:qa!多文件时用到除了命令行模式普通模式下还有一个快捷键组合ZZ。按 ESC 回到普通模式后直接按大写的Z两次效果等同于:wq。这个快捷键知道的人少但用起来极快。同理ZQ等同于:q!不保存直接退出。我把ZZ练成肌肉记忆之后几乎不再输入:wq了。2.3 sudo vim权限不够时怎么改文件服务器上经常遇到一种情况修改/etc/nginx/nginx.conf这类需要 root 权限的文件时保存的时候才提示 “Permission denied”。我早期是这样做的sudo vim /etc/nginx/nginx.conf直接以 root 身份打开文件编辑。这样做能解决问题但有两个坑一定要知道。第一个是如果已经用普通权限打开了文件又不想重来你可以在 Vim 内执行:w !sudo tee %绕过权限保存但这对新手来说语法不太直观更稳妥的还是直接sudo vim打开。第二个是使用sudo vim时会加载 root 用户的配置不是你平时设置过的.vimrc所以出现界面、缩进、快捷键和你预期不一致是正常的。更安全的替代品其实是sudoedit或sudo -e。它的工作机制是把你需要编辑的文件复制一份到临时位置你用普通用户身份调用自己的 Vim 配置保存后系统自动写回原文件。这既避免了 root 配置差异的问题也在一定程度上更符合安全原则。如果你经常要改系统配置文件建议把sudoedit设为默认习惯而不是一直sudo vim。2.4 界面卡住的快速恢复办法新手最容易慌的是按了某些键之后界面“卡死”。大多数情况下不是死了而是你停在某个模式里不知道怎么回普通模式。按了CtrlS终端进入“冻结输出”状态按CtrlQ恢复。按了CtrlZVim 整体挂起到后台终端会回到 shell。执行fg回到 Vim或者直接jobs查看挂起任务。按了:之后命令怎么也消不掉按Esc回到普通模式继续按u撤销误操作。看:help手册出不来了普通模式下按q退出帮助窗口或者用:q。这些不是 Vim 的 bug而是它把终端控制键也接管了。记住“按 Esc 先回普通模式”这一条能挡住 90% 的卡死问题。3. 光标移动从 h 到 G把键盘变成鼠标3.1 hjkl 和词级跳跃摆脱方向键既然要练 Vim方向键应该尽早放弃。默认的方向键是h左、j下、k上、l右。刚开始非常不习惯但坚持一周之后你会发现手不离主键盘区的移动速度远超方向键。真正拉开效率差距的是“词级跳转”w跳到下一个单词开头。b回到上一个单词开头。e跳到当前或下一个单词结尾。W和B按空白符分隔的大词跳转效果类似但范围更大。读代码时最常用的操作其实是按w在代码的 token 之间跳跃而不是一个字符一个字符地挪。当你发现自己花几秒钟都挪不到想要的单词时就该记住5w或者3j这样的数字前缀组合。3.2 行内定位0、$、f/t 组合在一行内部来回折腾是最常见的需求。你把光标移到一行里的中间位置想跳到行首按0想到行尾按$。这两个是直线距离最短的跳跃。如果想去这一行中的某个特定字符可以用f和t系列f字符向后移动到下一个指定字符上。比如fx移动到下一个字母 x。t字符向后移动但停在字符前一位。比如t;停在分号前非常适合紧接着做修改。F和T向前查找版本。配合分号;和逗号,能在同方向继续查找下一个匹配或返回上一个匹配。举个实际例子你看到一行代码const int num 100;光标在行首想删掉后面那个数字。你可以f跳到等号然后d$删除到行尾或者t停在等号前再d$。这套组合对改代码特别顺手。3.3 屏幕定位与全文跳转gg/G、Ctrlu/d跨行移动时Vim 给了好几个层级。全文头尾是最容易记住的gg跳到第一行G跳到最后一行。这也对应了很多人搜“vim 怎么到底端”的答案普通模式按大写G就能直接把光标拉到最后一行按gg能回到文件顶部。屏幕内移动有H移到屏幕最顶部那行。M移到屏幕中间那行。L移到屏幕最底部那行。Ctrlu向上滚动半屏。Ctrld向下滚动半屏。Ctrlb向上滚动一整屏。Ctrlf向下滚动一整屏。还有一个非常好用的视图调整技巧zz把当前行挪到屏幕正中间zt挪到顶部zb挪到底部。长文件的阅读体验会立刻上一个台阶。3.4 回到刚才的位置Ctrlo / Ctrli看代码的时候经常需要在几个位置之间来回跳先去这里看一眼函数定义再回到刚才修改的位置。如果全靠自己记住位置说实话很费精神。Vim 内置了“跳转列表”功能Ctrlo跳到更早的位置Ctrli跳到更新的位置相当于编辑器里的“后退/前进”。我猜测很多人搜过“vim c0”之类的东西其实大概率就是在问Ctrlo的用法只是打字的时候把 o 打成了 0。另外一个是Ctrl^它负责在当前缓冲区和上一个缓冲区之间来回切换也就是在两个文件之间迅速横跳。理解这组快捷键之后你基本不太可能再出现“改了 A 文件又忘了 B 文件位置”的情况。3.5 段落、括号和标记代码编辑离不开块和括号。普通模式下(和)跳到上一段和下一段开头。{和}跳到上一个空行和下一个空行。%在成对的括号、花括号之间来回跳光标放在任意一个括号上按%就到另一半。%虽然简单但调试时判断括号是否配对极为好用。我经常在一个很长的函数体里快速确认当前那个}是不是函数结尾。标记命令则适合跨多处反复跳转。普通模式下按m加一个小写字母比如ma就给当前位置打了一个标记 a。之后按a回到标记 a 所在的行按a回到标记 a 的精确列位置。对“改完这个函数再回头补另一个函数”的场景很实用。4. 编辑操作从单个动作到组合拳4.1 i/a/o同样是进入插入模式时机不一样进入插入模式的方式有很多具体用哪个取决于你想把光标放到哪里、以及接下来要做什么。i当前光标前插入。a当前光标后插入。I跳到当前行行首插入。A跳到当前行行尾插入。o在当前行下方新建一行并进入插入模式。O在当前行上方新建一行并进入插入模式。新手往往只记i结果每次都是插在当前光标前还得手动挪位置。其实A在行尾追加内容是最常用的操作之一o在下一行直接写新代码也是高频动作。写程序的时候要新增一行完全不需要先按i回车再按 Home 键直接o就搞定。4.2 删除、复制、粘贴d/y/p 的完整玩法先明确 Vim 的“删除”和“复制”都连接到寄存器。d删除的内容默认会存入寄存器相当于剪贴板y复制的内容也会存入同一个寄存器p把寄存器里的内容粘出来。常用的删除x删除光标所在字符。X删除光标前一个字符。dd删除当前整行。3dd删除三行。dw删除一个单词。d$删除到行尾。D等同d$。d0删除到行首。复制的常用yy复制当前整行。y$复制到行尾。yw复制一个单词。Y在 Vim 里等价于yy这点和很多人的预期不太一样留意一下。粘贴的时机选择是p在当前光标之后粘贴P在当前光标之前粘贴。删除整行后p会把整行贴到下一行删除单词后p会把单词贴到光标位置之后。还有一个容易踩的坑想删除一段内容然后粘贴另一段内容时Vim 默认会把新复制的内容覆盖到寄存器里。如果你需要保留两份内容需要单独指定寄存器比如a5yy复制五行到寄存器 a再用ap粘贴出来。这个概念明白了之后玩多段交换就轻松得多。4.3 文本对象最快修改单词/引号内内容的秘密普通模式的d、y、c配合文本对象可以做出非常精准的操作。文本对象是对文本结构的一种抽象分类w单词、s句子、p段落还有各种括号和引号里的“内”和“外”。ciw删除当前单词并进入插入模式。无论光标在单词里的哪个位置都能一下子把整个单词改掉。diw删除当前单词不进入插入模式。ci修改双引号内的全部内容。di删除双引号内的全部内容。ci(或ci)修改括号内的内容。da删除双引号以及其中的内容。这里i表示“内侧”a表示“全部包括外层”所以di(是删括号内da(是连括号一起删。这套操作刚上手会有一种“我在用魔法”的感觉尤其是ci这种命令光标在字符串任意位置一条命令就能完整改写字符串内容。我认为这是 Vim 比 GUI 编辑器效率高出一截的核心原因。4.4 撤销、反向撤销、重复上一个操作编辑操作没有后悔药是不行的。u撤销上一步操作Ctrlr反向撤销也就是重做。这两组非常基础但存在感极高。更高阶的是点号重复命令.会重复上一个大编辑操作。举个例子你想给 20 行代码的行尾加上分号可以先在第一行按A;加好分号然后回到普通模式在每一行都不需要再按A;只需要j再按.就能重复“行尾加分号”这个动作。配合Ctrlu/Ctrld翻页做重复性批量修改快得飞起。块选择模式Ctrlv也值得一提。进入块选择后框住多行的某个列区域按I输入内容再按Esc所有选中行的那个位置会同时出现相同的输入。批量加注释、批量缩进都靠它。这个模式在处理结构化文件时极其好用。5. 查找替换与跨文件跳转的实战5.1 查找字符串/、n、N 和#/*想在 Vim 里查找某个字符串最简单的方式是在普通模式按/接着输入关键字回车之后 Vim 会高亮所有匹配项。n跳到下一处匹配N跳回上一处匹配。按*可以查找当前光标所在的单词#则向回查找这在代码里查找当前变量或函数名时非常快。查找时有两个小问题要注意。第一个是高亮会一直留在屏幕上看着很烦执行:nohlsearch可以临时取消高亮。第二个是搜索默认区分大小写在/pattern\c时加\c表示不区分大小写。搜索历史也有用先按/再用上下方向键浏览之前搜过的关键词。如果你发现自己反复搜同一段内容这个历史记录能省不少时间。5.2 替换命令从一个单词到全文件Vim 的替换命令核心语法是:s/旧内容/新内容/选项。很多人第一次看到%s会不知道什么意思其实%是指整个文件s是替换。:s/foo/bar只替换当前行第一次出现的 foo。:s/foo/bar/g替换当前行所有 foog是全局。:10,20s/foo/bar/g替换第 10 到 20 行。:%s/foo/bar/g替换全文件所有 foo。:%s/foo/bar/gc每处替换前都确认一次。gc中的c是 confirm每次替换前会问你是否替换用y确认、n跳过、a全部替换非常安全。如果你不太放心做大规模替换养成加c的习惯能大幅减少误伤。替换的分隔符不一定是/也可以是#或:比如:%s#foo#bar#g。遇到路径里本身就带斜杠的内容时换分隔符比满世界加反斜杠强得多。5.3 打开文件里引用的文件路径很多人搜索“vim 打开文件里引用的文件路径”实际场景是这样的你在看一份代码或配置文件里面写着一个相对路径比如./lib/utils.js或/etc/nginx/sites-available/default光标放在这串路径上按gf可以直接打开它指向的文件。如果路径带了行号比如src/app.js:42用gF打开文件并能自动跳到第 42 行。这两个命令配合:set path**设置后还可以让find命令在子目录里递归搜索文件。实际用法是:set path** :find utils.jsfind会从当前目录和 path 目录里查找文件并打开。gf和find的存在让 Vim 在“没有鼠标点击跳转”的情况下依然能快速打开文件引用关系里的目标文件。如果你配置了 ctags 或 LSP 插件Ctrl]还能直接跳转到函数、变量定义处但那是另一个层面的进阶玩法了。5.4 缓冲区、分屏和标签页切换处理多文件时Vim 的缓冲区、窗口、标签页是三套不同的概念很多人会搞混。简单区分一下缓冲区是内存里的文件副本窗口是显示缓冲区的容器标签页是窗口的集合。缓冲区列表:ls跳转用:b1、:b2按编号或者:bn、:bp前后切换。分屏:vsp右分屏:split上下分屏或者普通模式下Ctrlw v、Ctrlw s。分屏间切换Ctrlw r等方向键移动很常用。标签页:tabnew file.txt新建gt和gT前后切换标签页。在开发场景里我比较推荐分屏而不是标签页。Vim 的标签页对很多老用户来说反而利用率不高而左右分屏看“文件路径引用关系”或者“对照两端代码”都非常直观。分屏数量较多后Ctrlw 会均分所有窗口尺寸Ctrlw t跳到顶部窗口这些都是救急小能手。6. 让快捷键顺手从.vimrc到IDE键位迁移6.1 最值得写的.vimrc配置Vim 的默认配置对新人并不友好把下面几行写进~/.vimrc整体体验会立刻改善。set number 显示行号 set relativenumber 相对行号对跳转数字特别有感 set autoindent 自动缩进 set smartindent 智能缩进 set tabstop4 Tab 显示宽度 set shiftwidth4 缩进宽度 set expandtab 用空格代替 Tab set ignorecase 搜索时忽略大小写 set smartcase 输入大写时区分大小写 set hlsearch 搜索结果高亮 syntax on 语法高亮第一个重点是set expandtab它会让你按 Tab 时实际插入空格。很多项目规范就是空格缩进用这个能避免成员之间反复改 Tab 的破事。第二个是相对行号relativenumber打开了它之后你执行5j或10dd之前不需要数行数直接看屏幕上的数字就好这个体验非常直观。还可以自定义 leader 键映射给文件保存等高频操作设置快捷方式let mapleader nnoremap leaderw :wCR把空格键设为 leader然后空格 w就等于保存。和ZZ相比它是命令式的、可见的更适合刚接触映射的新手。6.2 Vim与IDEA/VSCode常用快捷键对照很多从 IDEA、VSCode 转过来的朋友会觉得 Vim 的快捷键“没规律”。其实把几个高频动作放一起对比会发现概念是相通的只是载体不同。动作VimIDEAVSCode保存:w或ZZCtrlSCtrlS撤销uCtrlZCtrlZ重做CtrlrCtrlShiftZCtrlY查找/CtrlF或双击 ShiftCtrlF全局搜索:grep或插件CtrlShiftFCtrlShiftF跳转行号:42CtrlGCtrlG格式化加范围CtrlAltLShiftAltF注释gcc或插件Ctrl/Ctrl/这张表不是要求你两边都背而是在说明Vim 的每个“动词”其实都能在其它编辑器里找到对应物。真正要练的是肌肉记忆不是把 Vim 的命令一字不差背下来。6.3 在IDE里用Vim键位时的两个细节安装 IDEA 的 IdeaVim 插件、VSCode 的 Vim 扩展之后理论上你可以把 Vim 的操作习惯搬进原来的编辑器。但有两个细节我建议注意。第一个是 Esc 键距离主键盘区太远可以映射为jj。在.vimrc或 IDE 的 Vim 设置里加一行inoremap jj Esc这样在插入模式下连续按jj就能快速回到普通模式。熟练之后手根本不用移去左上角按 Esc。第二个是 IDE 里的 Ctrl 系快捷键大量被占用比如CtrlC、CtrlV。在纯 Vim 里它们可能是剪贴板或字符操作但在 IDE 的 Vim 插件里必须考虑 IDE 本身的快捷键优先级。保留习惯没问题但别只顾着纯 Vim 的操作而把 IDE 的原生功能给丢了两套键位相互配合才是最优解。7. 收藏必备常用快捷键速查清单做一次总的归拢。下面这几张表建议直接收藏日常发现哪个卡住了再回来翻一下就好不必全部背下来。7.1 文件操作操作按键打开文件vim file保存:w退出:q保存并退出:wq或ZZ强制退出不保存:q!打开文件并定位行vim 10 file从交换文件恢复vim -r file7.2 光标移动操作按键向左/向下/向上/向右h/j/k/l下一个单词/上一个单词w/b行首/行尾0/$移动到指定字符f字符页尾/页首G/gg向下/向上半屏Ctrld/Ctrlu回退/前进历史位置Ctrlo/Ctrli在括号间跳转%7.3 编辑操作操作按键进入插入模式光标前i进入插入模式行尾A在下一行插入o删除整行/多行dd/3dd复制整行/多行yy/2yy粘贴p/P撤销/重做u/Ctrlr重复上一个操作.修改单词内/引号内ciw/ci删除单词内/引号内diw/di7.4 查找替换操作按键/命令查找字符串/关键字下一个/上一个匹配n/N查找光标处单词*当前行替换:s/foo/bar/g全文件替换:%s/foo/bar/g带确认替换:%s/foo/bar/gc打开引用路径gf或gF我自己的体会是快捷键能不能记住根本不在于背了多少张表而在于你有没有在日常操作里强制自己不用鼠标、不用方向键、不去复制粘贴。先挑五个最常犯错的场景练w跳词、G到文件尾、dd删行、u撤销、/搜索。五天之后你会发现Vim 的界面没有以前那么可怕反而像开了一个新世界的入口。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑