2. Vim 编辑器使用
Vim 是 Linux 服务器环境中最重要的文本编辑器,内置于 RHEL 9,几乎所有 Linux 发行版均提供。无论是编辑 SSH 配置、网络参数还是修改服务文件,Vim 都是首选工具。本章提前安排,确保后续所有编辑配置文件的操作都有工具基础。
2.1 前提条件
- RHEL 9 已完成安装(第 1 章),主机名
linuxdc,IP192.168.1.100。 - 通过控制台或 SecureCRT(SSH 端口 22)以 root 身份登录。
安装完整版 Vim(RHEL 9 默认已安装 vim-enhanced):
rpm -q vim-enhanced || dnf install -y vim-enhanced
2.2 Vim 的三种核心模式
Vim 是模式化编辑器,不同模式下键盘含义完全不同。理解三种模式是掌握 Vim 的关键。
| 模式 | 进入方式 | 主要用途 | 退出方式 |
|---|---|---|---|
| Normal(普通模式) | 启动默认进入;任意模式按 Esc 回到此处 |
光标移动、复制、删除、搜索 | 按 i、a、o 等进入其他模式 |
| Insert(插入模式) | Normal 模式下按 i、a、o 等 |
输入与修改文本 | 按 Esc 返回 Normal 模式 |
| Command(命令行模式) | Normal 模式下按 : |
保存、退出、搜索、替换 | 按 Enter 执行,Esc 取消 |
初学者最常见的困惑
启动 Vim 后直接打字无效果或产生奇怪操作,原因是处于 Normal 模式。按 i 进入 Insert 模式后才能输入文字。迷失时按 Esc 若干次,总能回到 Normal 模式。
2.3 启动与退出
vim /etc/hosts # 打开已有文件
vim /tmp/test.conf # 新建文件(不存在时自动创建)
view /etc/passwd # 只读方式打开(等同于 vim -R)
退出命令(在 Normal 模式下输入 :):
| 命令 | 含义 |
|---|---|
:w |
保存(不退出) |
:q |
退出(文件未修改时有效) |
:wq 或 ZZ |
保存并退出 |
:q! 或 ZQ |
强制退出,放弃所有修改 |
:w !sudo tee % |
以 root 权限保存(用普通用户打开了需要权限的文件时使用) |
2.4 Normal 模式:光标移动
掌握高效移动是 Vim 提速的核心:
基础(推荐替代方向键):
h ← j ↓ k ↑ l →
词级移动:
w 跳到下一个单词开头
b 跳到上一个单词开头
e 跳到当前单词末尾
行级移动:
0 行首(含空格)
^ 行首第一个非空字符
$ 行尾
文件级移动:
gg 跳到第一行
G 跳到最后一行
:45 跳到第 45 行
Ctrl+f 向下翻页
Ctrl+b 向上翻页
2.5 Normal 模式:编辑操作
删除:
x 删除光标处字符
dd 删除当前行
3dd 删除 3 行(数字前缀对大多数命令有效)
dw 删除从光标到词末
d$ 删除从光标到行尾
复制与粘贴:
yy 复制当前行
3yy 复制 3 行
p 在光标后粘贴
P 在光标前粘贴
修改:
r<c> 将光标处字符替换为 c(单字符,不进入 Insert)
cw 删除当前单词并进入 Insert
cc 删除当前行内容并进入 Insert
C 删除到行尾并进入 Insert
撤销与重做:
u 撤销
Ctrl+r 重做
. 重复上一次修改操作
2.6 Insert 模式进入方式
| 按键 | 进入 Insert 位置 |
|---|---|
i |
光标前 |
a |
光标后 |
I |
行首第一个非空字符前 |
A |
行尾 |
o |
当前行下方新建一行 |
O |
当前行上方新建一行 |
2.7 Command 模式:搜索与替换
搜索:
/keyword 向下搜索(n 下一个,N 上一个)
?keyword 向上搜索
* 搜索光标所在单词
:noh 清除搜索高亮
替换(:s 命令):
:s/old/new/ 替换当前行第一个匹配
:s/old/new/g 替换当前行所有匹配
:%s/old/new/g 替换全文所有匹配
:%s/old/new/gc 替换全文,每次确认
:5,10s/old/new/g 替换第 5 到第 10 行
配置文件修改典型用法:
:%s/^#Port 22/Port 2222/
:%s/PermitRootLogin yes/PermitRootLogin no/g
2.8 实用配置(~/.vimrc)
创建个人配置文件,提升日常编辑体验:
vim ~/.vimrc
推荐配置:
" 显示
set number " 行号
set ruler " 光标位置
set showmode " 显示当前模式
set showcmd " 显示未完成命令
" 编辑
set autoindent " 自动缩进
set tabstop=4 " Tab 显示为 4 空格
set shiftwidth=4 " 缩进宽度
set expandtab " Tab 转空格
set backspace=indent,eol,start
" 搜索
set hlsearch " 高亮搜索结果
set incsearch " 输入时即时高亮
set ignorecase " 忽略大小写
set smartcase " 含大写时区分大小写
" 语法
syntax on
在 Vim 中即时应用(无需重启):
:source ~/.vimrc
2.9 多文件与分屏
vim file1.conf file2.conf # 同时打开多个文件
:vsplit /etc/hosts 垂直分屏打开文件
:split /etc/resolv.conf 水平分屏打开文件
Ctrl+w h/j/k/l 在分屏间移动光标
Ctrl+w = 均等所有分屏大小
:close 关闭当前分屏
2.10 常见问题与排查
| 问题 | 解决方式 |
|---|---|
| 无法保存(权限不足) | :w !sudo tee %,或以 root 身份重新打开 |
退出后出现 .swp 文件 |
上次异常退出的交换文件,处理后删除:rm /path/.filename.swp |
| 搜索高亮无法消除 | 执行 :noh |
| 粘贴时自动缩进导致格式错乱 | 粘贴前执行 :set paste,粘贴后 :set nopaste |
| 语法高亮不显示 | 确认 ~/.vimrc 中有 syntax on,或执行 :syntax on |
2.11 速查表
| 场景 | 命令 |
|---|---|
| 保存并退出 | :wq 或 ZZ |
| 强制退出不保存 | :q! |
| 跳到指定行 | :45 |
| 向下搜索 | /keyword |
| 全文替换 | :%s/old/new/g |
| 全文替换(确认) | :%s/old/new/gc |
| 删除行 | dd |
| 复制行 | yy |
| 撤销 | u |
| 重做 | Ctrl+r |
| 跳到文件头 / 尾 | gg / G |
| 显示行号 | :set number |
| 清除搜索高亮 | :noh |
| 粘贴模式 | :set paste / :set nopaste |
| 垂直分屏 | :vsplit <file> |
| 以 root 权限保存 | :w !sudo tee % |
2.12 实践任务
- 执行
vim ~/.vimrc,按 2.8 节创建配置文件,保存退出。 - 执行
view /etc/ssh/sshd_config(只读),使用/Port搜索 Port 行,按n跳转下一个。 - 执行
vim /tmp/practice.conf,练习以下操作:- 按
i进入 Insert,输入 5 行任意文本,按Esc返回 Normal - 使用
dd删除一行,u撤销 - 使用
:%s/旧词/新词/gc执行带确认的全文替换 :set number开启行号:wq保存退出
- 按
- 执行
vim /etc/hosts,使用:vsplit /etc/resolv.conf垂直分屏,Ctrl+w l/h切换窗口,:q关闭分屏。
2.13 自测问题
Q1:如何用普通用户身份打开了 /etc/ssh/sshd_config 并修改了内容,却没有 root 权限保存?
执行 :w !sudo tee %,该命令将当前缓冲区内容通过 tee 以 sudo 权限写入文件。
Q2:dd 删除了重要内容怎么恢复?
立即按 u 撤销(可多次撤销)。Vim 的撤销历史默认保持整个会话,只要未退出均可恢复。
Q3::%s/old/new/g 与 :%s/old/new/gc 有什么区别?
g 直接全部替换;gc 逐个询问确认(y 替换,n 跳过,a 全部替换,q 退出替换)。修改重要配置文件时推荐使用 gc 以避免误替换。
2.14 章节总结
本章介绍了 Vim 三种核心模式、光标移动、编辑操作、搜索替换、个人配置与分屏操作,并附完整速查表。掌握本章内容足以应对后续所有章节中的配置文件编辑需求。