今天是这一周最短的一天,目标只有一个:别被 vim 困住。
几乎每个刚接触 Linux 的人都经历过这个:打开一个文件,敲了几个字,然后发现退不出来了——按什么键都在往文件里塞字符。今天就解决这件事。
先理解一件事
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! → 回车。这是你的后悔药。
再送两个
- /关键词
- 搜索。配置文件几百行,靠翻是找不到的。输入
/listen回车,按n跳下一个。 - u
- 撤销上一步操作。手滑删错了按它。可以连按撤销多步。
- dd
- 删掉光标所在的整行。注释掉一行配置时常用。
- :set nu
- 显示行号。下面单独说,这个对运维特别有用。
:set nu 为什么重要
配置文件写错了,检查工具会告诉你第几行出错。比如第 14 天你会看到这样的报错:
$ 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」变成手上的条件反射。
今天的练习
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 找内容,以及把它们和管道串起来。学完这天,第一周的工具就齐了。