编辑技巧
编辑是 Vim 的核心功能。本章将介绍删除、复制、粘贴、修改等核心编辑操作,这些与移动命令结合,构成 Vim 强大的编辑能力。
操作符(Operator)
Vim 的编辑命令遵循 操作符 + 动作 的模式:
操作符 [数字] 动作
常用操作符:
| 操作符 | 作用 |
|---|---|
d | 删除(delete) |
c | 修改(change) |
y | 复制/抽出(yank) |
> | 向右缩进 |
< | 向左缩进 |
= | 自动缩进 |
g~ | 切换大小写 |
gu | 转为小写 |
gU | 转为大写 |
示例:
dw " 删除一个单词
c$ " 修改到行尾
yiw " 复制当前单词
>> " 当前行向右缩进
删除操作
基本删除
| 命令 | 作用 |
|---|---|
x | 删除光标处字符 |
X | 删除光标前字符 |
dd | 删除整行 |
D | 删除到行尾(同 d$) |
配合移动命令删除
dw " 删除单词(从光标到单词结尾)
db " 删除到单词开头
de " 删除到单词结尾(不含空格)
d$ " 删除到行尾
d0 " 删除到行首
dgg " 删除到文件开头
dG " 删除到文件结尾
dfx " 删除到字符 x
删除多行
5dd " 删除 5 行
d5j " 删除当前行及以下 5 行
d5k " 删除当前行及以上 5 行
删除并进入插入模式
cc 或 S " 删除整行并进入插入模式
C " 删除到行尾并进入插入模式
复制与粘贴
复制(Yank)
| 命令 | 作用 |
|---|---|
yy 或 Y | 复制整行 |
yw | 复制单词 |
y$ | 复制到行尾 |
yiw | 复制当前单词 |
yip | 复制当前段落 |
粘贴(Put)
| 命令 | 作用 |
|---|---|
p | 在光标后/下方粘贴 |
P | 在光标前/上方粘贴 |
粘贴规则:
- 复制的是整行:p 在下一行粘贴,P 在上一行粘贴
- 复制的是部分文本:p 在光标后粘贴,P 在光标前粘贴
交换两行
ddp " 删除当前行并粘贴到下一行(交换当前行与下一行)
修改操作
修改操作删除文本并立即进入插入模式。
基本修改
| 命令 | 作用 |
|---|---|
cc 或 S | 修改整行 |
C | 修改到行尾 |
cw | 修改单词 |
ciw | 修改当前单词 |
ci" | 修改引号内内容 |
ci( | 修改括号内内容 |
修改命令详解
c 命令与 d 命令类似,但删除后会进入插入模式:
cw " 删除单词并进入插入模式
ct. " 删除到句号并进入插入模式
c$ " 删除到行尾并进入插入模式
文本对象
文本对象(Text Objects)是 Vim 最强大的功能之一,用于操作特定的文本结构。
文本对象格式
[操作符]i[对象] " 操作对象内部(inner)
[操作符]a[对象] " 操作对象及包围符号(around)
常用文本对象
| 对象 | 说明 | 示例 |
|---|---|---|
w | 单词 | diw 删除当前单词 |
W | 字串 | daW 删除当前字串及空格 |
s | 句子 | dis 删除当前句子 |
p | 段落 | dip 删除当前段落 |
" | 双引号字符串 | di" 删除引号内内容 |
' | 单引号字符串 | di' 删除引号内内容 |
` | 反引号字符串 | di` |
( 或 b | 圆括号 | di( 或 dib |
[ | 方括号 | di[ |
{ 或 B | 花括号 | di{ 或 diB |
< | 尖括号 | di< |
t | HTML 标签 | dit |
文本对象示例
# 示例代码
print("Hello World")
# ^光标在这里
# 操作结果:
di" → print("") # 删除引号内内容
da" → print() # 删除引号及内容
ci" → print("|") # 修改引号内内容(|表示光标)
yi" → 复制 "Hello World"
vi" → 选中 "Hello World"
嵌套结构
对于嵌套的括号,Vim 会自动识别最内层:
# 光标在 inner 上
outer(middle(inner))
# di( 删除最内层括号内容
outer(middle())
# da( 删除最内层括号及内容
outer(middle)
# 再次 da(
outer
撤销与重做
| 命令 | 作用 |
|---|---|
u | 撤销 |
Ctrl+r | 重做 |
U | 撤销整行修改 |
撤销分支
Vim 支持撤销分支,可以回到撤销历史中的任意状态:
:undolist " 查看撤销分支
:undo 3 " 撤销到第 3 个状态
:earlier 10m " 回到 10 分钟前的状态
:later 5m " 前进到 5 分钟后的状态
重复操作
点命令
. 命令是 Vim 最强大的命令之一,用于重复上次修改。
什么是"修改":
- 插入或删除文本
- 使用操作符(d, c, y 等)的操作
示例:
1. 找到单词 "old"
2. 按 * 搜索该单词
3. 按 ciw 修改该单词,输入 "new"
4. 按 n 跳到下一个匹配
5. 按 . 重复修改
6. 重复步骤 4-5,批量替换
宏录制
虽然宏录制有专门章节,但这里简单介绍:
| 命令 | 作用 |
|---|---|
q{寄存器} | 开始录制 |
q | 停止录制 |
@{寄存器} | 播放宏 |
@@ | 重复上次宏 |
示例:
1. qa " 开始录制到寄存器 a
2. I# Esc " 在行首添加 #
3. j " 移到下一行
4. q " 停止录制
5. 10@a " 对下面 10 行执行相同操作
缩进操作
手动缩进
| 命令 | 作用 |
|---|---|
>> | 当前行向右缩进 |
<< | 当前行向左缩进 |
>ip | 段落向右缩进 |
<ip | 段落向左缩进 |
=G | 自动缩进到文件结尾 |
自动缩进
= " 自动缩进当前行
=i{ " 自动缩进花括号内代码
=ap " 自动缩进当前段落
gg=G " 自动缩进整个文件
大小写转换
| 命令 | 作用 |
|---|---|
~ | 切换光标处字符大小写 |
g~w | 切换单词大小写 |
guw | 将单词转为小写 |
gUw | 将单词转为大写 |
g~~ | 切换整行大小写 |
guu | 整行转为小写 |
gUU | 整行转为大写 |
示例:
Hello WORLD
按 guw → hello WORLD(单词变小写)
按 gUw → Hello WORLD(单词变大写)
按 g~~ → hELLO world(整行切换)
连接行
| 命令 | 作用 |
|---|---|
J | 将下一行连接到当前行(加空格) |
gJ | 将下一行连接到当前行(不加空格) |
3J | 连接下面 3 行 |
示例:
Line 1
Line 2
Line 3
按 J → Line 1 Line 2
Line 3
按 gJ → Line 1Line 2
Line 3
实战技巧
技巧 1:快速包裹文本
给选中的文本添加括号:
1. 选中要包裹的文本(可视模式)
2. 按 S" → 用双引号包裹
3. 按 S( → 用圆括号包裹
4. 按 S[ → 用方括号包裹
技巧 2:快速删除包裹符号
文本:"Hello World"
按 ds" → Hello World (删除双引号)
按 cs"' → 'Hello World' (双引号改单引号)
说明
ds 和 cs 需要安装 surround 插件。我们将在插件章节介绍。
技巧 3:多行编辑
给多行添加注释:
1. Ctrl+v 进入块可视模式
2. 选中多行的行首
3. I// Esc (在行首插入 //)
技巧 4:快速重命名变量
1. 光标在变量名上
2. * 搜索该变量
3. ciw 修改该变量名
4. n 跳到下一个
5. . 重复修改
6. 重复 4-5 直到全部修改完成
技巧 5:整理代码格式
gg=G " 自动缩进整个文件
:%retab " 将 Tab 转换为空格
练习
练习 1:基础编辑
创建文件练习基本操作:
1. vim editing.txt
2. 输入以下内容:
Hello World
Vim is awesome
I love editing
3. 练习 dd, yy, p, u, Ctrl+r
4. 练习 dw, cw, yw
5. 练习 ci", di", yi"
练习 2:文本对象
# 练习以下操作
print("Hello World")
function(arg1, arg2)
list = [1, 2, 3, 4, 5]
# 练习:
# 1. ci" 修改字符串
# 2. di( 删除括号内参数
# 3. yi[ 复制列表内容
# 4. vi{ 选中代码块
练习 3:点命令实战
1. 打开一个包含多个 "old" 的文件
2. 用 * 搜索 "old"
3. 用 ciw 修改为 "new"
4. 用 n 和 . 批量替换所有 "old"
编辑命令总结
| 操作 | 删除 | 复制 | 修改 |
|---|---|---|---|
| 字符 | x | yl | cl |
| 单词 | dw | yw | cw |
| 当前单词 | diw | yiw | ciw |
| 到行尾 | D 或 d$ | y$ | C 或 c$ |
| 整行 | dd | yy | cc 或 S |
| 段落 | dip | yip | cip |
下一步
掌握了编辑技巧后,下一章我们将学习搜索与替换,这是处理大型文件时的必备技能。