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效率高的核心原因,但也是新手觉得难上手的原因。
命令模式详解¶
打开文件¶
打开文件时的错误提示:
- 原因:上次编辑未正常保存退出(如SSH断开、终端关闭),vim保留了交换文件(.swp)用于恢复
- 解决办法:
- 选择
R恢复上次编辑内容,然后正常保存退出 - 或选择
D删除交换文件,重新编辑 - 或手动删除交换文件:
rm .redis.conf.swp
移动光标¶
| 操作 | 按键 |
|---|---|
| 上下左右移动 | ↑ ↓ ← → 或 k j h l |
| 跳到行首 | HOME 或 0 或 ^ |
| 跳到行尾 | END 或 $ |
| 跳到第n行 | nG 或 :n(底行模式) |
| 跳到文件末尾 | Shift + G 或 G |
| 跳到文件开头 | :1 或 gg |
| 向下翻一屏 | Ctrl + F(Forward) |
| 向上翻一屏 | Ctrl + B(Backspace) |
专业解读:
hjkl是vim的经典光标移动键,双手不离开打字区即可移动光标。0跳到行首第一个字符,^跳到行首第一个非空字符,$跳到行尾最后一个字符。
搜索和替换¶
| 操作 | 按键 |
|---|---|
| 向后查找内容 | /关键字 然后回车 |
| 向前查找内容 | ?关键字 然后回车 |
| 查找下一个 | n |
| 查找上一个 | N(大写,反向) |
删除和复制操作¶
| 操作 | 按键 | 说明 |
|---|---|---|
| 复制光标所在行 | yy |
yank(抽出) |
| 粘贴到下一行 | p |
paste |
| 粘贴到上一行 | P(大写) |
paste before |
| 删除光标前面一个字符 | X(大写) |
类似Backspace |
| 删除光标后面一个字符 | x 或 Del |
delete |
| 删除整行 | dd |
delete line |
| 删除光标下面n行 | ndd |
如 3dd 删除3行 |
| 撤销最近一次操作 | u |
undo |
| 恢复最近一次撤销 | Ctrl + R |
redo |
| 重复上一次操作 | . |
点命令,极其实用 |
专业解读:vim中的删除实际上是"剪切",被删除的内容会进入剪贴板,可以用
p粘贴出来。yy和dd是vim最高频的命令之一。
编辑模式详解¶
进入编辑模式的方式¶
| 按键 | 进入方式 | 光标位置 |
|---|---|---|
i |
在光标前插入 | 当前光标位置 |
a |
在光标后插入 | 光标后一个字符 |
I(大写i) |
在行首插入 | 行首第一个非空字符前 |
A |
在行尾插入 | 行尾 |
o(小写) |
在光标所在行下插入新行 | 新建行的行首 |
O(大写) |
在光标所在行上插入新行 | 新建行的行首 |
r |
替换当前光标所在的一个字符 | 不进入完整编辑模式 |
R |
进入替换模式,连续替换字符 | 类似Insert键 |
记忆技巧: -
i= insert(插入),a= append(追加) - 大写IAO都带"极端"含义:行首、行尾、上方
编辑模式下的操作¶
| 操作 | 按键 |
|---|---|
| 撤销输入 | 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 的编辑器为安全的选项(如sudoedit命令允许普通用户以 root 身份编辑文件,但使用用户指定的编辑器。如果编辑器配置不当,可能被利用提权: - 设置EDITOR=vim后利用 vim 的:!/bin/bash命令可以获取 root shell - 这是 CTF 和渗透测试中常见的 sudo 滥用场景rvim),或避免给用户 sudoedit 权限。