跳转至

2. Vim 编辑器使用

Vim 是 Linux 服务器环境中最重要的文本编辑器,内置于 RHEL 9,几乎所有 Linux 发行版均提供。无论是编辑 SSH 配置、网络参数还是修改服务文件,Vim 都是首选工具。本章提前安排,确保后续所有编辑配置文件的操作都有工具基础。


2.1 前提条件

  • RHEL 9 已完成安装(第 1 章),主机名 linuxdc,IP 192.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 回到此处 光标移动、复制、删除、搜索 iao 等进入其他模式
Insert(插入模式) Normal 模式下按 iao 输入与修改文本 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 退出(文件未修改时有效)
:wqZZ 保存并退出
: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 速查表

场景 命令
保存并退出 :wqZZ
强制退出不保存 :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 实践任务

  1. 执行 vim ~/.vimrc,按 2.8 节创建配置文件,保存退出。
  2. 执行 view /etc/ssh/sshd_config(只读),使用 /Port 搜索 Port 行,按 n 跳转下一个。
  3. 执行 vim /tmp/practice.conf,练习以下操作:
    • i 进入 Insert,输入 5 行任意文本,按 Esc 返回 Normal
    • 使用 dd 删除一行,u 撤销
    • 使用 :%s/旧词/新词/gc 执行带确认的全文替换
    • :set number 开启行号
    • :wq 保存退出
  4. 执行 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 三种核心模式、光标移动、编辑操作、搜索替换、个人配置与分屏操作,并附完整速查表。掌握本章内容足以应对后续所有章节中的配置文件编辑需求。