写代码时遇到奇怪的bug,光靠IDE的高亮和提示未必能一眼看出问题。很多经验丰富的程序员在排查故障时,反而会切到vim——轻量、快速、不依赖图形界面,尤其是在远程服务器上调试时,vim几乎是唯一选择。
快速跳转定位错误行
编译报错说第87行有问题,但文件几百行,滚动找太费劲。直接用命令模式输入 :87 回车,光标瞬间跳转。更常见的是配合grep使用,比如在项目里搜索某个变量名:
:!grep -n "user_id" *.py
输出带行号的结果后,直接 :数字 就能跳过去查看上下文。
批量替换修复拼写错误
有一次上线前发现数据库字段写错了,比如把 user_name 错写成 use_name,改几十个地方手动太慢。vim里用一行命令搞定:
:%s/use_name/user_name/g
这招在修复全局命名错误时特别管用,加上 c 标志还能逐个确认,避免误伤:
:%s/use_name/user_name/gc
对比两个版本差异
同事提交的代码导致功能异常,想看改了啥。不用开外部工具,在vim里分屏打开两个文件:
:split old_version.py
然后移动光标到其中一个窗口,执行:
:diffthis
再切换到另一个窗口也执行一遍,立马高亮出差异部分。删了哪行、多了啥字符,一清二楚。
恢复误删内容
手滑按了 dd 删掉一段关键代码?别急着退出重来。vim的撤销机制很强大,按 u 就能回退上一步操作。连续按几次可以一路往回退,就像Ctrl+Z但更灵活。
查找括号匹配
嵌套太多的时候,一个函数缺了个大括号,编译通不过。把光标放在任一花括号上,按 %,vim会自动跳转到对应的匹配位置。如果不跳,说明括号没闭合,问题就在这里。
显示不可见字符排隐患
脚本莫名其妙执行失败,查了半天才发现是混入了全角空格或者制表符。开启显示隐藏字符:
:set list
这时候空格变成 $,Tab变成 ^I,一眼就能发现格式混乱的地方。排查shell脚本缩进错误时尤其有用。
临时跳过语法高亮干扰
有时候语法高亮反而让人分心,特别是文件类型识别错的时候。关掉它:
:syntax off
让眼睛专注在逻辑结构上,而不是颜色块。排查复杂条件判断或正则表达式时,这样更清晰。
保存只读文件不重启
在服务器上编辑配置文件,改完发现没权限保存。别退出!用强制写入:
:w !sudo tee %
输入密码后当前修改就能保存成功,省得重新打开。运维场景下这招救过不少次场。