在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