在vi编辑器中删除内容:按
x
删除单个字符;dw
删除单词;dd
删除整行;d$
或D
删除至行尾,先按Esc
确保处于普通模式,再执行命令。
vi(及其更强大的版本 vim)是 Unix/Linux 系统中功能强大且广泛使用的文本编辑器,对于初次接触的用户来说,其操作方式可能与常见的图形界面编辑器不同,尤其是在删除内容方面,本指南将详细解释在 vi 中删除文本的各种方法,帮助你高效编辑文件。
核心前提:理解模式
vi 操作的核心在于理解其模式,删除操作主要在 命令模式 (Command Mode) 或 可视模式 (Visual Mode) 下进行。
- 进入命令模式: 这是 vi 启动后的默认模式(或按
Esc
键确保进入此模式),在此模式下,按键被解释为命令,而不是输入文本,你会在屏幕底部看到光标位置等信息,通常没有-- INSERT --
或-- VISUAL --
的提示。 - 插入模式 (Insert Mode): 在此模式下,你可以像在记事本中一样输入文本,按
i
(在光标前插入)、a
(在光标后插入)、o
(在当前行下方新开一行并插入) 等键进入,要删除单个字符,可以使用Backspace
或Delete
键,但这仅限于删除你正在输入的字符,要执行更强大的删除命令,必须先按Esc
键返回命令模式。 - 可视模式 (Visual Mode): 此模式允许你高亮选择文本块,然后对选中的内容执行操作(如删除),按
v
进入字符可视模式,V
(Shift+v) 进入行可视模式,Ctrl+v
进入块可视模式。
在命令模式下删除内容
这是最常用、最高效的删除方式,确保你处于命令模式(按 Esc
)。
-
删除单个字符:
x
: 删除光标所在位置的字符。X
(Shift+x): 删除光标前面的一个字符(相当于退格键)。
-
删除单词:
dw
: 从光标当前位置开始,删除到当前单词的末尾(包括单词后的空格),如果光标在单词开头,则删除整个单词。daw
(delete a word): 删除光标所在的整个单词及其后面的一个空格(无论光标在单词的哪个位置),这是更精确删除整个单词的方式。diw
(delete inner word): 删除光标所在的整个单词,但不删除单词前后的空格,光标需要在单词内部。db
: 从光标当前位置开始,向后删除到当前单词的开头。
-
删除行:
dd
: 删除光标所在的整行,这是最常用的删除行命令。D
(Shift+d): 从光标当前位置开始,删除到行尾(相当于d$
)。d0
: 从光标当前位置开始,删除到行首(数字 0)。d^
: 从光标当前位置开始,删除到行首第一个非空白字符。dj
: 删除当前行和下一行 (j
代表向下移动一行)。dk
: 删除当前行和上一行 (k
代表向上移动一行)。d5j
: 删除当前行及向下的 4 行(共 5 行)。5
可以替换为任意数字 N,表示删除从当前行开始的 N 行。
-
删除到特定字符:
dtX
: 从光标当前位置开始,删除到本行内下一个出现的字符X
之前(不包括X
本身)。dt,
删除到下一个逗号前。dfX
: 从光标当前位置开始,删除到本行内下一个出现的字符X
(包括X
本身)。df.
删除到下一个句点(包括句点)。dTX
/dFX
: 与dtX
/dfX
类似,但是是反向(向左)查找字符X
。T
不包括X
,F
包括X
。
-
删除括号/引号内的内容:
di(
或di)
: 删除 括号内部(不包括括号本身),光标需在括号内。da(
或da)
: 删除 括号以及其内部(包括括号本身),光标需在括号内或括号上。di[
/di]
/di{
/di}
/di'
/di"
/di<
/dit
(for XML/HTML tags): 同理,适用于[]
, , , ,<>
, HTML/XML 标签等,将 替换为对应的开始符号即可。da[
/da]
/da{
/da}
/da'
/da"
/da<
/dat
: 同理,删除符号及其内部内容。
在可视模式下删除内容
- 按
v
(字符可视)、V
(行可视) 或Ctrl+v
(块可视) 进入可视模式。 - 使用方向键 (
h
,j
,k
,l
) 或其它移动命令(如w
,b
, ,0
,G
)来高亮选择你想要删除的文本区域。 - 按
d
或x
删除选中的高亮文本,删除后会自动回到命令模式。
重要补充与技巧
- 撤销 (
u
): 在命令模式下,按u
可以撤销上一次的操作(包括删除),这是救命稻草!连续按u
可以撤销更早的操作。 - 重做 (
Ctrl+r
): 如果撤销错了,按Ctrl+r
可以重做被撤销的操作。 - 删除与剪切: 在 vi 中,
d
命令(以及x
,dd
等)不仅仅是删除,它实际上是将内容剪切到了未命名寄存器中,这意味着你删除的内容可以被粘贴 (p
或P
) 出来! - 粘贴 (
p
/P
):p
: 在光标之后粘贴最后一次删除(剪切)的内容。P
(Shift+p): 在光标之前粘贴最后一次删除(剪切)的内容。- 用
dd
删除一行后,移动光标到另一行,按p
可以将被删除的行粘贴到当前行下方。
- 删除到缓冲区/寄存器: 高级用户可以在
d
命令前指定一个命名寄存器来保存删除的内容("a5dd
将删除的 5 行保存到寄存器a
中,之后用"ap
粘贴寄存器a
的内容)。 - 数字前缀: 几乎所有删除命令前面都可以加一个数字
N
,表示执行该命令N
次。5x
: 删除光标处及后面 4 个字符(共 5 个)。3dw
: 删除从光标处开始的 3 个单词。4dd
: 删除从当前行开始的 4 行。
- 命令: 在命令模式下按 (点) 会重复执行上一次的修改命令(包括删除操作),非常高效。
总结与建议
在 vi 中删除内容的关键在于:
- 确认模式: 执行删除前务必按
Esc
确保处于命令模式(或可视模式)。 - 选择合适的命令: 根据你想删除的范围(字符、单词、行、特定区域、括号内等)选择最精确的命令(
x
,dw
,dd
,daw
,di(
,dt.
等)。 - 善用数字和范围: 使用数字前缀 (
5dd
) 和移动命令 (d$
,dG
) 可以高效删除大块内容。 - 理解删除即剪切: 删除的内容通常可以粘贴 (
p
/P
) 回来。 - 大胆撤销: 误删时立即按
u
撤销。
掌握这些删除命令是熟练使用 vi 的基础,开始时可能会觉得需要记忆很多按键,但随着练习,它们会变得非常自然和高效,建议在非关键文件上多加练习,体验不同命令的效果。u
是你的安全网!
引用说明:
- 本指南基于标准的 vi 和 Vim 编辑器的核心功能编写,参考了 Unix/Linux 系统内置的 vi/vim 手册页 (
man vi
,man vim
)。 - 命令描述符合 POSIX 标准以及 Bram Moolenaar 的 Vim 文档精神。
- 文本对象操作(如
daw
,di(
)的概念在 Vim 中得到了更完善的扩展,但在大多数现代 vi 实现(如nvi
,elvis
)或兼容模式下也基本可用,核心命令 (x
,dd
,dw
) 在所有 vi 变体中一致。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6748.html