说实话每次有新人问我“如何快速学会vim”我都有点不知道怎么回答。因为vim这东西用“学会”这个词其实不太准确更贴切的说法是“习惯”——它是把你从鼠标和菜单的舒适区里硬拽出来逼着你的手指和思维重新建立一套肌肉记忆。很多人第一次打开vim第一反应是“这破玩意儿怎么退出”五分钟后又感叹“这编辑器怎么这么难用”。但一旦你熬过最开始那段别扭期你会发现在终端里写代码、改配置、处理服务器上的文件vim真的是效率利器。这篇文章就是给你写的一份vim编辑器快速上手指南不扯太多玄乎的理论不讲那些根本记不住的花哨命令就聚焦在最核心的“模式切换”“光标移动”“增删改查”这几件事上配合我踩过的坑和总结的小技巧帮你用最短的时间从“不知道怎么退出”变成“能在vim里流畅改代码”。不管你是刚入行的开发新手还是常年用IDE但想补上终端编辑这块短板的同学这篇都值得你花二十分钟从头到尾过一遍。1. 为什么非要学vim先聊聊它的设计逻辑1.1 打破惯性文本编辑不是只能“一直打字”大多数人从小到大用过的编辑器无论是记事本还是各种IDE的默认状态逻辑都非常一致你把光标移动到某个位置然后敲键盘字符就出现在光标处屏幕上始终有一个可以输入的状态。这种“所见即所得”的直觉当然很好但它忽略了一件事——在编辑过程中更多时候我们不是在“打字”而是在“移动”和“选择”。举个例子你想把当前这行代码里的某个变量名改掉用普通编辑器你的操作路径是右手离开键盘去摸鼠标拖动鼠标选中那个单词点一下把它删掉然后重新输入。哪怕你用快捷键比如IDE里默认的CtrlD逐词选择总归避免不了“要在编辑状态里选中内容”这个动作。但在vim里你几乎不需要进入输入状态就能完成大部分这类操作移动光标、选中单词、跳转行首行尾、复制粘贴、删除整行这些动作全部在“普通模式”下完成。只有在真正需要输入字符的时候你才切到“插入模式”。这个设计初看反直觉但你反过来想一想键盘上几十个按键如果只在输入字符时才有意义那大部分时间你的手指只用在“光标键”和“编辑键”上效率其实被浪费了。vim把普通模式下的所有按键都变成了“指令”等于把整个键盘都武装了起来。你想想一台钢琴如果所有琴键按下去都只发出同一个音那它还有什么存在的意义vim的哲学就是这个——让每一个键都对应一个动作这才是键盘操作的完全体。1.2 vim能帮你解决什么问题说得具体一点学vim能给你带来三个立竿见影的好处。第一个也是最大的好处在服务器上改文件你永远绕不开它。你不管用哪家云服务器只要是Linux系统终端里最常见的编辑器就是vim和它的前身vi。你装完系统要改网络配置、要调nginx、要写crontab打开文件的一瞬间你就是面对着一个只有键盘的界面。这时候你说“我平时用惯了图形化界面”对不起没有图形化界面给你用。哪怕你只是临时登录服务器看日志也躲不开要么用less要么用vim这个宿命。第二个好处纯键盘操作带来的专注感。你用IDE的时候手总要在键盘和鼠标之间来回切换有时还要去摸触控板这些动作看似不起眼但对心流状态的破坏一点都不小。vim把“选中、移动、编辑”全部收回到键盘上你的手不需要离开键盘你的视线也不需要离开代码。一旦你习惯了这种流再切回去用鼠标反而会觉得哪里不对。第三个好处可定制性极其变态。vim的配置化程度高到它可以完全长成你个人的形状——键位映射、自动化命令、插件体系甚至你的整个编辑器都可以用一份文本文件来描述。这意味着你在自己电脑上配置好的vim环境拿到服务器上也能近乎一样地用起来不依赖任何图形化的安装包。这一点对常年和各种环境打交道的人来说简直是幸福感来源。2. 快速上手核心操作把vim当遥控器而不是记事本2.1 先搞清楚三种模式别急着打字vim最大的门槛就是“模式”这个概念。如果不理解模式你会觉得vim像个神经病按一下i突然能打字了按一下Esc又打不了字了上下左右键又能移动光标了但home、end键有时候又不好使。其实这背后就三件事。普通模式vim启动后默认就在这个模式它定位就是“发出指令的遥控器”。此时你按下的每个字母都代表一个操作比如h代表左移、j代表下移、x代表删除当前字符、dd代表删除整行。在这个模式下你可以自由移动光标、删除内容、复制粘贴、执行操作指令但你没法往文件里插入新字符。插入模式这就是通常意义上的“输入文字”模式和普通编辑器一样你按任何键字符都会落到文件里。进入方式很简单i是在光标前插入a是在光标后插入o是在当前行下方新建一行进入插入O是在当前行上方新建一行插入。退出插入模式的方式很统一按Esc回到普通模式。这个切换习惯真的很重要——一个成熟的vim使用者普通模式才是常态插入模式只是“临时进来写字符”。命令模式按一下冒号:进入这个模式下你可以输入操作指令比如:w保存、:q退出、:wq保存并退出、:%s/foo/bar/g全局替换。其实还可以用/直接进入搜索输入关键词回车后跳转。理解这三种模式之后你再看网上那些vim快捷键表就不会觉得它们“乱成一团”了因为它们本身就是分模式整理出来的。我的建议是你先在脑子里固化一句话——普通模式操作、插入模式写字、命令模式发指令。2.2 光标移动先扔掉方向键和鼠标光标移动是新手接触vim的第一道坎因为你会发现方向键也能移动home、end也能用甚至PageUp、PageDown也能翻页。但注意这些是苹果手机刚切安卓时那种“看起来能用但并不是最优解”的交互。vim真正的高效移动方式是用h、j、k、l这四个键对应左、下、上、右。为什么不用方向键不是因为装酷而是效率考量你的手指不用从键盘主键区移开。你把右手食指放在j上中指放在k上无名指放在l上食指稍微往回一够就是h。你想想如果每次移动光标你都要把右手从主键区挪到方向键区再挪回来一天写代码下来这无形中浪费的移动距离相当可观。另外几个高频移动命令可以连着记0跳到行首$跳到行尾注意shift加4那个键不要和$符号混了^跳到行首第一个非空白字符gg跳到文件第一行G跳到文件最后一行w跳到下一个单词开头b回退一个单词开头e跳到本单词末尾这些配合起来你在一个几百行的文件里定位任意代码块几乎就是几下按键的事。比如我要跳到一个文件的第128行我可以直接按128G瞬间直达。我在刚上手的时候死活适应不了hjkl总觉得方向键更直觉。后来我把方向键从肌肉记忆里强制剔除直接在终端里关了方向键的映射逼自己用了三天到第二天基本就能条件反射了。怎么说呢这个过程有点像学打字时的指法练习一开始慢得想掀桌但一旦形成肌肉记忆回不去了。2.3 增删改查核心编辑动作集成现在进入正题教你怎么在vim里做实际的编辑操作。我按“删、改、复制、粘贴、撤销、查找、替换”这个顺序来讲把这些组合起来你日常80%的编辑工作都能覆盖。删除操作x删除光标所在位置的单个字符相当于Delete键dw删除从光标位置到下一个单词开头的字符d$删除从光标位置到行尾dd删除整行这是最常用的d3d或者3dd删除光标所在行及下面共三行注意d本身就是一个“动词”意思是删除它后面可以跟一个“动作”来指明删除范围比如w代表单词、$代表行尾。这个组合逻辑如果你理解了后面所有命令都能套用。修改操作r替换光标所在字符不用进入插入模式cw把光标到单词结尾的内容删掉并进入插入模式方便你重新打cc把整行删掉并进入插入模式另起一行写s删除当前字符并进入插入模式i、a、o见上面的插入方式复制粘贴yy复制当前行p在光标所在行的下方粘贴P在光标所在行的上方粘贴y$复制从光标位置到行尾的内容在使用p粘贴之前你要先明确一件事vim是没有“剪贴板”这个概念的它用的是寄存器register。你可以把它简单理解为一堆编号的剪贴板。默认的寄存器就是你常态复制的目的地而系统剪贴板寄存器才是和操作系统剪贴板互通的那个。所以如果你在vim里复制了内容想粘贴到浏览器里直接按p是粘不出去的。你得先确认你的vim支持系统剪贴板然后在选中内容后按y粘贴的时候用p。同样地想从浏览器把内容粘进vim也需要用p而不是p。这个细节我当年踩得特别狠一度以为我的vim粘贴功能坏了其实是没搞清楚寄存器这回事。撤销u撤销最后一次修改Ctrlr重做反撤销.重复上一次修改这个属于进阶一点的效率妙招但值得记下来查找/foo往下搜索单词foo?foo往上搜索n跳转到下一个匹配项N跳回上一个搜索的时候高亮会一直留着想去掉高亮的话输入:nohlsearch即可。如果你嫌麻烦可以在vimrc里配置一个快捷键一键去高亮这个后面讲配置的时候再说。替换替换有两种级别。先看简单的s/old/new/把光标这一行的第一个old替换成news/old/new/g把光标这一行的所有old替换成new%s/old/new/g把整个文件的old全部替换成new%s/old/new/gc替换前逐处确认这个百分号%代表整个文件g代表全局替换一行的所有匹配项c代表确认confirm。我们经常要全局替换某个变量名用%s/old/new/g就能一键完成。要是你没写gvim只替换每行的第一个匹配很容易留下残留所以我建议你日常全局替换养成带g的习惯。2.4 初学者第一周怎么练前面讲了这么多命令贴给你看只是第一层工夫更关键的是你怎么练。我建议你按阶段来第一周专门练移动和删除第二周练搜索替换和插入模式的切换第三周开始结合实际代码练习。第一周练移动的时候不用刻意记命令就是打开一个长文件反复从文件头往文件尾跳用gg回到第一行用G跳到最后一行用10G跳指定行用0、$跳行首行尾用w、b跳单词。当你发现这些移动操作已经“不经过脑袋”了说明你的肌肉记忆开始形成。第二周练编辑的时候建议把dd、yy、p、u这几个命令强行绑进手指。找一个普通的代码文件故意乱删几行然后复制、粘贴、撤销反反复复练这些动作。你甚至可以给自己定一个小目标某个文件的修改全部用vim完成不许回IDE。第三周开始你就可以直接用vim写代码了虽然一开始会觉得每打一个字符都要想一下“现在是什么模式”但别气馁因为这个过程每个人都要经历。我认识很多同事都是一次性憋着两周不管多难受都坚持用vim两周之后基本就能正常写代码了一个月以后就开始嫌弃IDE默认编辑器难用了。3. 深入核心从模式意识到配置vimrc的实战之路3.1 模式意识的养成少按Esc多用Ctrl组合新手学vim最容易陷入的坏毛病是“动不动就按Esc”。很多人切到插入模式写完几个字之后本能地狂按Esc然后再切回插入模式。这其实是个非常低效的习惯。vim早期设计的时候担心大部分人对Esc键的位置感到别扭于是提供了很多替代方案。最经典的就是Ctrl[效果和Esc一样但手指不用从主键区跑到键盘最左上角。另外在插入模式下你其实可以直接用Ctrlw删除上一个单词、Ctrlu删除行首到光标的字符完全不需要退出插入模式去处理。真正高效的vim使用者对普通模式的定义是“默认状态”而不是“需要按Esc回去的状态”。你在设计一个操作的时候脑子里的思路应该是光标移过去普通模式→ 进入插入模式写字插入模式 → Esc切回普通模式 → 再移动。这个节奏感是vim效率的精髓。3.2 快速配置让vim符合你的直觉默认的vim其实挺“素”的没有行号、没有语法高亮、缩进不友好这跟现代编辑器比确实拉胯。但vim强就强在它可以通过配置把它变得好用。你只需要建一个配置文件就可以了Linux和Mac下一般在用户主目录名为.vimrcWindows下是_vimrc或者在vim安装目录下。以我的经验一份能让你舒服写代码的vimrc至少要包含下面这些基础设置。你不用全盘照抄但可以先看懂每一条是干嘛的按需调整。 基础设置 set number 显示行号 set relativenumber 显示相对行号配合移动命令效率爆炸 set tabstop4 tab显示为4个空格宽度 set shiftwidth4 自动缩进为4个空格 set expandtab 用空格代替tab set autoindent 自动缩进 set smartindent 智能缩进 搜索设置 set ignorecase 搜索忽略大小写 set smartcase 如果搜索词中含大写字母则区分大小写 set hlsearch 搜索结果高亮 set incsearch 搜索时即输即搜 界面体验 set showcmd 显示输入的命令 set showmatch 显示匹配的括号 set cursorline 高亮当前行 syntax on 语法高亮 编码 set encodingutf-8 set fileencodingsutf-8,gbk,gb2312这里边我特别想说说relativenumber这个选项。相对行号是以当前光标所在行为基准把上方和下行的行号分别显示成离你所在行有多远。比如当前行是第50行它的上一行显示1上上行显示2下面几行同理。这有什么用配合移动命令你能直观地看到“我要往上走3行按3k”不用心算绝对行号这个对于高频跳行操作非常有用。有些人不习惯相对行号我更推荐两个同时开当前行显示绝对行号周围行显示相对行号这就是set number和set relativenumber同时生效的效果。另外再提一个新手最容易忽略的配置项set mousea开启鼠标支持。没错vim可以支持鼠标的——点选、滚动、拖拽都行。有些人觉得vim就不该用鼠标但我觉得对新人来说前期开着鼠标可以降低挫败感。等你的键盘操作越来越顺了自然就不用鼠标了到时再关掉也不迟。3.3 键位映射把高频操作变成一键vimrc的另一个妙处是可以重新映射键位。默认的vim操作虽然已经很高效但有些场景还是能优化。比如我强烈建议你设置一下“leader键”这个键相当于你的自定义快捷键前缀。我的配置里就把空格键设成了leader键然后做了一堆映射let mapleader nnoremap leaderw :wCR 快速保存 nnoremap leaderq :qCR 快速退出 nnoremap leaderh :nohlsearchCR 取消高亮 nnoremap leadert :terminalCR 打开内置终端这样我按空格加w就保存空格加q就退出空格加h去高亮空格加t开终端。“nnoremap”里边的n代表普通模式normal、nore代表非递归映射不映射自身导致递归所以它只在普通模式下生效。个人用下来的体会是至少把“保存”和“取消搜索高亮”这两个操作映射掉能明显提升体验。天天输:w和:nohlsearch太烦了绑定成一个键之后舒服得不是一点半点。3.4 插件体系不要沉迷于折腾插件vim的插件生态是它长寿的主要原因之一。你几乎可以把它变成任何语言IDE的形态。但这里我给你的忠告是新人初期不需要搞插件。为什么因为插件本身也是学习负担而且如果你对vim的基本操作和模式还没形成肌肉记忆装再多插件也体验不到真实效率反而被各种依赖和报错折磨到心累。真要装我建议等到你用原生vim写了两三周代码之后再考虑引入三样东西一是插件管理器一个插件管理工具帮你安装和更新插件二是文件树浏览插件类似IDE侧边栏三是模糊查找插件在项目内快速跳转文件。我倒是可以把一份相对稳妥的插件配置示例放出来给已经有一定基础的读者参考 示例使用插件管理工具前先把它装好 插件的安装命令打开vim后输入 :PlugInstall call plug#begin(~/.vim/plugged) Plug preservim/nerdtree 文件树 Plug junegunn/fzf.vim 模糊查找文件 call plug#end() 自定义快捷键 nnoremap leadern :NERDTreeToggleCR nnoremap leaderf :FilesCR这里只是个例子具体插件名你可以根据需要去查。但我必须提醒所有想“重装系统式配置vim”的新手每个插件都会引入新的快捷键和配置项装得越多学习成本越高。我见过不少同学折腾了两天插件把vim搞得很漂亮到头来发现自己的编辑操作还是一塌糊涂。这就像你买了一大堆高级厨具锅碗瓢盆一应俱全但连个番茄炒蛋都做不利索意义就不大。4. 实操过程全记录我用vim完成一个配置修改的全流程为了让你更直观地感受vim实际工作流我拿“修改一个web服务器的配置文件”为例完整跑一遍。假设我现在登录了一台服务器某个站点需要修改端口号和域名配置文件路径是/etc/nginx/sites-available/demo。第一步打开文件vim /etc/nginx/sites-available/demo打开后我首先按:set number也可以用快捷键提前配置好看一眼行号分布。假设我已知要改的域名在文件中部我就直接按:128回车会跳转到第128行。第二步快速定位需要修改的位置我先在普通模式下用/huawei搜索一个目标关键词我这里就随便举个例子啦实际按你要搜的词来找到后按n一直跳到下一个匹配直到光标落在要改的地方。第三步修改配置项如果我要把listen 80改成listen 8080我就把光标移到80前按r替换单个字符然后输入8再输入0这里一个字符替换一次。或者更快捷按cw直接删除80这两个字符并进入插入模式输入新的数字再按Esc退出。改完光标直接回到普通模式这个体验相当顺滑。第四步把多行内容调到别的位置如果我要调整配置块顺序比如把server块从当前的位置挪到文件结尾我可以先把光标移到这行的行首按dd删除整行它会自动存到寄存器里。然后G跳到文件尾部按p粘贴出来。整个搬移操作不用鼠标大概三秒钟完成。第五步全局替换如果这个配置文件中旧的域名在很多地方出现过我要一次性全改成新的。输入:%s/old_domain.com/new_domain.com/g按下回车后vim会告诉你替换了多少行。如果我希望每处替换前确认一下我会在末尾加c这样按y确认、按n跳过看起来还挺有掌控感的。第六步保存并退出按下Esc确保回到普通模式输入:wq回车。此时文件已经保存。如果我不想保存就退出输入:q!。另外新手的常见情况是按了两下Esc然后随手乱输指令结果屏幕上出现了一堆莫名其妙的:开头的命令这种情况其实不用慌按u一直撤销你的误操作就行文件内容不会凭空消失的。整趟流程走下来你会发现大多数操作都在普通模式下完成插入模式使用频率反而不高。这也是我给新手最重要的建议把你的默认心态放在普通模式而不是插入模式这样你的操作才会逐步靠近vim的设计哲学。在我个人体验里把多个命令串联成“宏”操作也就是record宏按q开始录制按q结束再按q回放能进一步提速但这个对新手来说有点高级了。你可以等基本的操作都熟练后再回来研究录制宏绝对能省下大把重复操作的时间。5. 常见问题与排查技巧实录老鸟踩过的坑全清单5.1 新手最常见的五个问题光顾着讲命令和配置不把容易翻车的地方好好捋一捋你实操时难免会卡壳。这里我把这些年在网上和实际带新人过程中遇到的高频问题整理成速查表你遇到对应症状直接来捞方案就行。问题现象原因分析解决方法按Esc没反应切不回普通模式按键粘连或终端把Esc吃掉了按Ctrl[替代Esc检查终端设置按方向键出现ABCD终端处于普通模式方向键被当成字符输入确认当前模式和终端类型输入set nocp无法从vim复制到外部程序寄存器没使用系统剪贴板复制用y粘贴用p确保vim支持剪贴板粘贴代码缩进全乱了vim自动缩进和代码粘贴互相打架进入插入模式前先:set paste粘贴完:set nopaste退格键删不掉缩进空格配置缺失或expandtab设置问题检查backspace设置、expandtab设置必要时set backspaceindent,eol,start5.2 几个关键坑点的深层解读“方向键变成ABCD”这个问题这个症状其实很经典通常是因为你用某个终端模拟器在非图形化界面里连接Linux服务器时vim检测不到终端类型进入了某种兼容模式。这时候方向键发出的转义序列没有被正确识别于是表现为按下方向键以后光标不动倒是冒出了A、B、C、D之类的字符。解决方法是先确认终端类型设置正确:set termxterm-256color或者直接改vimrc强制set nocompatible。不过新手其实不用太纠结这个因为现在主流的终端工具和SSH客户端很少会遇到真遇到的话按上表的方法处理即可。粘贴代码乱缩进的问题这个几乎每个新手都会经历。你在浏览器里复制了一段格式化好的代码切进vim的插入模式粘贴结果整个代码变成阶梯状缩进一层套一层完全没法看。原因是vim的自动缩进在你粘贴时也在发挥作用它会把粘贴的每一行再按照自己的语法规则缩进一次导致叠加。我曾经也是被这个问题搞得焦头烂额后来找到了标准解法粘贴前在普通模式下输入:set paste粘贴后再输入:set nopaste。这会让vim关闭自动缩进、自动格式化这些“智能行为”把粘贴的内容原样放进来。如果你嫌每次切来切去麻烦还可以在vimrc里配置一个一键切换粘贴模式的映射比如nnoremap leaderp :set paste! paste?CR这样按一下空格加p就切换一次粘贴模式并且提示当前状态。这个小技巧真的很实用用多了就会觉得vim其实也挺人性化的。5.3 高级排查vim假死或无响应的处理比普通错误更让人头大的是“vim假死”。常见情况是你在普通模式下按了CtrlS结果整个终端像卡住了一样敲啥都没反应。这个现象不是因为vim出bug而是终端的软件流控把输出暂停了暂停标志就是CtrlS。解决办法很简单按CtrlQ恢复。这个小知识是我早年踩过的坑当时我以为服务器挂了差点重启整台机器后来才知道是流控问题。还有一种假死是你无意中开启了某个录制宏比如按了q又按了一个其他键然后vim开始录制你的操作界面看起来和普通模式一样但输入的内容都被记录而不是被执行。这时候你在底部状态栏会看到recording提示。按q停止录制即可。如果不知道自己在录制宏确实很难排查所以你看到状态栏出现“recording”字样时不要慌就是按q。5.4 对vim的学习困惑和学习路径建议在某些技术社区里vim时常被渲染成一种“高手才配拥有”的工具导致很多新手心里发怵总觉得要是不会几十个高大上的命令就不配用vim。我的看法恰恰相反vim是给“想把手里的工具用到极致的人”准备的它不应该成为你的负担而应该成为你的效率放大器。你完全不需要把所有命令都背下来只需要从“移动光标”和“增删改查”这一小撮核心命令开始用起来再慢慢扩展。我自己的一个感受是vim的学习曲线并不是一条陡坡而是有几段平台期的。一开始你可能两三天就能上手基础操作但真正进入效率提升的快车道大约在用了两三周以后。那时候你看到一个单词想去改它会很自然地按cw而不是切鼠标看到一个函数要跳过去会很自然地用搜索或跳行指令。如果你能坚持一个月我保证你回头再看自己的IDE默认编辑器会感觉像是回到石器时代。如果你准备认真学下去我建议你把vim帮助系统当成最好的教材。输入:help tutor可以打开交互式教程那是一个半小时就能走完的新手课程完成之后基础操作基本就通了。再往后:help user-manual是更系统的官方文档。这些东西免费、全面、随时可查比网上任何付费课程都靠谱。结尾最后再分享一点我的真实体会我在开局时说过学vim最关键的是“熬过别扭期”。现在回头想促使我当年真正坚持下来的倒不是某个“必学理由”而是有一次我在服务器上排查问题需要连续改好几个小配置文件周围没有图形界面也没有IDE我硬着头皮用vi把问题处理完了。那天之后我突然意识到工具这东西你越是主动去掌控它你越能在关键时刻不慌张。vim本质上就是这么一个工具——它的命令谁都可以学会但真正拉开差距的是那种“沉浸其中、信手拈来”的状态。如果你现在正处在“刚打开vim想退出”的阶段请不要急着关掉这篇教程。你只需要做三件事第一记住i进插入模式、Esc回普通模式、:wq保存退出第二把hjkl当成你的方向键练上一天第三改掉遇事就往鼠标那边伸手的习惯。这三步撑过去你就已经摸到vim的门了。剩下的路完全可以沿着自己的需求往前走遇到什么查什么才是学习的常态。