公司动态
第86篇 Vim编辑器基础——终端下改代码的基本生存技能
面试翻车现场去年校招有个同学技术面表现不错代码能力扎实。最后我问了个问题你在服务器上需要快速改一行代码没有图形界面你怎么办他说用nano。我说如果服务器没装nano呢他说那就……装一个我说服务器上已经有vim了你用不用他说不太会。其实不需要精通vim但基本的打开文件、编辑、保存退出这些操作你得会。SSH到机器人上改个配置文件、修个bugvim是最常见的选择。不会的话你连最基本的操作都做不了。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进入行模式整行选择。按Ctrlv进入块模式可以选一个矩形区域。块模式特别有用。比如你想在10行代码前面都加个//注释把光标移到第一行按Ctrlv向下移动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 encodingutf-8 UTF-8编码 set fileformatunix Unix换行符这个配置能解决大部分基本需求。把fileformatunix加上很重要——Windows换行符\r\n在Linux上会导致脚本执行失败这个坑在面试中也有人踩过。面试常见考点vim和nano有什么区别——vim功能强大但学习曲线陡nano简单直观但功能有限。服务器运维和开发一般用vim偶尔改个简单文件用nano也行。vim怎么撤销和重做——普通模式下u撤销Ctrlr重做。这个和大多数软件的Ctrlz不一样面试有人答错过。vim怎么处理大文件——vim打开大文件会慢因为它要加载整个文件。可以用vim -u NONE跳过配置加速或者用less只看不动。如果非要编辑split或vsplit分屏操作可以避免反复滚动。如何在vim中同时编辑多个文件——用:split水平分屏:vsplit垂直分屏Ctrlw加方向键在窗口间切换。这个在下一篇会详细讲。Vim vs nano vs emacs怎么选很多新手纠结到底学哪个编辑器。简单说nano适合偶尔改一行配置上手零门槛但功能有限。vim适合日常开发学习曲线陡但一旦掌握效率很高。emacs功能最强大但学习成本也最高而且不是所有服务器都装了。在机器人开发领域vim是最实用的选择。原因很简单几乎所有Linux发行版都预装了vimSSH到任何机器上都能用。而且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进阶——多文件编辑、宏录制和效率提升技巧