← 回目录
04 Week 01 · 先能动手

vim 活命三招

服务器上没有记事本,改配置只能用它。但你真的只需要三招——那些花哨操作现在一个都别学,学了也记不住。

今天是这一周最短的一天,目标只有一个:别被 vim 困住

几乎每个刚接触 Linux 的人都经历过这个:打开一个文件,敲了几个字,然后发现退不出来了——按什么键都在往文件里塞字符。今天就解决这件事。

先理解一件事

为什么你会卡住

vim 和记事本最大的不同:它有「模式」。同一个按键,在不同模式下干的事完全不一样。

vim 的两种模式(先只认这两个)
普通模式
打开文件时的默认状态。这时候敲的每个键都是命令,不是输入内容。按 d 是删除,按 i 是切到编辑,按 : 是准备下命令。
插入模式
i 之后进入。这时才能像记事本一样打字。左下角会显示 -- INSERT --
怎么切回去
Esc。任何时候不知道自己在哪个模式,先按 Esc 就对了——它永远把你送回普通模式。
卡住的真正原因

你在插入模式里敲 :wq,它就老老实实把 :wq 三个字符写进文件里了,当然不会退出。

所以:想退出,先按 Esc。这一条能解决 90% 的困境。

三招

背下来就够用一年
全部要记的东西
$ vi /tmp/lab/test.txt

i       → 进入编辑,此时能打字(左下角出现 -- INSERT --)
Esc     → 退出编辑,回到普通模式
:wq     → 保存并退出(w = write 写,q = quit 退)

顺序永远是这三步:按 i 打字 → 按 Esc → 输入 :wq 回车

第四招:逃生键

改错了怎么办
不保存,强行退出
:q!     → 放弃所有修改,直接退出
          那个感叹号是「我确定,别拦我」的意思
这一招比前三招还重要

改生产配置改乱了、不确定自己动了什么,果断 :q! 退出来重新开,比硬着头皮保存要安全一万倍。

记住这个组合:Esc → :q! → 回车。这是你的后悔药。

再送两个

用得上,但不急着背
普通模式下(先按 Esc)
/关键词
搜索。配置文件几百行,靠翻是找不到的。输入 /listen 回车,按 n 跳下一个。
u
撤销上一步操作。手滑删错了按它。可以连按撤销多步。
dd
删掉光标所在的整行。注释掉一行配置时常用。
:set nu
显示行号。下面单独说,这个对运维特别有用。

:set nu 为什么重要

和第 14 天连起来

配置文件写错了,检查工具会告诉你第几行出错。比如第 14 天你会看到这样的报错:

nginx 的语法检查
$ sudo nginx -t
nginx: [emerg] unexpected "}" in /etc/nginx/nginx.conf:47
  ↑ 它告诉你是第 47 行

这时候在 vim 里怎么快速跳过去:

两种跳行方式
:set nu    → 打开行号显示,先看清楚自己在第几行
:47        → 直接跳到第 47 行
47G        → 同样是跳到第 47 行(普通模式下按)
想永久开启行号

每次都敲 :set nu 很烦。写进配置文件就一劳永逸:

echo "set nu" >> ~/.vimrc

这个文件是 vim 的个人配置,只影响你自己的账号。

改配置的完整流程

把这四天串起来

到今天为止,你已经能完成一次真正的配置修改了。这是运维每天都在做的事

标准动作
# 1. 先备份(Day 02 学的)
$ sudo cp -a /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%F)

# 2. 改(今天学的)
$ sudo vi /etc/nginx/nginx.conf
   i 编辑 → Esc → :wq

# 3. 检查语法(第 14 天详讲)
$ sudo nginx -t

# 4. 出错就按行号回去改,或者直接拿备份还原
$ sudo cp -a /etc/nginx/nginx.conf.bak.2026-09-07 /etc/nginx/nginx.conf

两个实际问题

你会遇到的

vi 还是 vim

在 Rocky / RHEL 上,vi 通常是 vim 的一个软链接,敲哪个都行。但最小化安装的系统可能只有 vi(功能少一些,比如没有语法高亮)。

装完整版
$ sudo dnf install -y vim-enhanced
$ which vi vim

能不能用 nano?

nano 确实简单得多——底部直接列着快捷键,Ctrl+O 保存 Ctrl+X 退出,没有模式概念。

但我建议你还是学 vim,理由很实际:nano 不一定装了,vi 一定有。你去客户现场、连一台陌生的服务器、进一个精简的容器里,nano 很可能不存在,但 vi 从来都在。

今天没有面试题

但有个更实际的场景
如果面试有上机环节

vim 不会被单独提问,但很可能会让你现场改一个配置文件

那种场合下,卡在 vim 里出不来——一边是面试官看着,一边是你在那按什么键都不对——是非常尴尬的。这一天纯粹是保命,不是加分。

所以今天的练习一定要真敲,把「i → Esc → :wq」变成手上的条件反射。

今天的练习

敲完再走 · 约 10 分钟
  • vi /tmp/lab/vimtest.txt,按 i,随便写三行字,Esc:wq 保存退出
  • cat /tmp/lab/vimtest.txt 确认内容真的写进去了
  • 再打开它,随便乱改一通,然后 Esc:q! 退出,再 cat 确认刚才的乱改没有生效
  • 打开 /etc/nginx/nginx.conf(没装 nginx 就用 /etc/ssh/sshd_config),敲 :set nu 看行号,再敲 :20 跳到第 20 行,然后 :q 退出
  • 在那个文件里用 /listen 搜一下,按 n 跳下一个匹配
  • 整套走一遍:备份 /etc/hosts → vi 打开加一行注释 → 保存 → cat 确认
明天预告

Day 05 是第一周的最后一天:find 找文件、grep 找内容,以及把它们和管道串起来。学完这天,第一周的工具就齐了。