Vim编辑器基础——终端下改代码的基本生存技能
面试翻车现场
去年校招,有个同学技术面表现不错,代码能力扎实。最后我问了个问题:"你在服务器上需要快速改一行代码,没有图形界面,你怎么办?"
他说:"用nano。"
我说:"如果服务器没装nano呢?"
他说:"那就……装一个?"
我说:"服务器上已经有vim了,你用不用?"
他说:"不太会。"
其实不需要精通vim,但基本的打开文件、编辑、保存退出,这些操作你得会。SSH到机器人上改个配置文件、修个bug,vim是最常见的选择。不会的话,你连最基本的操作都做不了。
Vim的三种模式
Vim最让人困惑的就是模式。刚打开vim,你处于普通模式(Normal Mode)。在这个模式下,你敲的字母不是输入文字,而是命令。
按i进入插入模式(Insert Mode),这时候才能正常打字。按Esc回到普通模式。
还有命令行模式,在普通模式下按:进入,可以输入保存、退出等命令。
三种模式的切换:
普通模式 → 按 i → 插入模式 插入模式 → 按 Esc → 普通模式 普通模式 → 按 : → 命令行模式 命令行模式 → 按 Enter → 普通模式
新手最常犯的错误:在普通模式下打字,发现屏幕上一堆乱码。因为你把命令当文字输入了。按Esc确保回到普通模式,再按u撤销刚才的误操作。
基本操作:打开、编辑、保存
vim filename.cpp # 打开文件(不存在会创建)
进入后:
- 按i进入插入模式,开始编辑
- 编辑完按Esc回到普通模式
- 输入:wq保存并退出(write + quit)
- 输入:q!不保存强制退出
- 输入:w只保存不退出
这几个命令记住,你就能应付最基本的编辑需求了。
光标移动
在普通模式下,移动光标不需要鼠标:
h ← 左移 j ↓ 下移 k ↑ 上移 l → 右移
为什么要用hjkl而不是方向键?因为Vim设计年代键盘没有方向键,而且hjkl的位置让你的手不用离开主键盘区。当然,方向键也能用,只是效率低一些。
更快的移动方式:
w 跳到下一个单词开头 b 跳到上一个单词开头 0 跳到行首 $ 跳到行尾 gg 跳到文件开头 G 跳到文件末尾 42G 跳到第42行
面试的时候,如果让你用vim改代码,知道gg和G能省很多时间。
删除和复制
普通模式下的删除:
x 删除当前字符 dd 删除当前行 3dd 删除当前及下面两行(共3行) dG 从当前行删除到文件末尾
复制和粘贴:
yy 复制当前行 3yy 复制当前及下面两行 p 粘贴到光标下方 P 粘贴到光标上方
还有个实用的操作:d加移动命令。比如dw删除一个单词,d$删除从光标到行尾,dG删除到文件末尾。c命令类似,但删除后自动进入插入模式:cw改一个单词,cc改整行。
可视模式
除了普通模式和插入模式,还有一个可视模式(Visual Mode),用来选择文本。
按v进入字符可视模式,移动光标选择文字。按V进入行模式,整行选择。按Ctrl+v进入块模式,可以选一个矩形区域。
块模式特别有用。比如你想在10行代码前面都加个//注释,把光标移到第一行,按Ctrl+v,向下移动10行,再按I(大写i),输入// ,按Esc。所有选中行前面都会加上注释。
选完之后按d删除,按y复制,按c修改——和普通模式一样。
查找和替换
在普通模式下按/然后输入关键词,向后搜索:
/robot # 搜索"robot" n # 跳到下一个匹配 N # 跳到上一个匹配
按?向前搜索。
替换命令在命令行模式下:
:%s/old/new/g # 全文替换old为new
:%s/old/new/gc # 全文替换,每个都确认
:10,20s/old/new/g # 只替换第10到20行
这个在改代码的时候特别有用。比如你要把项目里所有的RobotNode改成RobotNodeV2,打开文件后一条替换命令搞定。
和机器人开发的关系
SSH到机器人上调试,经常需要快速改配置文件。比如改ROS2的launch文件里的参数、改udev规则、改网络配置。这些操作用vim最快——不需要把文件下载到本地、改完再传回去。
另一个场景是看日志。用vim打开一个大日志文件,按G跳到末尾看最新的输出,按/ERROR搜索错误信息。比cat整个文件高效得多。
还有crash排查。机器人程序core dump了,你用gdb加载core文件,需要查看崩溃位置的源码。这时候vim +行号 文件名可以直接跳到那一行:
vim +142 main.cpp # 打开文件并跳到第142行
Vim的基础配置
Vim默认配置很简陋。创建一个~/.vimrc文件:
set number " 显示行号
set relativenumber " 相对行号
set cursorline " 高亮当前行
set syntax on " 语法高亮
set tabstop 4 " Tab宽度4空格
set shiftwidth 4 " 缩进宽度4
set expandtab " Tab转空格
set hlsearch " 搜索高亮
set incsearch " 实时搜索
set encoding=utf-8 " UTF-8编码
set fileformat=unix " Unix换行符
这个配置能解决大部分基本需求。把fileformat=unix加上很重要——Windows换行符(\r\n)在Linux上会导致脚本执行失败,这个坑在面试中也有人踩过。
面试常见考点
"vim和nano有什么区别?"——vim功能强大但学习曲线陡,nano简单直观但功能有限。服务器运维和开发一般用vim,偶尔改个简单文件用nano也行。
"vim怎么撤销和重做?"——普通模式下u撤销,Ctrl+r重做。这个和大多数软件的Ctrl+z不一样,面试有人答错过。
"vim怎么处理大文件?"——vim打开大文件会慢,因为它要加载整个文件。可以用vim -u NONE跳过配置加速,或者用less只看不动。如果非要编辑,split或vsplit分屏操作可以避免反复滚动。
"如何在vim中同时编辑多个文件?"——用:split水平分屏,:vsplit垂直分屏,Ctrl+w加方向键在窗口间切换。这个在下一篇会详细讲。
Vim vs nano vs emacs:怎么选
很多新手纠结到底学哪个编辑器。简单说:nano适合偶尔改一行配置,上手零门槛,但功能有限。vim适合日常开发,学习曲线陡但一旦掌握效率很高。emacs功能最强大,但学习成本也最高,而且不是所有服务器都装了。
在机器人开发领域,vim是最实用的选择。原因很简单:几乎所有Linux发行版都预装了vim,SSH到任何机器上都能用。而且vim的模态编辑理念影响了很多工具——VS Code的Vim插件、JetBrains的Vim emulation,都是基于同一套键位。
一个实战建议:把vimtutor跑完之后,强迫自己用vim完成接下来一周的所有文件编辑。包括改配置文件、写代码、看日志。一开始会很慢,但一周后你会发现速度已经超过了鼠标操作。坚持两周,基本操作就会形成肌肉记忆。
Vim在实际开发中的应用
很多工程师觉得Vim学习曲线陡峭,但在服务器环境下编辑配置文件时,Vim几乎是唯一选择。一个实用的学习路径是:先掌握基本的i/o/ESC/:wq/:q!,再学搜索替换:%s/old/new/g,然后学多文件编辑:sp/:vsp。不需要成为Vim大师,能改个配置文件就够了。面试时说日常用VS Code但服务器上会用Vim,这就够了。
给你的建议
不需要精通vim,但基本的操作必须熟练。我的建议是花一个下午,跟着vimtutor练一遍。这是vim自带的教程,在终端输入vimtutor就能开始,大概30分钟就能过完。
日常开发中,遇到小修改就用vim。不要每次都打开VS Code——SSH到机器人上改个参数,vim三十秒搞定,VS Code要等半天加载。
面试的时候,有些公司会让你在终端里写代码(特别是一些做嵌入式或机器人的公司)。会vim至少不会让你卡在这个环节。你不需要用它写整个项目,但能快速改几行代码、查看文件,这就够了。
很多人学vim学不下去,是因为想一次掌握所有命令。别这样。先记住i/Esc/:wq这三个,能打开能改能保存就行。剩下的用到的时候再查,慢慢就熟了。
上一篇:第85篇 Linux网络配置——IP/DNS/防火墙和机器人联网调试
下一篇预告:第87篇 Vim进阶——多文件编辑、宏录制和效率提升技巧
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)