vim中快速调换两行位置最常用的是ddp命令(交换相邻行),进阶推荐:m命令(如:10m3移动行,配合复制粘贴实现任意两行交换)。

在 vim 中快速调换两行位置,最常用且高效的方法是使用 ddp 命令组合(适用于相邻两行),或用更灵活的 :m(move)命令(支持任意两行,包括不相邻、跨段落)。
方法一:ddp —— 快速交换相邻两行
这是最顺手的快捷操作,适合光标在上行或下行时快速翻转:
- 把光标移到要上移的那行(即原本在下面、想挪到上面的那行),按 dd 删除该行 → 再按 p 粘贴到下一行下方 → 实际效果是“该行与下一行互换”
- 把光标移到要下移的那行(即原本在上面、想挪到下面的那行),按 dd 删除 → 再按 P(大写)粘贴到上一行上方 → 效果也是两行互换
- 简记:光标在哪行,ddp 就让这行“下沉”(和下一行交换);ddP 让这行“上浮”(和上一行交换)
方法二::m(move)—— 精确调换任意两行(推荐进阶用)
当两行不相邻,或你想明确指定第 5 行和第 20 行互换时,用行号 + :m 命令更可靠:
- 先看两行行号(按 Ctrl+g 或开启行号 :set number)
- 假设想把第 10 行移到第 3 行之后(即原第 3 行变成第 4 行,原第 10 行变成第 3 行),执行:
:10m3 - 但注意::m 是“移动”,不是“交换”。要真正交换第 a 行和第 b 行(a → :b m a(把 b 行移到 a 行上方,此时 b 行变 a 行,原 a~b-1 行整体下移)
→ :(a+1) m b(再把原 a 行现在所在的新位置,移到原 b 行之后) - 更简单做法:先用 V 可视行模式选中其中一行(如第 7 行),按 y 复制 → 移动光标到目标位置(如第 2 行),输入 :m+0(移到当前行上方)或 :m+1(移到当前行下方)→ 再用 dd 删掉原来那行即可完成交换
小技巧:用寄存器辅助交换(适合复杂场景)
当涉及多行、或需保留原始顺序做其他操作时,可借助命名寄存器:
- 把第 15 行复制进寄存器 a::15y a
- 把第 8 行复制进寄存器 b::8y b
- 删除第 8 行::8d,然后在第 15 行位置粘贴寄存器 a::15put a
- 删除第 15 行(此时已偏移)::16d,再在原第 8 行位置(现为第 8 行)粘贴寄存器 b::8put b
附:一键映射(可选,提升效率)
如果频繁交换,可在 ~/.vimrc 中添加:
-
nnoremap
x :m-2 —— 光标所在行与上一行交换(\x) -
nnoremap
X :m+1 —— 光标所在行与下一行交换(\X)
保存后重载 vim(:source ~/.vimrc)即可使用。


















