Vim编辑器核心技能:从模式化编辑到高效命令与配置实战
2026/9/7 20:29:04 网站建设 项目流程

1. 为什么这个时代你还需要认真学一次vim

1.1 编辑器与编译器:先搞清楚你手里的工具到底是什么

很多刚接触Linux的朋友,第一次听到“vim是编辑器,gcc是编译器”的时候,都会有点懵:这不都是处理代码的吗,有什么本质区别?我习惯用一句话解释:编辑器负责“写字”,编译器负责“把字变成机器能跑的东西”。你用vim打开一个C文件,在里面写printf("hello");,这个过程跟你在记事本里写下购物清单没有任何本质区别——都是在操作文本。真正把这段文字变成可执行文件,是编译器(比如gcc)的工作。

这个区分看起来简单,但特别重要,因为错误的认知会导致错误的期待。如果你把vim当成一个“写完代码自动帮你编译运行”的工具,那你打开vim的第一分钟就会失望。vim的目标很纯粹:最高效率地编辑文本。至于编译、运行、调试,那是终端里其他工具的事,vim只是提供一个入口——你完全可以不退出vim就执行shell命令、看编译结果,但那是“集成”的玩法,不是vim本身的功能。

1.2 vim到底能帮你解决什么问题

先说结论:vim解决的是**“手指不离开键盘、思路不被打断”**的文本编辑问题。你写代码的时候,最贵的资源不是键盘也不是屏幕,而是你的注意力。如果你的手每隔几秒就要从键盘挪到鼠标上去点一下、选中一段、再挪回来,你的思维流就被切断了。vim的设计目标就是让你用纯键盘完成所有操作:移动光标、选中、删除、复制、替换、跳转,全部不用碰鼠标。

这一点在服务器上表现得更极致。无论你是运维排查日志、改配置文件,还是管理远程服务器,你面对的都是一个没有图形界面的终端。这时候vim几乎是唯一的选择。你当然可以用nano,它确实更简单,但nano的功能上限太低了——处理大文件卡顿、没有强大的查找替换、没法录制宏。等你真的需要批量修改几百行配置的时候,nano会让你怀疑人生。

我再给你一个更接地气的场景:嵌入式开发。很多嵌入式工程师的日常工作流是:用vim改完代码,:wq退出,然后编译烧录。整个流程都不离开终端。如果你遇到一台老旧的服务器,或者一个没有桌面环境的系统,vim就是你最可靠的伙伴。它不挑机器、不挑网络、不挑环境,只要有一个终端,它就永远在那里等你。

1.3 谁需要认真学vim,谁可以不用学

说实话,vim的学习曲线确实有点陡,但这不代表所有人都需要啃完整个教程。我按实际情况给你分个类:

  • 运维工程师、后端开发、嵌入式开发:必须学,这是饭碗技能。你迟早要面对没有图形界面的服务器,跑不掉。
  • 日常写脚本、改配置的普通用户:学基础操作就够了。打开文件、移动光标、插入、保存退出,这五个操作能覆盖你90%的需求。
  • 前端开发、客户端开发、数据科学家:可以学,但不必强求。如果你主力IDE用得很顺手,vim可以作为一种“远程应急技能”来掌握,了解基础操作,遇到服务器环境不至于抓瞎。

我很反感那种“不会vim就不配做程序员”的说法。工具是为人服务的,不是用来制造优越感的。但我也必须诚实地说:vim值得每个人至少认真学一次,因为它里面藏着很多关于“如何设计高效工具”的底层逻辑。哪怕你最后不用它,学习vim的过程也能让你重新思考自己每天都在用的编辑器到底好在哪里、差在哪里。

2. 打破“怎么退出vim”的魔咒:先搞懂模式化编辑

2.1 为什么新手都会卡在退出这一步

网络上关于vim最出名的段子就是:怎么退出vim?搜索出来的结果几千条。这个现象背后其实藏着一个核心概念——vim是模式化编辑器。什么意思?就是说,vim的同一个按键,在不同的“模式”下代表着完全不同的功能。普通文本编辑器永远是“输入模式”,你按键盘上什么键,屏幕上就打什么字。但vim不是这样的,它把“编辑文本”和“操作文本”分成了不同的状态,你在不同状态下按同一个键,结果完全不同。

新手第一次打开vim,默认处于normal模式(普通模式),这个模式下你按iao都不是打字,而是“进入插入模式”的指令;按:是“进入命令行模式”的指令;按Esc是“回到普通模式”的指令。所以新手一进vim,看到个空屏幕,按hello,发现屏幕上什么都没出现——因为h是向左移动光标,e是跳到词尾,l是向右移动光标,o是新建一行。这就非常让人抓狂了。

理解了这个设计,你就明白“怎么退出vim”的答案了:先按Esc确保回到普通模式,然后输入:q回车退出;如果有未保存的修改,就输入:q!强制不保存退出;如果要保存并退出,输入:wq回车。这三个命令能解决你99%的退出需求。剩下的1%,比如ZZ(保存退出)和ZQ(不保存退出),也值得记住,但没必要一开始就背。

2.2 vim的核心模式:一张图理清它们的关系

不画图,我用文字帮你把vim最常用的三种模式串起来:

  • 普通模式(Normal):这是vim的默认模式,也是“操作模式”。在这个模式下,你按下的键是命令:j向下、k向上、x删除当前字符、dd删除整行,诸如此类。你在这个模式里待的时间越长,说明你操作越熟练。
  • 插入模式(Insert):这就是真正“打字”的模式。按i进入,按Esc退出。进入方式不止一种:i是在当前字符前插入,a是在当前字符后插入,o是新建一行并进入插入模式,A是跳到行尾并进入插入模式。这几种方式各有适用场景,后面细说。
  • 命令行模式(Command-line):按:进入,这个模式下可以输入命令,比如:w保存、:q退出、:s/foo/bar/g替换。输入完命令后按回车执行。
  • 可视模式(Visual):按v进入,这个模式下移动光标会选中文本,类似你用鼠标拖选。按V是按行选中,按Ctrl+v是按列块选中。这个模式在做多行操作时特别好用,后面专门讲。

你现在不用急着全记住,只要脑子里有个概念:vim的键盘可以复用,同一排按键在不同模式下干不同的事。这就是它能做到“手不离键盘”的根本原因——别的编辑器需要组合键解决的功能,vim靠模式切换来解决。

2.3 第一次实操:从打开文件到保存退出的完整流程

我来带你完整走一遍vim最基础的操作流程,你照着敲一遍,立刻就能上手。

第一步,在终端里创建一个测试文件:

vim test.txt

如果你是用普通用户执行,vim会打开一个空文件;如果文件不存在,vim会新建它,你会在底部看到"test.txt" [New File]的提示。

第二步,现在你处于普通模式。按下键盘上的i键,注意观察底部状态栏出现了-- INSERT --。现在你可以正常输入文字了。随便打几行内容,比如:

hello vim this is a test

第三步,按Esc键退出插入模式,回到普通模式。然后输入:wq并回车。:w是写入(保存),q是退出,合在一起就是保存并退出。回到终端后你用cat test.txt查看,会发现刚才输入的内容已经保存了。

这个流程虽然简单,但已经涵盖了vim最核心的链路:普通模式 -> 插入模式 -> 普通模式 -> 命令行模式 -> 退出。你只要把这条链路走顺了,vim就算入门了。剩下的所有操作,本质上都是在这条链路的各个环节中增加更高效的操作方式。

2.4 实操心得:模式切换的节奏感

学vim有个很微妙的感觉,可能很少有人跟你讲:什么时候该进入插入模式、什么时候该留在普通模式,是要有节奏感的。新手最常见的误区是:一进vim就按i进入插入模式,然后就一直处在插入模式里,想移动光标只能用方向键,想删除只能用退格键。这样用vim,体验跟记事本没什么区别,甚至更糟。

正确的节奏是:在普通模式下完成所有“动作”,只在真正要输入文字的时候才进入插入模式。比如你想在“hello”后面加一句“world”:最好的做法不是按方向键挪过去,而是先用普通模式的光标移动命令(比如w跳到词尾、e跳到词尾)把光标定位好,再按a进入插入模式追加内容。这样你的左手始终停留在键盘核心区域(尤其是jklh这排键),不需要去够方向键,效率会高很多。

3. 高频命令拆解:移动、编辑、查找与替换

3.1 光标移动:在文件里“跳”而不是“挪”

vim里的光标移动命令是效率的分水岭。普通编辑器里你挪光标的方式是方向键一格一格按,或者鼠标点。vim里的做法是“跳跃式”的。

基础移动(词级)

  • w:跳到下一个单词的开头
  • e:跳到下一个单词的结尾
  • b:跳到上一个单词的开头
  • 0:跳到行首
  • $:跳到行尾

这四个命令加0$,能覆盖你在行内和词间80%的移动需求。举个真实例子:你在int myVariable = 42;这行代码的末尾,想把这行的42改成100。普通编辑器的做法是把光标一路往左挪,或者鼠标点过去。vim的做法是:按b跳到42前面,按ciw(change inner word的缩写)把42这个单词整个删除并进入插入模式,直接输入100。整个过程手都不用离开键盘核心区域,速度是肉眼可见的快。

跳转级别

  • gg:跳到文件第一行
  • G:跳到文件最后一行
  • :n:跳到第n行(比如:100就是跳到第100行)
  • Ctrl+d:向下翻半屏
  • Ctrl+u:向上翻半屏
  • Ctrl+f:向下翻一屏
  • Ctrl+b:向上翻一屏

这里我特别推荐Ctrl+dCtrl+u,翻半屏比全屏翻页的上下文保留感更好,你在阅读代码的过程中不容易“迷路”。

行内跳转

  • ^:跳到行首第一个非空字符
  • g_:跳到行尾最后一个非空字符
  • f加字符:跳到本行里下一个指定字符(比如fx跳到下一个x的位置)

你可能觉得这些命令太多了记不住。我的建议是:每周只刻意练两三个命令,练到变成肌肉记忆。比如这周我全程用wbe,不用方向键移词;下周加练0$^g_。一个月下来,你的光标移动速度会颠覆你的认知。

3.2 编辑操作:删除、复制、粘贴与撤销

编辑操作是vim里最带感的部分。很多操作动词化的设计,让你可以像说一句话那样组合命令。

删除

  • x:删除当前字符
  • dd:删除当前整行
  • dw:删除从光标到词尾
  • d$:删除从光标到行尾
  • d0:删除从光标到行首
  • 5dd:删除从当前行开始往下5行

注意d这个动词后面可以跟“动作范围”——d是delete,w是word,$是行尾,组合起来就是“删除到什么位置”。这个逻辑贯穿vim始终,非常非常重要。

复制与粘贴

  • yy:复制当前行
  • yw:复制从光标到词尾
  • p:粘贴到光标后
  • P:粘贴到光标前
  • 5yy:复制从当前行开始往下5行

你可能会问:vim里复制粘贴的选择怎么办?普通编辑器是“选中-复制-粘贴”,vim里的逻辑是“用命令直接指定要复制的内容”,不需要先选中。比如我想复制这行的第一个单词:光标移到行首(0),然后yw,就把第一个单词复制了。

撤销与重做

  • u:撤销上一步操作
  • Ctrl+r:重做(即撤销的撤销)
  • .:重复上一次修改操作(这个命令神了,后面专门讲)

有朋友会担心“vim有没有撤销的历史记录”,这里有。vim默认的撤销记录是线性的(每一步操作都记录),直到你配置了撤销文件(:set undofile),它甚至可以跨会话保留撤销历史——你关掉文件再打开,还能继续撤销。这是我建议每个vim用户都开启的配置,后面在配置章节会讲。

3.3 查找与替换:比肉眼搜索高效一百倍的方式

在长文件里找一个关键词,普通编辑器的做法是Ctrl+F搜索框。vim的做法更直接:在普通模式下按/,输入关键词回车,vim会高亮所有匹配项,然后按n跳转到下一个匹配、N跳转到上一个。全程不用碰鼠标,手指就在键盘核心区。

如果只想查找当前光标所在的单词,更快的做法是:按*直接向下搜索光标下的单词,按#向上搜索。在阅读代码时特别爽,你在一个函数名上按*,所有出现这个函数名的地方就都被高亮出来了。

替换操作是vim的绝活。普通编辑器的批量替换功能在vim里用:%s/旧文本/新文本/g实现。拆解一下:

  • %:表示整个文件范围
  • s:substitute,替换
  • 旧文本:被替换的内容
  • 新文本:替换后的内容
  • g:global,整行中所有匹配都替换,如果去掉g,每行只替换第一个匹配

如果只想替换当前行,去掉%,直接:s/foo/bar/g。如果只想替换第10行到第20行,写成:10,20s/foo/bar/g。还可以用c标志做确认替换::s/foo/bar/gc,vim会在每次替换前问你是否替换,输入y是确认、n是跳过、a是全部替换。

我实际工作中最高频的场景是:修改配置文件的IP地址。比如有个配置文件里有三处192.168.1.1要统一改成10.0.0.1,在vim里一条命令搞定:

:%s/192\.168\.1\.1/10.0.0.1/g

注意IP里的点.在vim的正则里表示“任意字符”,所以需要用\.转义。这个坑我踩过好多次,提醒你一下。如果你的场景不需要正则,只想纯文本替换,可以在命令末尾加\?不对,正确的做法是在s后面加\V

:%s/\V192.168.1.1/10.0.0.1/g

\V表示“very nomagic”,强制所有字符都按字面意思解释,不需要转义。这个技巧能让你在做纯文本替换时少掉很多头发。

3.4 可视化模式与多行操作:一次搞定多行注释和缩进

在实际工作中,多行注释、多行加前缀、批量缩进这类需求非常常见。vim的可视化模式就是专门干这个的。

按行选中(V:在普通模式下按大写V,进入可视行模式,移动jk上下选中多行。选中后:

  • d删除选中内容
  • y复制选中内容
  • >整体向右缩进
  • <整体向左缩进

这个操作在代码格式调整的时候极其好用。比如你写了一段代码发现整体多缩进了一级,进入V模式选中那几行,按<就整体退回来了。

按列块选中(Ctrl+v:这是很多人没get到的神器。在普通模式下按Ctrl+v,进入可视块模式,移动光标选定一个矩形区域。它的最强玩法是给多行加注释

  1. 光标移到第一行注释符号要插入的位置
  2. Ctrl+v进入块模式
  3. j向下选中所有需要注释的行
  4. I(大写i)进入插入模式,输入注释符(比如//#
  5. Esc,神奇的事情发生了:所有被选中的行都在你指定的位置插入了注释符

取消注释也一样:在块模式下选中注释符区域,按x直接删除选中的列块。这个技巧在我处理配置文件、批量加注释调试代码的时候,效率提升不是一点点。

还有一个跟块模式搭配的命令::norm命令。比如你想给第1行到第10行行首都加上#注释,不用进块模式,直接输入:

:1,10 norm I#

norm意思是“在这几行上执行普通模式命令”,I#就是“跳到行首并插入#符号”。这个命令可以批量执行任意普通模式操作,非常灵活。我经常用它来做批量替换前缀、批量删行尾空格之类的事情。

4. vim效率的终极秘密:组合命令与宏录制

4.1 动词加宾语:vim命令其实是一套语法

很多vim教程会教你背诵几十个命令,但真正的vim老手不会死记硬背,他们掌握的是一套语法规则。这套语法简单到令人发指:

动词(操作) + 宾语(操作对象)

动词有:

  • d:delete,删除
  • c:change,修改(删除并进入插入模式)
  • y:yank,复制
  • v:visual,选中

宾语有:

  • w:word,一个单词
  • s:sentence,一个句子
  • p:paragraph,一个段落
  • $:行尾
  • g_:行尾非空字符
  • t加字符:到某个字符之前

比如你要删除一个段落:dap(delete around paragraph),用这个命令,光标在段落里任意位置都可以一次删掉整个段落。你要修改整个句子:cis(change inner sentence),句子内容被清空并进入插入模式,直接输入新句子。

我第一次理解这个“动词+宾语”的设计时,脑子里响了一声——vim的命令不是死板的组合键,而是一种语法。学会了这套语法,你能自然组合出各种操作命令,不用再一个个查。比如你知道y是复制、t是“直到某个字符前”,那yt,的意思就是“复制从当前光标到这个逗号之前的全部内容”,一句话就表达清楚了,多酷。

4.2 数字参数与重复:一键搞定重复性操作

vim的命令前面可以加数字,表示“执行多少次”。这个设计很简单,但配合动词+宾语语法,能爆发出惊人的效率。

  • 3dd:删除3行
  • 2w:向前跳2个单词
  • 5yy:复制5行
  • 3x:删除3个字符

更高级的玩法是配合.命令。.命令在vim里表示“重复上一次修改操作”。举个例子:你想给三个不同位置的单词加上引号。操作方法:在第一个单词处按ciw然后输入"word"(或者用viw选中后按S"),完成第一次修改。之后每次把光标移到下一个单词上,按.,vim就会自动重复“把当前单词替换成带引号的版本”。修改三个单词只需要按三次.键,效率完全是另一种体验。

宏录制是重复操作的终极方案。宏就是“录制一段操作,然后多次回放”。比如你拿到一个列表,需要把每行开头加上序号:

  1. 把光标定位到第一行行首
  2. qa开始录制宏到寄存器a(q是录制命令,a是寄存器名字)
  3. I进入插入模式,输入1.,按Esc回到普通模式
  4. j移动到下一行行首(假设是0开头的行)
  5. q结束录制
  6. 现在你需要对接下来N行执行宏,把光标移到下一行,按@a回放刚才录制的宏

如果你的序号要递增,那还需要在宏里用到Ctrl+a递增数字的命令,这有点复杂,但思路是一样的:录制一次,回放无数次。我处理几百行的批量重复操作时,宏是绝对的主力,比手写脚本还省事。

4.3 实际案例:用组合命令整理一份杂乱日志

我把上面的知识串起来,给你一个实战案例。假设你拿到一份日志,每行开头有空格,你想统一去掉行首空格,并且把所有“ERROR”替换成“WARN”。在vim里:

  1. 全选所有行,去掉行首空格:

    :%s/^\s\+//

    ^\s\+的意思:行首^,一个或多个空白\s\+,替换成空。

  2. 批量替换ERROR为WARN:

    :%s/ERROR/WARN/g
  3. 如果你想单独看一下每条WARN日志的上下文,按/WARN搜索,然后按n逐个跳转。

这套操作在普通编辑器里需要:用正则批量替换两次。其实vim也就是两步。但如果你要做的更复杂——比如每行日志要截取某个字段、加上时间戳、去掉重复行——那就用宏或者norm命令。比如给每行前面加上日期前缀:

:%norm I2025-01-01

%norm的意思是“在整个文件的每一行上执行普通模式命令”,I2025-01-01就是“跳到行首并插入这段文字”。一条命令,几百行全搞定。这就是vim组合命令的威力。

5. 把vim调教成顺手的样子:配置入门与常用插件

5.1 基础配置:.vimrc里值得立刻抄走的几行

vim的配置文件在用户主目录下,叫.vimrc。没有就自己建一个。配置文件的本质就是一堆vim命令,vim启动时自动执行它们。所以你在普通模式里能敲的命令,几乎都能写进配置里。

我建议你至少设置这几项:

" 显示行号 set number " 语法高亮 syntax on " 开启相对行号,配合number一起用特别爽 set relativenumber " 用空格代替Tab,避免在不同机器上显示错位 set expandtab set tabstop=4 set shiftwidth=4 " 搜索时实时高亮 set hlsearch set incsearch " 支持鼠标(如果你实在需要的话) set mouse=a " 自动缩进 set autoindent " 设置UTF-8编码 set encoding=utf-8 " 开启持久化撤销历史 set undofile set undodir=~/.vim/undodir

其中set relativenumber这个配置你可能不熟,但它是vim老手最爱的设置之一:它会让你当前行显示绝对行号,其他行显示相对于当前行的行号。这样你想跳到“往下第7行”时,看行号直接7j,想删除“往上5行”时直接5dd,清清楚楚。

5.2 键位映射:把最常用的操作改成一次按键

如果你觉得vim的某些操作还是需要按太多键,可以在.vimrc里自定义键位映射。最经典的例子是把jj映射成Esc

inoremap jj <Esc>

这样在插入模式下,连续按jj就会退出插入模式,不用伸手去够远处的Esc键了。这个映射让很多新手对手速提升有极大帮助。另一个常见需求是把:映射到中文输入法下的全角冒号。在中文输入法状态下按:会输入全角冒号,vim不认。你可以加一行:

cnoremap : :

这样在命令行模式下,中文全角冒号会被自动转成英文冒号,防止你切输入法切到崩溃。

还有一类映射你需要知道的是<leader>键。vim里<leader>是一个自定义前缀键,默认是\,很多人喜欢改成空格键:

let mapleader=" "

然后你可以定义很多快捷操作。比如我习惯用<leader>w快速保存文件:

nnoremap <leader>w :w<CR>

<leader>q快速退出(不保存):

nnoremap <leader>q :q!<CR>

这样手指在空格键周围就能完成大部分高频操作。键位映射是vim个性化的重要组成部分,但我不建议你一开始就配一堆复杂的映射——先用原生命令练熟了,自然知道哪些操作是你需要变成快捷键的,那时再来配置更有针对性。

5.3 插件:从朴素编辑器到轻量IDE的进化

vim本身是个朴素的编辑器,但装上插件以后,它的能力可以接近一个轻量IDE。插件管理器我推荐用vim-plug,安装方式简单,插件管理也清爽。

安装vim-plug:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

然后在.vimrc里声明插件。我个人最常用的几个插件:

  • nerdtree:文件树侧边栏,方便浏览文件结构
  • ctrlp.vimfzf.vim:模糊文件搜索,输入文件名部分字符就能快速定位文件
  • vim-airline:底部状态栏美化,显示当前模式、行号列号、Git分支等
  • vim-fugitive:Git集成,支持在vim里查看diff、提交、暂存
  • coc.nvim:代码补全引擎,支持LSP,让vim拥有IDE级别的补全能力

配置示例:

call plug#begin('~/.vim/plugged') Plug 'preservim/nerdtree' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'vim-airline/vim-airline' Plug 'tpope/vim-fugitive' Plug 'neoclide/coc.nvim', {'branch': 'release'} call plug#end()

保存后,在vim里执行:PlugInstall就会安装这些插件。装完以后,打开vim你会觉得它的战斗力提升了一个数量级——但这不意味着你必须装一堆插件才能用vim。我见过很多vim大神,他们的配置文件只有十几行,用的全是原生功能。插件是“按需增补”,不是“标配”。

5.4 值得收藏的vim内置功能:分屏与终端

很多人不知道vim自己就带分屏和终端功能,根本不需要打开好几个终端窗口。

分屏

  • :split:sp:上下分屏
  • :vsplit:vsp:左右分屏
  • Ctrl+w加方向键:在分屏之间切换
  • Ctrl+wq:关闭当前分屏

分屏的好处是:你可以同时看两个文件的对比,或者一个文件的两个不同区域,极大方便了代码对比和文档参考。

内置终端:从vim 8.0开始,vim内置了一个终端模拟器,:terminal:term就可以打开。这样你在vim里就能直接执行shell命令,比如编译、运行脚本,不需要退出vim。从vim的终端模式回到普通模式,按Ctrl+\Ctrl+n;要退出终端,就正常执行exit

这些内置功能让vim的“生态闭环”非常完整:编辑、查看、编译、运行,全在一个终端窗口里完成。

6. 常见问题与排查技巧实录

6.1 “按了Esc还是退出不了插入模式”

这个问题我在公司里被问过不止十次。真相通常是:你按的不是Esc键,而是数字键盘或功能键区的某个“Esc-like”键。有些笔记本的Esc键被设计在功能键区第一排,容易误按成F1或其他键。解决办法只有两个:一是确认你按的是真正的Esc,二是把某个顺手组合映射成Esc(前面说的inoremap jj <Esc>就是从根源上解决问题)。

另一个可能的原因是:你在中文输入法状态下按Esc。有些Linux发行版的输入法会在Esc退出插入模式时不放行,或者焦点被输入法接管。此刻你先切回英文输入法(通常是Shift键切换中英文),再按Esc。这里有个土办法:在vim里按Ctrl+[其实也等同于Esc,这个组合键不受输入法影响,可以作为备选方案。

6.2 用vim编辑文件时方向键变成了“ABCD”

这个现象非常经典。原因是:终端没有正确识别方向键的转义序列,或者vim处于普通模式而你按了方向键,终端发送了方向键的转义序列^[[A之类的,但vim没有正确解析。解决方法:

  1. .vimrc里设置set term=builtin_ansi或干脆用set nocompatible
  2. 更根本的做法:hjkl来移动光标,不要用方向键。这既是vim高效使用的前提,也不会遇到方向键在各终端下兼容性问题。

6.3 从vim退出到终端后,终端快捷键失灵

这是很多人忽略的一个坑:你在vim里按了某些组合键,比如Ctrl+z暂时挂起vim,然后shell里可能残留了vim设置的一些终端模式(比如set mouse导致终端鼠标事件被接管)。最简单的解决方法是:在vim里正确退出(:q:wq),不要用Ctrl+z挂起。如果已经挂起了,输入fg回到vim再正常退出。在.vimrc里加上:

set ttymouse=

可以避免鼠标模式在退出时污染终端。

6.4 误删内容后怎么办

误删是新手在vim里最容易发生的事。记住三个救命键:

  • u:撤销最后一次修改
  • Ctrl+r:重做,即撤销的撤销
  • U:撤销当前行上所有修改(回到初始状态)

如果你已经退出了vim,但只要开启过set undofile,还能在下次打开时继续撤销。这个配置强烈建议开启。如果你因为误删而保存退出过,那就没法靠vim撤销了,但你可以用系统的文件备份工具——如果文件在Git仓库里,那就更简单了,git checkout就回来了。

6.5 vim常用命令速查表

操作命令说明
进入插入模式i/a/o光标前插入/光标后插入/新建一行插入
退出插入模式EscCtrl+[回到普通模式
保存:w写入文件
保存并退出:wqZZ保存后退出
不保存退出:q!ZQ强制退出,丢弃修改
删除当前行dd删除光标所在行
复制当前行yy复制,粘贴用p
撤销u撤销上一步
重做Ctrl+r重做上一步
查找/关键词向下搜索
替换:%s/旧/新/g全局替换
跳转指定行:行号:100跳到100行
显示行号:set number开启行号显示
分屏:sp/:vsp上下/左右分屏
打开终端:terminal在vim内打开终端

这张表涵盖了你日常用vim的绝大部分操作,把它存下来,遇到想不起的随时回来查。

最后再分享一点我自己的体会

使用vim这些年,最大的感受不是“键盘飞起来了”那种炫技的快感,而是对“工具”这件事的理解变了。普通工具是“给你什么你就用什么”,但vim是一个“你可以把它塑造成你想要的样子”的工具。它的模式设计、命令语法、可配置性,让使用者真正成了工具的主人。

如果你刚接触vim,别急着背命令,也别因为一开始想“退出却退不出去”就否定它。我的建议是:用一个月的时间,强制自己所有编辑场景都用vim,哪怕慢一点、卡一点,也要坚持下去。一个月后你再回头看,那种手指在键盘上流畅移动、指令一个个精准执行的感觉,是任何图形界面编辑器都给不了你的。

如果实在坚持不下去,也不用有负罪感。工具是为人服务的,你习惯用哪个就用哪个。但至少,在服务器上、在远程终端里、在某个没有图形界面的深夜排障现场,你熟悉的那几个vim命令会成为你最可靠的后备方案。这大概就是vim带给从业者最朴素也最实用的安全感。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询