跳转至

VIM编辑器详解

概述

VIM 是 Linux 服务器环境下最强大、最高效的文本编辑器,也是安全测试人员必须掌握的工具。本文详细介绍了 VIM 的三种工作模式、常用命令、配置文件以及使用技巧。

常见文本编辑器

Windows 编辑器

编辑器 特点
Notepad(记事本) 系统自带,最基础的文本编辑器
Sublime Text 轻量快速、插件丰富、多光标编辑
UltraEdit 功能全面、支持大文件、十六进制编辑
VS Code 微软出品、免费、生态最丰富、现代IDE
Notepad++ 开源免费、轻量、适合代码编辑

Linux 编辑器

编辑器 特点 适用场景
VI / VIM Linux标配、功能强大、效率高 服务器运维首选,无需图形界面
nano 简单易用、底部有快捷键提示 新手友好,临时快速编辑
Emacs 功能极其丰富、可扩展为IDE 程序员、极客
Sed 流编辑器,非交互式 脚本中批量处理文本
gedit GNOME桌面环境的图形编辑器 有桌面环境时使用
Kate KDE桌面环境的图形编辑器 功能丰富的GUI编辑器

专业解读:在服务器环境中,通常没有图形界面,因此掌握VI/VIM是Linux运维的必备技能。几乎所有Linux发行版都预装了vi,而vim是vi的增强版。


VI 和 VIM 的区别

特性 VI VIM
全称 Visual Interface(可视接口) Vi IMproved(改进版Vi)
诞生时间 1976年 1991年
作者 Bill Joy(Sun公司联合创始人) Bram Moolenaar
语法高亮 ❌ 不支持 ✅ 支持
多级撤销 ❌ 只能撤销一步 ✅ 无限级撤销
插件系统 ❌ 不支持 ✅ 丰富的插件生态
代码补全 ❌ 不支持 ✅ 支持
分屏编辑 ❌ 不支持 ✅ 支持
跨平台 Unix/Linux Windows/Mac/Linux全平台

专业解读:vim完全兼容vi的所有操作,同时增加了大量现代编辑功能。现在的Linux系统通常将vi命令链接到vim(vi 实际执行的是 vim)。可用 vi --version 查看。


VIM 配置文件

VIM的配置分为全局配置和用户配置:

配置文件 作用范围 说明
/etc/vimrc 所有用户 全局配置,需要root权限修改
~/.vimrc 当前用户 用户级配置,优先级高于全局配置

专业解读.vimrc 是vim的灵魂,通过它可以定制快捷键、主题、插件、缩进规则等。一份好的 .vimrc 配置可以大幅提升编辑效率。详细配置可参考:https://blog.csdn.net/xiao_yi_xiao/article/details/118491698

常用 .vimrc 配置示例

set nu                  " 显示行号
set tabstop=4           " Tab键宽度为4个空格
set shiftwidth=4        " 自动缩进宽度
set autoindent          " 自动缩进
set syntax on           " 开启语法高亮
set hlsearch            " 高亮搜索匹配
set encoding=utf-8      " 使用UTF-8编码
set mouse=a             " 启用鼠标支持


VIM 三种模式

VIM有三种基本模式,理解模式切换是掌握VIM的关键。

三种模式的关系图

        ┌─────────────┐
        │   命令模式    │ ←── 默认进入的模式
        │  (Normal)   │
        └──────┬──────┘
      i/a/o/I/A/O 进入    Esc 返回
        ┌──────▼──────┐
        │   编辑模式    │ ←── 可以输入和修改文本
        │  (Insert)   │
        └──────┬──────┘
           : 进入         Esc 返回
        ┌──────▼──────┐
        │   底行模式    │ ←── 保存、退出、查找替换等
        │  (Command)  │
        └─────────────┘

模式说明

模式 英文 功能 进入方式
命令模式 Normal Mode 浏览文件、执行命令(删除、复制、粘贴、跳转等) 打开文件的默认模式;从其他模式按 Esc 返回
编辑模式 Insert Mode 修改文本内容,像普通编辑器一样输入文字 在命令模式下按 i/a/o 等进入
底行模式 Command-line Mode 保存、退出、查找替换、设置选项等 在命令模式下按 : 进入

专业解读:VIM的设计理念是:大部分时间停留在命令模式,手指不离开主键区即可高效操作。这是VIM效率高的核心原因,但也是新手觉得难上手的原因。


命令模式详解

打开文件

vim 文件名                    # 打开或新建文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33   # 打开网卡配置
vim redis.conf                # 打开配置文件

打开文件时的错误提示

E325: ATTENTION
Found a swap file by the name ".redis.conf.swp"
  • 原因:上次编辑未正常保存退出(如SSH断开、终端关闭),vim保留了交换文件(.swp)用于恢复
  • 解决办法
  • 选择 R 恢复上次编辑内容,然后正常保存退出
  • 或选择 D 删除交换文件,重新编辑
  • 或手动删除交换文件:rm .redis.conf.swp

移动光标

操作 按键
上下左右移动 k j h l
跳到行首 HOME0^
跳到行尾 END$
跳到第n行 nG:n(底行模式)
跳到文件末尾 Shift + GG
跳到文件开头 :1gg
向下翻一屏 Ctrl + F(Forward)
向上翻一屏 Ctrl + B(Backspace)

专业解读hjkl 是vim的经典光标移动键,双手不离开打字区即可移动光标。0 跳到行首第一个字符,^ 跳到行首第一个非空字符,$ 跳到行尾最后一个字符。

搜索和替换

操作 按键
向后查找内容 /关键字 然后回车
向前查找内容 ?关键字 然后回车
查找下一个 n
查找上一个 N(大写,反向)

删除和复制操作

操作 按键 说明
复制光标所在行 yy yank(抽出)
粘贴到下一行 p paste
粘贴到上一行 P(大写) paste before
删除光标前面一个字符 X(大写) 类似Backspace
删除光标后面一个字符 xDel delete
删除整行 dd delete line
删除光标下面n行 ndd 3dd 删除3行
撤销最近一次操作 u undo
恢复最近一次撤销 Ctrl + R redo
重复上一次操作 . 点命令,极其实用

专业解读:vim中的删除实际上是"剪切",被删除的内容会进入剪贴板,可以用 p 粘贴出来。yydd 是vim最高频的命令之一。


编辑模式详解

进入编辑模式的方式

按键 进入方式 光标位置
i 在光标插入 当前光标位置
a 在光标插入 光标后一个字符
I(大写i) 在行首插入 行首第一个非空字符前
A 在行尾插入 行尾
o(小写) 在光标所在行插入新行 新建行的行首
O(大写) 在光标所在行插入新行 新建行的行首
r 替换当前光标所在的一个字符 不进入完整编辑模式
R 进入替换模式,连续替换字符 类似Insert键

记忆技巧: - i = insert(插入),a = append(追加) - 大写 I A O 都带"极端"含义:行首、行尾、上方

编辑模式下的操作

操作 按键
撤销输入 Ctrl + U
退出编辑模式 Esc

底行模式详解

进入底行模式

在命令模式下按 Shift + :(即冒号)进入底行模式,光标会跳到底部。

底行模式常用命令

命令 作用
:w 保存(write)
:q 退出(quit)
:wq 保存并退出
:q! 强制退出,不保存修改
:w! 强制保存(对只读文件需配合权限)
:e! 放弃所有更改,重新加载文件(不关闭vim)
:set nu 显示行号
:set nonu 取消显示行号
:%s/word1/word2/g 全局替换:把所有word1替换为word2
:n 跳到第n行

替换命令详解

:%s/old/new/g        " %表示整个文件,s表示替换,g表示全局(每行所有匹配)
:%s/old/new/gc       " c表示每次替换前确认(confirm)
:1,10s/old/new/g     " 只替换1到10行


安全测试视角:Vim 交换文件与信息泄露 Vim 的交换文件(.swp.swo)可能泄露敏感信息: - 在 Web 目录中,如果管理员使用 vim 编辑配置文件后异常退出,.swp 文件会留在服务器上 - 攻击者可以通过访问 .config.php.swp 获取配置文件的完整内容 - 防御方法:配置 vim 将交换文件存储在临时目录(set directory=/tmp),或编辑完成后清理交换文件

安全测试视角:sudoedit 与编辑器安全 sudoedit 命令允许普通用户以 root 身份编辑文件,但使用用户指定的编辑器。如果编辑器配置不当,可能被利用提权: - 设置 EDITOR=vim 后利用 vim 的 :!/bin/bash 命令可以获取 root shell - 这是 CTF 和渗透测试中常见的 sudo 滥用场景

sudoedit /etc/hosts
# 在 vim 中执行 :!/bin/bash 即可获取 root shell
防御方法:限制 sudoedit 的编辑器为安全的选项(如 rvim),或避免给用户 sudoedit 权限。