VIM生存指南

清酒 7 分钟 102 次读过

第一次进vim,我卡在里面出不来

有这么一个场景,你在服务器上改某个配置文件,敲完`vim nginx.conf回车,程序页面跳了出来你一顿操作,但是屏幕上什么都没有出现。

想要退出,输了个q没有任何反应。再敲:q,还是没动静。最后只能关掉整个终端然后重新打开,然后发现配置文件没有任何更改。

这种情况可能不是卡了,也有可能是那些字母被vim当做命令给执行了。

这一幕很多人都经历过,这一篇我就把vim讲清楚,让你下次不会再困在里面。

一、vim用的懵懵的,主要原因是在模式

vim看起来好像和记事本差不多,但是它们最大的区别就在于vim是有模式的。同一个按键,在不同的模式下的功能是不一样的。

总共有三层:

模式 怎么进 按键的意义
命令模式 打开vim默认 按键此时是命令
编辑模式 I、i、a、A 这些才是输入内容
末行模式 命令模式下敲: 保存、退出、替换这些操作

这时候你可能就会发蒙:“一个编辑器怎么搞的这么麻烦?太反人类了吧”。因为这东西的前身vi都快是50年前的产物了,那个年代的输入键盘连方向键都没有,也没鼠标,大部分的操作都是靠字母键操作。

为什么要学它?

因为远程连接一台Linux服务器,特别是最小化的安装系统,是没有图形界面的,能用的编辑器一般只有vim,不用又不行。

很多人的困惑都是在于在使用vim时不知道自己模式,判断其实不难,就在窗口的左下角

image

显示--插入--即代表进入了编辑模式,

image

光标跑到了最下方冒出来,就是末行模式,

image 底部的标记没有任何字,就是命令模式。

二、搞定进去再学会出来

编辑模式可以通过四个键进入,它们的区别就是光标出现在哪:

i在光标当前位置前插入,I跳到行首第一个非空格字符前插入,a在光标当前位置之后插入,A跳到行尾插入。

太多了记不住?那先用i把这个是最常用的。等想要在行末加内容时就能想起来A有多好用了。

从编辑模式退回命令模式很简单,点击键盘上的ESC就好。

给个小栗子体会一下差别,可以把光标停放在一行文字的正中间

image

按i键,再输个6

image

新内容就会出现在光标的左边,同样,要是按a的话,新内容就会在光标的右侧生成;按A的话不管光标在哪里,就直接跳到了这行的最末尾。

退出的五个指令都是在末行模式里敲

末行退出指令

:w #保存

:q #退出

:wq #保存并退出

:q! #不保存,强制退出

:wq! #强制保存并退出,改只读文件时使用

这里有一个坑。文件改过但没保存时直接敲:q,vim会甩出一句E37: No write since last change,然后不放你走。想走有两条路径,:qw存完再走,或者:q!放弃修改硬走。

三、光标怎么跑

在命令模式下,移动光标不用方向键其实也特别利索:

操作 按键
到行首 0或 Home
到行尾 $或 End
到文件第一行 gg(这个最好记了)
到文件最后一行 G
跳到第n行 n gg,比如20gg
向下移动n行 数字+回车

改配置文件时最为常用的就是gg和G,一个去头一个去尾。

我还得说一句vim有个标志性操作:

控制光标上下左右

键盘上的h、j、k、l这四个按键分别代表:左、下、上、右。熟练后要是哪天键盘上的方向键坏了,或者日常使用,输入的时候还是游刃有余。

四、复制、删除、撤销

操作 按键
复制当前行 yy
复制n行 n yy,比如3yy
粘贴到当前行的下一行 p
删除当前行 dd
删除n行 n dd,比如3dd
撤销上一步 u

上面的几个组合键dd值得单独说,在使用dd后删的内容会存进vim的缓冲区,紧接着按p又能把它粘贴回来。所以dd加p其实就相当于一次剪切加粘贴,要是你想挪一行代码还是特别顺手的。

要是你有更小的内容要删,这个内容在行里面你可以这样做

删除更小的内容

删掉光标所在的单个字符用x,从光标一路删到行尾用d。这两个加上dd一起配合着用,删除的场景基本就全部包含了

五、查找和替换,全是干货

查找在命令模式的功能:

/关键字从光标位置向下,?关键词向上找,找到以后可以用n跳到下一个或者用N跳回到上一个。

替换在末行模式的功能:

替换的指令

:%s/A/B/g # 全文范围内,把所有的A换成B

:2,5s/A/B/g # 只在第2道第5行之间替换

末尾的那个g是代表一行里所有匹配的都换,把它去掉,就只替换每一行找到的第一个。这个细节很多人都没有分清楚。

再往前加个c,写成:%S/A/B/gc,vim会在每一处匹配前停下来问你一句`replace with B (y/n/a/q/l) 让你一个个确认。批量替换的时候,这个开关非常好用。

不确定替换会不会出错?那就用gc慢慢过一遍。

查找功能还有一个小细节,它是默认区分大小写的,也就是说/error是找不到Error的。你想要临时忽略的话就在关键词后面加\c,写成/error\c,三种写法都能命中。

六、改到一半突然后悔了

完了,现在手滑改错了咋办?两个方法。

刚改错就用u撤销,按几次就撤几步。

更严重的情况,改得面目全非想整个重来,用:e!强制重新载入文件,它会丢掉这次打开后的全部修改,把文件恢复成上次保存的样子。这一招比:q!快得多。

七、行号怎么打开

如下:

:set nu # 显示行号

:set nonu #取消行号

这个可以临时看一眼,在vim直接用就行,如果你想要它永久生效的话,就可以把set nu写进家目录下的.vimrc文件里,下次打开自动带行号。

为什么?

.vimrc是什么

.vimrc是vim的配置文件,就放在家目录(home),文件如果不存在就自己建一个。除了行号,常用的还有set hlsearch让查找结果来高亮显示,改完后直接保存,重新打开vim即可生效

还有个省事的方法,打开文件时直接去某一行:vim +20 nginx.conf,一进去就会停在20行,比用20gg好用。

八、指令速查表

场景 操作
开始输入文字 i,写完按ESC
退出保存 :wq
改崩了想重来 :q!
跳到文件开头 gg
跳到文件结尾 G
跳到第n行 n gg
复制一行 yy,粘贴用p
删一行 dd
撤销 u
找关键词 /关键词,按n继续
全文替换 `:%s/A/B/g
显示行号 :set nu
全部重来 :e!

这就是常用的指令表,可以存下来,需要的时候回来翻一翻。

最后

对于一个新手来说,卡在vim的原因最多的就只有这一个:不知道在哪层,命令本身不多,难点是如何快速定位自身的状态。

记住一条判断顺序:想打字,先按一下i;打完字还想做其他的,就先按ESC;想要保存退出就先输入:。

卡住的时候先按一下ESC回到命令模式,大部分的问题基本都消失了。剩下的问题就交给:q!。

有牛 写于 2026.10.03