Linux

VIM 三模式

RHEL 9 上用 VIM 改配置:命令/插入/末行三模式、常用键位、保存退出,以及 swap 文件报错的处理。

考试里几乎所有「改配置文件」都假设你会 VIM:改 sshd_config、写 repo 文件、调 Ansible playbook。你不必成为 Vim 诗人,但必须做到:打开、移动、改几行、保存退出、搞砸了能恢复。本篇只覆盖这条最小闭环。

系列:从 RHCSA 到 RHCE · 第 4 / 17 篇 上一篇:nmcli 配静态 IP 与 SSH 下一篇:dnf 软件源与 tar 总目录:系列索引

环境说明

  • 系统:RHEL 9(默认自带 vim 或 vim-minimal)
  • 身份:改系统配置需 root;家目录实验任意用户
  • 前置:会 cd / ls(见基础命令篇)

若命令不存在:

which vim vi
dnf -y install vim-enhanced

很多教程里的 vi 在 RHEL 上往往是 vim 的别名或兼容入口;本文统一说 vim。

打开与新建

vim /root/hello.txt
  • 文件不存在:打开空缓冲区,保存时才真正创建文件
  • 文件已存在:载入内容
  • 只读查看也可以用 vim;更长的日志仍推荐 less
vim /etc/hosts          # 系统文件,需 root
vim notes.txt           # 当前目录

考点:vim 路径——路径写错不会报「文件不存在」,而是空白新文件;保存时才发现写到了错误位置。保存前先看标题栏/pwd。

三模式(必懂)

        i / a / o 等
  命令模式  ─────────►  插入模式
     ▲                     │
     │        Esc          │
     └─────────────────────┘
     │
     │  :
     ▼
  末行模式(输入完回车后回到命令模式)
模式能干什么如何进入如何离开
命令模式(默认)移动、复制、删除行、撤销打开即是;插入/末行按 Esc 回来按 i 等进插入;按 : 进末行
插入模式打字改内容i a o I A O 等Esc
末行模式保存、退出、设置、搜索替换命令模式下按 :回车执行,或 Esc 取消

屏幕底部出现 -- INSERT -- 才是插入模式。按错模式是新手第一坑:不确定就先狂按 Esc。

常用进入插入的方式

键作用
i在光标前插入
a在光标后插入
o在下一行新开一行插入
O在上一行新开一行插入
I行首插入
A行尾插入

考试改配置最常用:方向键移到目标行 → A 行尾补内容,或 i 改中间几个字。整行重写可用 cc(清空当前行并进入插入)。

命令模式:移动与编辑

移动

键作用
方向键 / h j k l左下上右
gg文件第一行
G文件最后一行
nG 或 :n跳到第 n 行(末行)
0 / $行首 / 行尾
w / b下一词 / 上一词

改 40 行附近的配置时::40 或 40G 比狂按方向键快。

行编辑(高频)

键作用
yy复制当前行
3yy从当前行起复制 3 行
p粘贴到下一行
P粘贴到上一行
dd剪切(删除)当前行
3dd删除 3 行
x删除光标处一个字符
u撤销
Ctrl + r重做(反撤销)

练习节奏:改错了先 u,不要慌着 :q! 整段丢掉。

末行模式:保存与退出

在命令模式按 :,输入后回车:

命令作用
:w保存,不退出
:wq 或 :x保存并退出
:q退出(无修改时)
:q!不保存强制退出
:w /tmp/backup.conf另存为
:set nu显示行号
:set nonu隐藏行号
:wq!强制保存(对只读但你是 root 时常用)

记忆口诀

  • 要保存::w
  • 要走人::q
  • 改完走::wq
  • 改废了想重来::q!

易错:在插入模式直接敲 :wq,只会把字符打进文件。必须先 Esc。

完整最小实验

cd
vim hello.txt
  1. 打开后是命令模式
  2. 按 i,左下角出现 INSERT
  3. 输入:
hello the world
What about you?
Not bad!
  1. 按 Esc
  2. 输入 :wq 回车

验证:

ls -l hello.txt
cat hello.txt

再打开练键位:

vim hello.txt
  • G 到末行,gg 回顶部
  • yy 再 p 复制一行
  • dd 删一行,u 撤销
  • :set nu 看行号
  • 改乱后 :q! 不保存退出,再 cat 确认内容未变

搜索(改配置很有用)

命令模式:

键作用
/关键词向下搜索,回车执行
?关键词向上搜索
n / N下一个 / 上一个

例:在 sshd_config 里找 PermitRootLogin:

vim /etc/ssh/sshd_config

输入 /PermitRoot 回车,用 n 跳下一个匹配。找到后 i 或 A 修改,Esc,:wq。

配置文件实战套路

以「改一行、注释一行」为例:

  1. vim 打开文件
  2. /关键词 定位
  3. :set nu 记住行号(方便对答案)
  4. 移动到目标行:
    • 改内容:i / A
    • 整行替换:dd 删掉再 O 插入,或 cc 清空行并进入插入
  5. Esc → :wq
  6. 另开终端 less 文件 或 grep 关键词 文件 验证
grep -n PermitRootLogin /etc/ssh/sshd_config

Swap 文件与 E325 事故

若 VIM 非法退出(进程被杀、部分环境里 Ctrl+Z 挂起后未处理、断电),会留下交换文件:

E325: ATTENTION
Found a swap file by the name "/root/.hello.txt.swp"

含义:还有另一个 VIM 在编辑,或上次异常退出。

菜单常见选项:

选项作用
(O)pen Read-Only只读打开
(E)dit anyway仍编辑(可能丢未保存内容)
(R)ecover尝试从 swap 恢复
(Q)uit / (A)bort退出,不解决文件本身

处理步骤(实验环境最常用)

  1. 确认没有其它 vim 进程:ps aux | grep vim
  2. 看清提示里的 swp 路径(注意隐藏文件)
  3. 删掉 swap 文件后重新打开:
ls -a
ls -a /root
rm -f /root/.hello.txt.swp
vim /root/hello.txt

易错:swap 是隐藏文件,ls 不显示,要用 ls -a。 易错:路径写错,删了别的 .swp。 说明:考试若出现 E325,按提示删除对应 swp 即可;不要在未 recover 时盲目 :q! 然后以为内容丢了——先试 (R)ecover。

关于 Ctrl+Z

在终端里 Ctrl+Z 是把前台进程挂起(丢到后台 stopped),不是「取消」。VIM 被挂起后文件可能处于半编辑状态,容易诱发 swap 警告。

  • 误按:输入 fg 把 VIM 拉回前台,正常 :wq
  • 真要中断:在 VIM 里用 :q!,或终端 Ctrl+C(对 VIM 效果有限,优先 :q!)

常用键位速查

目标键 / 命令
插入i a o
回命令模式Esc
保存:w
保存退出:wq :x
不保存退出:q!
行号:set nu
复制行yy p
删行dd
撤销 / 重做u / Ctrl+r
顶 / 底gg / G
搜索/词 n

考点与易错

考点:打开配置 → 修改 → :wq → systemctl restart 服务,是整条实操链。 易错:插入模式敲命令;先 Esc。 易错::q 提示已修改却退出,改用 :wq 或明确 :q!。 易错:E325 后不会删 .swp,导致一直打不开目标文件。 易错:用 Ctrl+Z 代替退出,制造 swap。 练习环境:课堂用 root 改 /etc 下文件时,保存可用 :wq;个别只读缓冲用 :wq!。

小结

  1. 三模式:命令(默认)→ i 插入 → Esc → :wq 保存退出。
  2. 复制粘贴删除记 yy / p / dd,撤销 u。
  3. 配置文件用 /关键词 定位,:set nu 辅助。
  4. 遇 E325:确认无其它 vim 后删除提示的 .swp,再打开。

下一篇进入软件与压缩:写 /etc/yum.repos.d/*.repo,用 dnf 装包,用 tar 打包日志——编辑器会立刻用上。


系列导航:总目录 · 上一篇:nmcli 配静态 IP 与 SSH · 下一篇:dnf 软件源与 tar

相关阅读

全部文章 →
← 返回列表更多「Linux」