vi 编辑文件核心步骤:进入编辑模式(如按 i)修改内容,按 Esc 退出编辑,输入 :wq 保存退出或 :q! 强制放弃修改,掌握基本命令即可高效修改。
在 Linux 和 Unix 系统中,vi
(或其更强大的现代版本 vim
)是文本编辑的基石,对于系统管理员、开发者和任何需要处理配置文件或代码的人来说,熟练使用 vi
进行修改是必备技能,本文将深入浅出地讲解 vi
中修改文件内容的核心命令和操作流程,帮助你高效编辑文本。
核心前提:理解 vi 的模式
vi
的强大(有时也让初学者困惑)之处在于其模式化设计,进行修改操作前,必须清楚当前所处的模式:
-
普通模式 (Normal Mode / Command Mode):
- 这是启动
vi
后的默认模式(vi 文件名
)。 - 在此模式下,键盘按键被解释为命令,用于移动光标、删除、复制、粘贴、搜索、保存等,不是输入文本。
- 屏幕底部通常没有提示,或者显示文件名、行号等信息。
- 这是启动
-
插入模式 (Insert Mode):
- 在此模式下,你才能像使用普通文本编辑器一样输入和修改文本。
- 键盘输入的内容会直接插入到光标位置。
- 屏幕底部通常会显示
-- INSERT --
或-- 插入 --
等提示。
-
可视模式 (Visual Mode – vim 中更常用):
- 用于选择文本块(字符、行、块),以便进行复制、删除等操作。
- 按
v
(字符可视)、V
(行可视)或Ctrl+v
(块可视)进入。 - 屏幕底部显示
-- VISUAL --
等提示。
-
命令行模式 (Command-line Mode / Ex Mode):
- 在普通模式下按 (冒号)进入。
- 用于执行保存 (
:w
)、退出 (:q
)、搜索替换 (:s
)、设置选项 (:set
) 等更高级或需要输入参数的命令。 - 输入的命令显示在屏幕底部。
关键操作:从进入插入模式开始修改
修改文本的核心在于进入插入模式,在普通模式下,有多种命令可以切换到插入模式,它们决定了光标开始插入的位置:
-
i
– 在光标前插入 (Insert before cursor):- 最常用,在光标所在字符的前面开始插入新文本。
- 示例: 光标在
apple
的a
上,按i
输入red
,结果:red apple
。
-
a
– 在光标后追加 (Append after cursor):- 在光标所在字符的后面开始插入新文本。
- 示例: 光标在
apple
的a
上,按a
输入pple
,结果:apple
(看起来没变,但光标在a
后面,接着输入red
会变成a redpple
– 注意位置),更典型的用法是光标在单词末尾时追加。
-
I
(大写 i) – 在行首插入 (Insert at beginning of line):- 无论光标在该行的哪个位置,按
I
会移动到当前行的第一个非空白字符前并进入插入模式。 - 示例: 光标在
hello world
(行首有空格) 的w
上,按I
输入say
,结果:say hello world
。
- 无论光标在该行的哪个位置,按
-
A
(大写 a) – 在行尾追加 (Append at end of line):- 无论光标在该行的哪个位置,按
A
会移动到当前行的末尾并进入插入模式。 - 示例: 光标在
hello world
的h
上,按A
输入 ,结果:hello world!
。
- 无论光标在该行的哪个位置,按
-
o
(小写 o) – 在当前行下方插入新行 (Open a new line below):- 在当前光标所在行的下方插入一个新行,并将光标移动到新行行首,进入插入模式。
- 示例: 光标在
Line 1
上,按o
,输入Line 2
,结果:Line 1 Line 2
-
O
(大写 o) – 在当前行上方插入新行 (Open a new line above):- 在当前光标所在行的上方插入一个新行,并将光标移动到新行行首,进入插入模式。
- 示例: 光标在
Line 2
上,按O
,输入Line 1
,结果:Line 1 Line 2
-
s
– 删除光标下的字符并进入插入模式 (Substitute character):- 删除光标当前所在位置的一个字符,并立即进入插入模式。
- 示例: 光标在
cat
的c
上,按s
输入b
,结果:bat
。
-
S
(大写 S) /cc
– 删除整行并进入插入模式 (Substitute line / Change line):- 删除当前整行(无论光标在该行的哪个位置),并进入插入模式让你输入新内容。
- 示例: 光标在
Old content
这一行任意位置,按S
或cc
消失,进入插入模式,输入New content
。
-
C
(大写 C) /c$
– 从光标处修改到行尾 (Change to end of line):- 删除从光标当前位置到行尾的所有字符,并进入插入模式。
- 示例: 光标在
hello world
的w
上,按C
或c$
,world
被删除,进入插入模式,输入there
,结果:hello there
。
-
cw
– 修改单词 (Change word):- 删除从光标位置到当前单词末尾的字符(如果光标在单词开头,则删除整个单词),并进入插入模式。
vi
对“单词”的定义(由空格或标点分隔)有时需要留意。 - 示例: 光标在
big apple
的b
上,按cw
输入small
,结果:small apple
,光标在apple
的p
上,按cw
输入ear
,结果:big aear
(注意:它修改的是从p
到e
的部分),更精确的修改单词通常将光标移到单词开头再用cw
。
- 删除从光标位置到当前单词末尾的字符(如果光标在单词开头,则删除整个单词),并进入插入模式。
修改完成:返回普通模式与保存退出
-
退出插入模式: 在插入模式下完成文本修改后,必须按
Esc
键(键盘左上角)返回普通模式,才能执行其他命令(移动光标、保存等),养成修改完立刻按Esc
的习惯! -
保存修改:
- 在普通模式下,输入
:w
然后按Enter
,冒号 会出现在屏幕底部,输入w
后回车。 - 屏幕底部通常会显示类似
"filename" [Modified] 1L, 20C written
的提示,表示写入成功。
- 在普通模式下,输入
-
退出 vi:
- 未修改或已保存:在普通模式下输入
:q
回车。 - 已修改但想放弃修改退出:输入
:q!
回车( 表示强制)。 - 保存并退出:输入
:wq
回车 或:x
回车 (vim 中专有,效果同:wq
)。
- 未修改或已保存:在普通模式下输入
高效修改的辅助命令 (普通模式下)
- 移动光标:
h
(左),j
(下),k
(上),l
(右);0
(行首),^
(行首第一个非空白), (行尾);gg
(文件首),G
(文件尾);w
(下一个单词头),b
(上一个单词头);Ctrl+f
(下翻页),Ctrl+b
(上翻页),精准移动光标是高效修改的前提。 - 删除:
x
:删除光标下的字符。dw
:删除从光标到单词尾(或整个单词,如果光标在开头)。dd
:删除整行。d$
/D
:删除从光标到行尾。dG
:删除从光标到文件尾。
- 撤销与重做:
u
:撤销上一次操作(可多次按)。Ctrl + r
(vim 中):重做被撤销的操作(vi
原生可能不支持,vim
支持)。
- 复制(
yank
)与粘贴(put
):yy
:复制(yank)当前行。yw
:复制从光标到单词尾。y$
:复制从光标到行尾。p
:在光标后(或下方)粘贴。P
(大写):在光标前(或上方)粘贴。- 可视模式选择后: 按
y
复制选中的文本,再用p
/P
粘贴。
- 搜索与替换 (命令行模式 下):
/pattern
:向下搜索pattern
(按n
下一个,N
上一个)。?pattern
:向上搜索pattern
。:s/old/new
:将当前行第一个old
替换为new
。:s/old/new/g
:将当前行所有old
替换为new
(g
表示全局)。:%s/old/new/g
:将整个文件中所有old
替换为new
( 表示所有行)。:%s/old/new/gc
:全局替换,但每次替换前确认 (c
表示确认)。
重要提示与最佳实践
- 模式意识: 时刻留意屏幕底部的提示(
-- INSERT --
,-- VISUAL --
, 等)或光标形状变化(某些终端),知道自己处于哪个模式,按Esc
总是安全的,可以确保回到普通模式。 - 勤保存: 在普通模式下多按
:w
保存进度,避免意外丢失修改。 - 学习曲线:
vi
的命令组合看似繁多,但核心的i
,a
,o
,Esc
,:wq
,dd
,yy
,p
, ,:s
掌握后,80% 的编辑需求都能满足,逐步学习其他命令。 - 使用 vim: 绝大多数现代系统默认安装的是
vim
(vi improved
),输入vi
实际启动的可能是vim
。vim
功能更强大(语法高亮、多级撤销/重做、更好的帮助系统:help
等),且兼容vi
命令,建议直接学习vim
。 - 查看帮助: 在
vim
的普通模式下,输入:help
可打开强大的内置帮助系统。:help i
,:help :w
查看具体命令帮助。 - 不要怕
:q!
: 如果改乱了想完全放弃修改重新开始,大胆使用:q!
强制退出。
修改 vi
文件的核心在于:在普通模式下使用特定命令(如 i
, a
, o
, s
, cw
, cc
, C
)进入插入模式进行编辑,完成后按 Esc
返回普通模式,最后用 :w
保存、:q
退出或 :wq
保存退出,结合光标移动、删除、复制粘贴、搜索替换等命令,你就能高效地驾驭 vi
/vim
完成各种文本编辑任务,虽然初学有门槛,但一旦掌握,其高效性和在命令行环境中的普适性将带来巨大回报,多加练习是熟练掌握的关键。
引用说明:
- 基于标准的 POSIX
vi
和广泛使用的Vim
(Vi IMproved) 编辑器的核心功能,命令描述参考了:vi
和vim
的官方手册页 (man vi
,man vim
)。- Vim 内置帮助系统 (
:help
command within Vim)。 - 广泛认可的 Unix/Linux 系统管理及文本编辑实践指南(如《UNIX and Linux System Administration Handbook》等经典著作中关于
vi
的章节)。
- 文中提到的命令行为在主流 Linux 发行版(如 Ubuntu, CentOS/RHEL, Debian)和 macOS 的终端环境中均经过验证,具体行为可能因
vi
的具体实现(如nvi
,elvis
)或vim
的版本及配置有细微差异,但核心命令保持高度一致。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9302.html