wiki/运维/Linux/笔记/12.文本编辑-VIM.md
2026-04-09 01:28:15 +08:00

215 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文本编辑 - Vim
> Linux 中最常见的文本编辑器,适合终端快速编辑文件。
---
## 1. 三种模式
```
┌─────────────────────────────────────┐
│ 插入模式 │
│ (i / a / o 进入,输入文本) │
└──────────────┬──────────────────────┘
│ Esc
┌─────────────────────────────────────┐
│ 普通模式 │
│ (默认模式,移动/删除/复制/查找) │
└──────────────┬──────────────────────┘
│ : 或 /
┌─────────────────────────────────────┐
│ 命令行模式 │
│ (:w / :q / :s/// / !cmd) │
└─────────────────────────────────────┘
```
### 1.1 普通模式(默认)
- 移动光标、删除、复制、粘贴、查找、执行命令
### 1.2 插入模式
| 按键 | 说明 |
|------|------|
| `i` | 当前字符前插入 |
| `a` | 当前字符后插入 |
| `o` | 下一行插入新行 |
| `I` | 行首插入 |
| `A` | 行尾插入 |
| `O` | 上一行插入新行 |
`Esc` 返回普通模式。
### 1.3 命令行模式
在普通模式下输入 `:``/` 进入,用于保存、退出、查找替换、设置选项、执行外部命令。
---
## 2. 基础操作
### 2.1 文件读写
| 命令 | 说明 |
|------|------|
| `:w` | 保存 |
| `:q` | 退出 |
| `:wq` | 保存并退出 |
| `:q!` | 强制退出不保存 |
| `:w filename` | 另存为 |
| `:r filename` | 读取文件内容到当前位置 |
### 2.2 调用外部命令
| 命令 | 说明 |
|------|------|
| `:!command` | 执行外部命令 |
| `:r !command` | 读取命令输出到当前文件 |
```bash
:!ls # 查看当前目录
:r !date # 插入当前日期
```
### 2.3 删除、复制、粘贴
| 命令 | 说明 |
|------|------|
| `d` | 删除 |
| `dd` | 删除当前行 |
| `dw` | 删除当前单词 |
| `y` | 复制 |
| `yy` | 复制当前行 |
| `yw` | 复制当前单词 |
| `p` | 粘贴到后面 |
| `P` | 粘贴到前面 |
配合数字:`3dd` 删除 3 行,`2yy` 复制 2 行。
### 2.4 撤销与恢复
| 命令 | 说明 |
|------|------|
| `u` | 撤销 |
| `Ctrl + r` | 重做 |
| `U` | 撤销当前行修改 |
---
## 3. 多行编辑(重点)
### 3.1 可视模式Visual Mode
在普通模式下按 `v` 进入可视模式,选择区域后可执行删除、复制等操作。
| 按键 | 说明 |
|------|------|
| `v` | 进入字符可视模式 |
| `V` | 进入行可视模式 |
| `Ctrl + v` | 进入块可视模式(多列编辑) |
### 3.2 块可视模式(多列编辑)
`Ctrl + v` 进入块可视模式后:
1. **批量插入**:选中多行开头 → `I` → 输入内容 → `Esc`
2. **批量删除**:选中多列 → `d``x`
3. **批量替换**:选中多列 → `r` → 输入替换字符
**示例:在多行行首添加 `#` 注释**
```
1. Ctrl + v 进入块可视模式
2. j/k 或 G 选择多行
3. I 进入插入模式
4. 输入 #
5. Esc 退出(所有选中行行首都会添加 #
```
**示例:在多行行首删除 `#`**
```
1. Ctrl + v 进入块可视模式
2. 选择 # 所在列
3. d 删除
```
### 3.3 批量缩进
| 命令 | 说明 |
|------|------|
| `>` |向右缩进 |
| `<` |向左缩进 |
| `3>` |连续 3 行向右缩进 |
| `=` | 自动缩进选中区域 |
---
## 4. 查找与替换
### 4.1 查找
```
/关键字
n # 下一个
N # 上一个
```
### 4.2 替换
```
:s/旧内容/新内容/修饰符
```
| 修饰符 | 说明 |
|--------|------|
| `i` | 忽略大小写 |
| `g` | 全局替换(一行内全部) |
| `gc` | 逐个确认替换 |
### 4.3 常用示例
```bash
:s/old/new/ # 替换当前行第一个
:s/old/new/g # 替换当前行全部
:%s/old/new/g # 替换全文
:%s/old/new/gc # 替换全文(逐个确认)
:1,5s/old/new/g # 替换第 1-5 行
```
---
## 5. 常用设置
| 命令 | 说明 |
|------|------|
| `:set nu` | 显示行号 |
| `:set nonu` | 隐藏行号 |
| `:set ic` | 忽略大小写查找 |
| `:set ai` | 自动缩进 |
| `:set list` | 显示不可见字符 |
| `:set wrap` | 自动换行 |
### 5.1 文件加密
```bash
:set key=password # 设置密码
:set key= # 取消密码
```
> 注意:生产环境建议使用系统权限和专业的加密方案。
---
## 6. 小结
| 场景 | 关键命令 |
|------|---------|
| 基础编辑 | `i``a``o``dd``yy``p` |
| 多行编辑 | `Ctrl + v` + `I` / `d` |
| 查找替换 | `/``:s///g` |
| 保存退出 | `:wq``:q!` |
掌握普通模式、插入模式、命令行模式 + 块可视模式,即可高效完成大多数编辑任务。