vi修改文件的关键技巧是什么?

vi 编辑文件核心步骤:进入编辑模式(如按 i)修改内容,按 Esc 退出编辑,输入 :wq 保存退出或 :q! 强制放弃修改,掌握基本命令即可高效修改。

在 Linux 和 Unix 系统中,vi(或其更强大的现代版本 vim)是文本编辑的基石,对于系统管理员、开发者和任何需要处理配置文件或代码的人来说,熟练使用 vi 进行修改是必备技能,本文将深入浅出地讲解 vi 中修改文件内容的核心命令和操作流程,帮助你高效编辑文本。

核心前提:理解 vi 的模式

vi 的强大(有时也让初学者困惑)之处在于其模式化设计,进行修改操作前,必须清楚当前所处的模式:

  1. 普通模式 (Normal Mode / Command Mode):

    • 这是启动 vi 后的默认模式(vi 文件名)。
    • 在此模式下,键盘按键被解释为命令,用于移动光标、删除、复制、粘贴、搜索、保存等,不是输入文本
    • 屏幕底部通常没有提示,或者显示文件名、行号等信息。
  2. 插入模式 (Insert Mode):

    • 在此模式下,你才能像使用普通文本编辑器一样输入和修改文本
    • 键盘输入的内容会直接插入到光标位置。
    • 屏幕底部通常会显示 -- INSERT ---- 插入 -- 等提示。
  3. 可视模式 (Visual Mode – vim 中更常用):

    • 用于选择文本块(字符、行、块),以便进行复制、删除等操作。
    • v(字符可视)、V(行可视)或 Ctrl+v(块可视)进入。
    • 屏幕底部显示 -- VISUAL -- 等提示。
  4. 命令行模式 (Command-line Mode / Ex Mode):

    • 在普通模式下按 (冒号)进入。
    • 用于执行保存 (:w)、退出 (:q)、搜索替换 (:s)、设置选项 (:set) 等更高级或需要输入参数的命令。
    • 输入的命令显示在屏幕底部。

关键操作:从进入插入模式开始修改

修改文本的核心在于进入插入模式,在普通模式下,有多种命令可以切换到插入模式,它们决定了光标开始插入的位置:

  1. i – 在光标前插入 (Insert before cursor):

    • 最常用,在光标所在字符的前面开始插入新文本。
    • 示例: 光标在 applea 上,按 i 输入 red,结果:red apple
  2. a – 在光标后追加 (Append after cursor):

    • 在光标所在字符的后面开始插入新文本。
    • 示例: 光标在 applea 上,按 a 输入 pple,结果:apple (看起来没变,但光标在 a 后面,接着输入 red 会变成 a redpple – 注意位置),更典型的用法是光标在单词末尾时追加。
  3. I (大写 i) – 在行首插入 (Insert at beginning of line):

    • 无论光标在该行的哪个位置,按 I 会移动到当前行的第一个非空白字符前并进入插入模式。
    • 示例: 光标在 hello world (行首有空格) 的 w 上,按 I 输入 say,结果:say hello world
  4. A (大写 a) – 在行尾追加 (Append at end of line):

    • 无论光标在该行的哪个位置,按 A 会移动到当前行的末尾并进入插入模式。
    • 示例: 光标在 hello worldh 上,按 A 输入 ,结果:hello world!
  5. o (小写 o) – 在当前行下方插入新行 (Open a new line below):

    • 在当前光标所在行的下方插入一个新行,并将光标移动到新行行首,进入插入模式。
    • 示例: 光标在 Line 1 上,按 o,输入 Line 2,结果:
      Line 1
      Line 2
  6. O (大写 o) – 在当前行上方插入新行 (Open a new line above):

    • 在当前光标所在行的上方插入一个新行,并将光标移动到新行行首,进入插入模式。
    • 示例: 光标在 Line 2 上,按 O,输入 Line 1,结果:
      Line 1
      Line 2
  7. s – 删除光标下的字符并进入插入模式 (Substitute character):

    • 删除光标当前所在位置的一个字符,并立即进入插入模式。
    • 示例: 光标在 catc 上,按 s 输入 b,结果:bat
  8. S (大写 S) / cc – 删除整行并进入插入模式 (Substitute line / Change line):

    • 删除当前整行(无论光标在该行的哪个位置),并进入插入模式让你输入新内容。
    • 示例: 光标在 Old content 这一行任意位置,按 Scc消失,进入插入模式,输入 New content
  9. C (大写 C) / c$ – 从光标处修改到行尾 (Change to end of line):

    • 删除从光标当前位置到行尾的所有字符,并进入插入模式。
    • 示例: 光标在 hello worldw 上,按 Cc$world 被删除,进入插入模式,输入 there,结果:hello there
  10. cw – 修改单词 (Change word):

    • 删除从光标位置到当前单词末尾的字符(如果光标在单词开头,则删除整个单词),并进入插入模式。vi 对“单词”的定义(由空格或标点分隔)有时需要留意。
    • 示例: 光标在 big appleb 上,按 cw 输入 small,结果:small apple,光标在 applep 上,按 cw 输入 ear,结果:big aear (注意:它修改的是从 pe 的部分),更精确的修改单词通常将光标移到单词开头再用 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 表示确认)。

重要提示与最佳实践

  1. 模式意识: 时刻留意屏幕底部的提示(-- INSERT --, -- VISUAL --, 等)或光标形状变化(某些终端),知道自己处于哪个模式,按 Esc 总是安全的,可以确保回到普通模式。
  2. 勤保存: 在普通模式下多按 :w 保存进度,避免意外丢失修改。
  3. 学习曲线: vi 的命令组合看似繁多,但核心的 i, a, o, Esc, :wq, dd, yy, p, , :s 掌握后,80% 的编辑需求都能满足,逐步学习其他命令。
  4. 使用 vim: 绝大多数现代系统默认安装的是 vim (vi improved),输入 vi 实际启动的可能是 vimvim 功能更强大(语法高亮、多级撤销/重做、更好的帮助系统 :help 等),且兼容 vi 命令,建议直接学习 vim
  5. 查看帮助:vim 的普通模式下,输入 :help 可打开强大的内置帮助系统。:help i, :help :w 查看具体命令帮助。
  6. 不要怕 :q! 如果改乱了想完全放弃修改重新开始,大胆使用 :q! 强制退出。

修改 vi 文件的核心在于:在普通模式下使用特定命令(如 i, a, o, s, cw, cc, C)进入插入模式进行编辑,完成后按 Esc 返回普通模式,最后用 :w 保存、:q 退出或 :wq 保存退出,结合光标移动、删除、复制粘贴、搜索替换等命令,你就能高效地驾驭 vi/vim 完成各种文本编辑任务,虽然初学有门槛,但一旦掌握,其高效性和在命令行环境中的普适性将带来巨大回报,多加练习是熟练掌握的关键。


引用说明:

  • 基于标准的 POSIX vi 和广泛使用的 Vim (Vi IMproved) 编辑器的核心功能,命令描述参考了:
    • vivim 的官方手册页 (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

(0)
酷番叔酷番叔
上一篇 19小时前
下一篇 19小时前

相关推荐

  • 3D拉伸命令如何将2D草图变为3D实体?

    3D拉伸命令是将2D草图转化为3D实体的关键操作,它通过将选定的二维轮廓沿指定方向延展,快速生成基础的三维形状,是构建复杂模型最常用的基础工具之一。

    2025年7月15日
    1500
  • Runtime.exec如何避免命令注入漏洞?

    在Java中调用CMD命令是一种常见的需求,尤其在需要执行系统级操作(如文件处理、服务启停或调用外部程序)时,Java通过Runtime.exec()和ProcessBuilder类提供此功能,以下是详细实现方法和注意事项:try { // 执行单条命令 Process process = Runtime.ge……

    4天前
    700
  • SCP需要额外安装吗?

    scp命令是OpenSSH工具套件的一部分,在绝大多数Linux/Unix系统(包括macOS)中,OpenSSH通常作为基础组件预装,直接使用scp命令通常无需额外安装特定软件包,如果系统确实缺失,需要安装的是openssh-client包(或其等效包),而非名为“scp”的独立包。

    3天前
    500
  • 核心概念有哪些常见误解?

    使用纯DOS命令为U盘安装系统是传统且高风险的操作,现代系统安装已普遍采用图形化工具(如微软官方Media Creation Tool),本指南将同时说明传统DOS方法与现代安全方案,强烈建议普通用户选择官方工具,传统DOS命令制作启动U盘(适用于特殊场景)准备工作必备材料8GB+空白U盘(操作会清空所有数据……

    3天前
    500
  • 如何在Windows PE中安全执行外部命令?

    PE环境执行外部命令的4种方法通过内置命令提示符(推荐)步骤:启动PE系统(如通过U盘引导),打开命令提示符(桌面图标或按Win+R输入cmd),直接输入命令(如磁盘检查):chkdsk C: /f调用外部程序(需提前放入PE介质):D:\Tools\DiskGenius.exe //假设工具在D盘使用PECM……

    2025年6月19日
    2100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信