vim作为一款强大的文本编辑器,其核心优势在于通过高效的命令组合实现快速编辑,而掌握编辑命令的前提是理解vim的模式机制,vim主要分为普通模式、插入模式、可视模式和命令行模式,其中编辑命令多数在普通模式下执行,或通过普通模式切换到其他模式后操作,本文将详细介绍vim中的各类编辑命令,帮助用户从基础操作到高效技巧逐步掌握。
进入编辑模式:从普通模式开始
vim启动后默认处于普通模式,此时无法直接输入文本,需通过特定命令进入插入模式(即编辑模式),常用进入插入模式的命令如下:
i
:在光标当前位置插入文本,光标及后续字符后移。a
:在光标后一个字符位置插入文本(append),光标后移。o
:在当前行下方新建一行并进入插入模式,光标定位到新行首。O
:在当前行上方新建一行并进入插入模式,光标定位到新行首。I
:在当前行首(非空字符首)插入文本,若行首为空格则定位到空格后。A
:在当前行尾插入文本,光标移至行尾。
进入插入模式后,可直接输入文本,编辑完成后按Esc
键返回普通模式,继续执行其他命令。
普通模式下的核心编辑命令
普通模式是vim的“指挥中心”,大部分编辑操作(如删除、复制、粘贴、修改)均在此模式下完成,熟练掌握这些命令是高效使用vim的关键。
光标移动:精准定位编辑位置
编辑文本前需快速定位光标,vim的光标移动命令无需依赖鼠标,效率远超普通编辑器:
- 基本移动:
h
(左)、j
(下)、k
(上)、l
(右),每次移动一个字符/行。 - 单词移动:
w
(到下一个单词首)、e
(到当前单词尾)、b
(到上一个单词首),单词以非空白字符定义。 - 行内移动:(到行尾)、
^
(到行首非空字符首)、0
(到行首绝对位置,含空格)。 - 文件移动:
gg
(到文件首行)、G
(到文件尾行)、{num}G
(跳转到第{num}
行,如10G
跳转至第10行)。 - 屏幕移动:
H
(到屏幕首行)、M
(到屏幕中间行)、L
(到屏幕末行)、Ctrl+f
(向下翻页)、Ctrl+b
(向上翻页)。
文本删除:高效清除不需要的内容
删除命令是编辑中最常用的操作之一,vim支持精确删除指定范围的内容:
- 字符删除:
x
(删除光标所在字符)、X
(删除光标前一个字符)。 - 行删除:
dd
(删除当前行)、{num}dd
(删除从当前行开始的{num}
行,如3dd
删除3行)。 - 单词删除:
dw
(删除从光标到下一个单词首的内容)、de
(删除当前单词,含光标所在字符)、dE
(删除到当前单词尾,含标点)、db
(删除到上一个单词首)。 - 范围删除:
d$
(删除从光标到行尾的内容)、d^
(删除从光标到行首非空字符的内容)、d0
(删除到行首绝对位置)。
会被自动保存到vim的寄存器中,可通过粘贴命令恢复。
复制与粘贴:避免重复输入
复制与粘贴命令配合使用,可快速移动或重复文本:
- 复制命令:
yy
(复制当前行)、{num}yy
(复制{num}
行)、yw
(复制当前单词)、y$
(复制到行尾)、y^
(复制到行首非空字符)。 - 粘贴命令:
p
(在光标后粘贴寄存器内容)、P
(在光标前粘贴寄存器内容),若复制的是整行,p
会在当前行下方粘贴新行,P
则在上方粘贴。
文本修改:直接替换而不删除
修改命令结合了删除与插入,可一步完成文本替换:
- 字符替换:
r
(替换光标所在字符,按r
后输入新字符即可)、R
(进入替换模式,连续替换光标及后续字符,按Esc
退出)。 - 行内修改:
s
(删除光标所在字符并进入插入模式)、S
(删除当前行并进入插入模式,等同于cc
)。 - 范围修改:
cw
(修改当前单词,从光标到单词尾进入插入模式)、c$
(修改到行尾)、c^
(修改到行首非空字符)、{num}cc
(修改{num}
行,删除后进入插入模式)。
撤销与重做:修正操作错误
- 撤销:
u
(撤销上一步操作)、Ctrl+r
(重做被撤销的操作)。 - 撤销多步:
U
(撤销当前行的所有修改,仅限普通模式下对当前行的操作)。
其他实用编辑命令
- 合并行:
J
(将当前行与下一行合并,中间添加空格)。 - 删除空行:
g/^$/d
(命令行模式下执行,删除文件中所有空行)。 - 转小写/大写:(切换光标所在字符的大小写)、
{num}~
(切换{num}
个字符的大小写)、g~w
(切换当前单词大小写)、guw
(将当前单词转为小写)、gUw
(将当前单词转为大写)。
可视模式:选中文本再编辑
可视模式用于选中特定文本块,再执行删除、复制、替换等操作,适合精确编辑局部内容:
- 进入可视模式:
v
:字符可视模式,选中光标所在字符,通过移动光标扩展选中范围。V
:行可视模式,选中当前整行,通过j
/k
扩展选中行数。Ctrl+v
:块可视模式,选中矩形文本块(适用于表格编辑),通过h
/j
/k
/l
扩展块范围。
- 选中后操作:
d
:删除选中文本。y
:复制选中文本。c
:删除选中文本并进入插入模式。>
:将选中文本右移(缩进)。<
:将选中文本左移(取消缩进)。
命令行模式:批量编辑与文件操作
通过普通模式输入进入命令行模式,可执行查找替换、文件保存等批量操作:
- 查找替换:
s/old/new
:替换当前行中第一个old
为new
。s/old/new/g
:替换当前行中所有old
为new
(g
表示全局)。{start},{end}s/old/new/g
:替换第{start}
行到第{end}
行中所有old
为new
(如1,10s/error/correct/g
)。%s/old/new/c
:替换整个文件中所有old
为new
,每次替换前确认(c
表示确认)。
- 文件操作:
w
:保存当前文件。w newfile.txt
:将当前文件另存为newfile.txt
。q
:退出vim(若未保存会提示错误)。wq
或x
:保存并退出vim。q!
:强制退出,不保存修改。
编辑效率提升技巧
- 数字前缀:多数命令可加数字前缀表示重复次数,如
2dd
(删除2行)、3yy
(复制3行)、5w
(移动5个单词)。 - 命令:重复上一次普通模式操作,如执行
dd
删除一行后,可重复删除下一行。 - 标记跳转:通过
ma
(标记当前位置为a
),可用a
(反引号+a)快速跳转回标记位置,适合跨文件编辑。
相关问答FAQs
Q1:vim中如何批量替换文本中的特定内容?
A1:在命令行模式下使用查找替换命令,替换当前行第一个内容用s/old/new
;替换当前行所有内容用s/old/new/g
;替换指定行范围(如1-10行)用1,10s/old/new/g
;替换整个文件所有内容用g/old/s//new/g
或%s/old/new/g
,若需确认替换,可加c
参数(如s/old/new/c
),每次替换会提示是否确认。
Q2:vim中如何快速复制多行文本?
A2:在普通模式下,将光标移动到起始行,输入{num}yy
即可复制从当前行开始的{num}
行(如5yy
复制5行),若需复制非连续行,可先通过V
进入行可视模式选中第一行,按j
扩展选中范围,按y
复制;或用块可视模式(Ctrl+v
)选中矩形区域后按y
复制,复制后通过p
(光标后粘贴)或P
(光标前粘贴)插入文本。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17185.html