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 内置帮助系统 (:helpcommand 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
 
                 
        