第 五 部 分 编 辑 器 与 实 用 程 序
第 17 章 Vi 编 辑 器
任 何 一 套 Linux 系 统 上 可 能 有 各 种 不 同 的 编 辑 器 供 用 户 使 用 , 但 所 有 的 系统 都 有 两 个 标 准 的 编 辑 器 : Ed 编 辑 器 及 Vi 编 辑 器 。 Ed 及 Vi 编 辑 器 是 Un ix 系统 下 的 标 准 应 用 程 序 , 它 们 是 在 Unix 系 统 下 最 初 开 发 的 Ex 编 辑 器 的 基 础 上 发展 而 来 的 。 Vi 是 可 视 化 ( visua l) 的 意 思 , Vi 编 辑 器 目 前 仍 然 是 Linux 系 统 下使 用 最 为 广 泛 的 编 辑 器 之 一 , 而 行 编 辑 器 Ed 目 前 已 经 很 少 使 用 。 Ed 作 为 行 编辑 器 , 它 一 次 仅 能 编 辑 并 显 示 一 行 , 因 此 , 它 使 用 起 来 非 常 困 难 且 不 方 便 。 与Ed 不 同 , Vi 可 一 次 在 整 个 屏 幕 上 显 示 数 据 , 你 可 以 编 辑 显 示 在 屏 幕 上 的 任 何 数据 。
当 Un ix 系 统 最 初 被 开 发 出 来 时 的 时 候 , Vi 编 辑 器 与 当 时 其 它 各 种 编 辑 器 相比 是 一 个 极 大 的 进 步 。 自 从 Vi 编 辑 器 被 开 发 出 来 以 后 , Unix 及 Linux 系 统 下 许多 功 能 更 强 大 、 使 用 更 方 便 的 编 辑 器 , 如 W o rdPerfect 等 编 辑 器 相 继 被 开 发 出来 。 在 你 的 Linux 系 统 下 可 能 有 你 更 熟 悉 的 文 本 编 辑 器 或 文 字 处 理 软 件 。 如 果
有 , 则 你 可 以 不 必 学 习 Vi 编 辑 器 。 OpenLinux 系 统 有 一 个 名 为 C risplite 的 编 辑器 , 它 比 Vi 编 辑 器 使 用 起 来 要 容 易 的 多 。 但 是 , 由 于 Vi 编 辑 器 是 所 有 Unix 及Linux 系 统 下 标 准 的 编 辑 器 , 了 解 Vi 编 辑 器 对 你 仍 然 是 非 常 有 帮 助 的 。 如 果 你不 得 不 在 另 外 一 个 系 统 下 工 作 , 而 该 系 统 有 一 个 与 你 的 系 统 不 同 的 字 处 理 软 件 , 这 时 你 可 以 使 用 Vi 编 辑 器 , 因 为 对 所 有 Un ix 及 Linux 系 统 的 任 何 版 本 , Vi 编辑 器 是 完 全 相 同 的 。
由 于 其 可 视 化 界 面 , 对 初 学 者 来 说 , Vi 编 辑 器 相 对 于 行 编 辑 器 Ed 学 起 来要 容 易 些 。 但 Vi 编 辑 器 又 是 一 个 非 常 复 杂 的 编 辑 器 , 它 有 大 量 复 杂 的 命 令 , 当初 次 尝 试 学 习 该 编 辑 器 时 , 初 学 者 非 常 容 易 变 的 不 知 所 措 。 因 为 Vi 编 辑 器 通 常可 以 用 有 多 种 细 微 差 别 的 方 法 来 完 成 相 同 的 操 作 。 本 章 将 首 先 重 点 介 绍 Vi 编 辑器 的 核 心 命 令 , 这 些 核 心 命 令 用 来 完 成 一 些 基 本 的 操 作 。 如 果 你 一 旦 掌 握 这 些核 心 命 令 , 你 可 以 考 虑 去 掌 握 一 些 更 复 杂 的 操 作 与 命 令 。 这 些 都 将 在 本 章 中 给予 介 绍 。
Vi 命 令 模 式 、 输 入 模 式 及 行 编 辑 模 式
Vi 编 辑 器 用 键 盘 来 完 成 两 类 不 同 的 操 作 : 完 成 编 辑 命 令 及 接 收 字 符 输 入 。当 处 于 编 辑 命 令 模 式 时 , 一 些 特 定 的 键 用 来 完 成 删 除 操 作 , 一 些 键 用 来 执 行 修改 操 作 , 还 有 一 些 用 来 完 成 关 标 移 动 。 当 处 于 字 符 输 入 模 式 下 时 , 这 些 键 则 表示 要 输 入 到 正 在 编 辑 的 文 件 中 的 字 符 。 在 PC 机 上 , 许 多 常 见 的 编 辑 器 将 键 盘
上 的 按 键 根 据 以 上 两 种 模 式 分 把 它 们 分 为 两 类 。 其 中 , 字 母 类 按 键 用 来 输 入 字符 , 功 能 键 及 控 制 键 用 来 完 成 特 定 的 编 辑 命 令 , 如 删 除 文 本 、 移 动 光 标 等 。
这 类 PC 机 上 的 编 辑 器 必 须 要 在 有 扩 展 键 的 键 盘 上 才 能 完 成 文 本 编 辑 , 这些 扩 展 键 包 括 功 能 键 及 光 标 键 。 但 是 , Un ix 系 统 的 设 计 是 独 立 于 任 何 的 特 定 的键 盘 的 , 任 何 类 型 的 终 端 及 PC 机 键 盘 都 可 以 映 射 到 Unix 系 统 上 。 Unix 系 统下 的 编 辑 器 在 设 计 的 过 程 中 假 定 终 端 键 盘 只 具 有 字 母 按 键 、 部 分 基 本 控 制 键 及ESC 键 、 ENTER 键 等 基 本 功 能 键 。 与 PC 机 上 的 编 辑 器 把 键 盘 上 按 键 分 成 字符 键 及 功 能 键 不 同 , Unix 系 统 下 的 编 辑 器 有 两 个 独 立 的 操 作 模 式 : 命 令 模 式 及输 入 模 式 。 在 命 令 模 式 下 , 键 盘 上 所 有 的 键 入 都 作 为 命 令 来 接 收 。 在 输 入 模 式时 , 你 从 键 盘 上 的 输 入 就 成 为 正 文 来 接 收 。
当 你 改 变 编 辑 器 的 操 作 模 式 时 , 键 盘 上 的 按 键 的 功 能 就 会 改 变 。 当 启 动 并进 人 Vi 编 辑 器 时 , 你 处 于 命 令 模 式 下 。 此 时 , 所 有 按 键 的 键 入 都 被 作 为 命 令 来接 收 , 按 某 键 将 执 行 某 特 定 的 命 令 , 例 如 : 键 入 x 键 将 删 除 当 前 编 辑 文 本 中 的字 符 ; 键 入 l 键 将 把 光 标 键 右 移 一 个 字 符 。 在 命 令 模 式 下 键 入 一 些 编 辑 命 令 如 : 键 入 a 键 或 i 键 将 进 入 输 入 模 式 , 也 就 是 说 , 键 入 i 键 将 退 出 命 令 模 式 而 进 入 输入 模 式 。
一 旦 进 入 输 入 模 式 , 键 盘 上 键 的 功 能 将 改 变 , 此 时 , 键 盘 上 的 每 个 键 将 代表 一 个 将 要 键 入 到 文 本 中 的 字 符 , 键 盘 也 就 类 似 于 一 部 打 字 机 , 当 你 键 入 某 个键 时 , 相 应 的 字 符 就 被 添 加 到 编 辑 的 文 本 中 去 。 例 如 , 如 果 你 键 入 x 键 , 字 符x 将 被 添 加 到 文 本 中 去 ; 键 入 TAB 键 将 输 入 制 表 符 到 文 本 中 去 。 唯 一 例 外 的 是ESC 键 。 如 果 你 键 入 ESC 键, Vi 编 辑 器 将 自 动 回 到 命 令 模 式 下 , 此 时 所 有 的
按 键 又 成 为 编 辑 命 令 。 但 你 可 以 键 入 某 个 输 入 编 辑 命 令 又 进 入 输 入 模 式 下 。 当编 辑 文 本 的 时 候 , 你 会 发 现 自 己 不 断 地 在 命 令 模 式 与 输 入 模 式 之 间 来 回 切 换 。
尽 管 在 Vi 编 辑 器 的 命 令 模 式 下 能 完 成 大 多 数 的 编 辑 操 作 , 但 是 有 些 操 作 , 如 文 件 保 存 及 全 局 替 换 是 不 能 实 现 的 。 对 于 这 类 操 作 , 你 必 须 进 入 底 行 命 令 模式 。 你 可 以 使 用 Vi 的 冒 号 命 令 ( :) 进 入 底 行 命 令 模 式 。 :命 令 是 一 个 特 殊 的 Vi 编 辑 器 命 令 , 它 能 够 使 你 执 行 行 命 令 操 作 。 如 果 进 入 : 命 令 , 屏 幕 的 底 行 将 出 现一 编 辑 行 , 而 光 标 将 出 现 在 该 行 的 行 首 , 此 时 , 你 处 于 底 行 命 令 模 式 下 。 在 该模 式 下 , 你 可 以 在 该 行 上 键 入 编 辑 命 令 , 然 后 键 入 ENTER 键 , 该 编 辑 命 令 将被 执 行 。 进 入 该 模 式 只 是 暂 时 性 的 , 键 入 ENTER 键 后 将 退 出 该 模 式 , 然 后 自动 进 入 Vi 编 辑 器 的 命 令 模 式 下 , 光 标 也 将 到 回 屏 幕 上 先 前 所 在 的 位 置 。 图 17-
1 说 明 了 Vi 编 辑 器 下 的 三 种 不 同 的 操 作 模 式 。
命 令 模 式 及 输 入 模 式 是 两 种 独 立 的 操 作 模 式 , 加 上 刚 才 介 绍 的 底 行 命 令 模式 , 因 此 在 Vi 编 辑 器 下 有 三 种 不 同 的 操 作 模 式 。 底 行 命 令 模 式 只 在 一 行 上 进 行操 作 : 你 键 入 命 令 及 其 参 数 , 然 后 键 入 ENTER 键 来 执 行 该 命 令 或 退 出 该 模 式 。但 在 Vi 命 令 模 式 下 , 仅 键 入 单 个 键 来 接 收 命 令 , 通 过 键 入 单 个 键 或 一 系 列 的 键来 完 成 一 个 编 辑 命 令 或 一 系 列 的 编 辑 命 令 。 Vi 编 辑 器 的 输 入 模 式 用 来 把 字 符 输入 到 文 本 文 件 中 去 , 除 ESC 键 外 的 所 有 键 都 是 有 效 键 ( 此 时 , 键 入 ESC 键 将返 回 到 命 令 模 式 下 ) 。
图 17-1Vi 编辑模式:输入模式、命令模式及底行命令模式
在 Vi 编 辑 器 下 创 建 新 文 件 、 保 存 编 辑 文 件 及 退 出 编 辑 的 文
件
在 Vi 编 辑 器 下 , 你 可 以 创 建 、 保 存 、 关 闭 及 退 出 编 辑 的 文 件 。 彼 此 这 些 命令 都 完 全 不 同 。 保 存 及 退 出 一 个 文 件 的 编 辑 需 进 入 底 行 命 令 模 式 , 而 关 闭 一 个编 辑 的 文 件 是 一 个 Vi 编 辑 命 令 。创 建 一 个 文 件 通 常 是 在 启 动 Vi 编 辑 器 时 在 Shell
命 令 行 上 指 定 该 创 建 的 文 件 名 。
要 编 辑 一 个 文 件 , 只 需 在 Shell 命 令 行 上 键 入 vi 及 要 编 辑 的 文 件 名 。 如 果该 文 件 不 存 在 , 那 么 系 统 将 创 建 该 文 件 。 事 实 上 , 指 定 一 个 不 存 在 的 文 件 名 就是 告 诉 Vi 编 辑 器 去 创 建 该 文 件 。 下 面 的 命 令 启 动 Vi 编 辑 器 , 并 编 辑 booklist 文 件 , 如 果 该 文 件 不 存 在 , 编 辑 器 将 创 建 该 文 件 。
$ vi booklist
执 行 上 述 vi 命 令 后 , 你 将 键 入 Vi 编 辑 器 的 命 令 模 式 。 每 个 键 入 都 将 成 为 一个 Vi 编 辑 命 令 。 而 屏 幕 成 为 编 辑 的 文 本 文 件 的 一 个 显 示 窗 口 , 即 文 本 被 显 示 到显 示 屏 上 。 首 先 是 文 本 的 第 一 屏 显 示 在 屏 幕 上 , 而 光 标 停 留 在 左 上 角 的 位 置 上 。当 编 辑 一 个 新 创 建 的 文 件 时 没 有 字 符 显 示 在 屏 幕 上 , 而 只 是 在 屏 幕 的 左 边 有 一列 符 号 ~ , 该 符 号 表 示 屏 幕 此 部 分 不 是 文 件 的 内 容 。
必 须 记 住 , 当 你 最 初 进 入 Vi 编 辑 器 时 , 编 辑 器 处 于 命 令 模 式 下 , 要 输 入 字符 , 必 须 进 入 输 入 模 式 。 在 命 令 模 式 下 , 进 入 按 键 a 表 示 要 往 文 本 文 件 中 添 加
( append ) 文 本 , 于 是 , 编 辑 器 进 入 输 入 模 式 下 。 此 时 , 你 可 以 象 操 作 打 字 机那 样 去 操 作 键 盘 , 并 输 入 文 本 至 文 件 。 如 果 你 键 入 ENTER 键 , 你 将 在 新 的 一行 上 开 始 文 本 编 辑 。 编 辑 完 文 本 之 后 , 你 可 以 按 ESC 键 退 出 输 入 模 式 而 进 入 命令 模 式 下 。
一 旦 完 成 上 述 操 作 , 需 要 退 出 Vi 编 辑 器 , 你 可 以 键 入 两 个 大 写 的 字 母 ZZ , 即 按 注 SHIFT 键 的 同 时 击 打 字 母 键 Z 键 两 次 。 该 命 令 将 首 先 保 存 编 辑 的 文 本 , 然 后 退 出 Vi 编 辑 器 并 返 回 到 Linux 系 统 的 Shell 下 。
当 你 开 始 编 辑 一 个 文 件 时 , Vi 编 辑 器 将 首 先 把 该 文 件 读 入 到 工 作 缓 冲 区 。
对 文 件 的 任 何 修 改 与 添 加 都 是 对 文 本 副 本 ( 在 文 件 缓 冲 区 中 ) 的 改 变 , 磁 盘 上的 原 文 件 仍 然 保 持 不 变 。 只 有 执 行 保 存 命 令 之 后 , 当 前 工 作 缓 冲 区 的 内 容 才 被保 存 并 覆 盖 原 文 件 。 完 成 每 次 编 辑 操 作 之 后 , 用 ZZ 命 令 可 以 在 退 出 之 前 保 存文 件 , 即 用 工 作 缓 冲 区 的 内 容 覆 盖 原 文 件 。
但 是 , 你 可 能 想 在 你 的 编 辑 过 程 中 多 次 保 存 一 个 文 件 。 要 多 次 保 存 文 件 而不 想 退 出 编 辑 器 , 你 可 以 进 入 Vi 编 辑 器 的 底 行 命 令 模 式 下 , 用 w 命 令 来 完 成 文件 的 保 存 。 这 与 其 它 字 处 理 软 件 的 磁 盘 命 令 基 本 相 同 。 在 Vi 编 辑 器 中 , 要 保 存文 件 , 首 先 键 入 :( 冒 号 键 ) 进 入 底 行 命 令 模 式 , 再 键 入 w 键 并 按 ENTER 键 。同 时 , 系 统 自 动 回 到 Vi 编 辑 器 的 命 令 模 式 下 。
初 学 者 通 常 要 范 的 一 个 错 误 是 : 在 输 入 模 式 下 , 要 保 存 编 辑 的 文 件 时 常 常忘 记 键 入 ESC 键 回 到 命 令 模 式 下 。 : 命 令 ( 冒 号 键 ) 是 一 个 编 辑 命 令 , 它 仅 仅在 命 令 模 式 下 才 能 执 行 。 如 果 你 在 输 入 模 式 下 键 入 : 键 ( 冒 号 键 ) , 编 辑 器 将 把它 认 为 是 字 符 : 添 加 到 文 本 中 去 。 因 此 , 在 输 入 模 式 下 , 如 果 你 要 保 存 文 件 , 你必 须 首 先 键 入 ESC 键 退 出 输 入 模 式 , 进 入 到 命 令 模 式 。 此 时 , 命 令 :w 将 保 存编 辑 的 文 本 。 必 须 指 出 的 是 , 带 文 件 名 参 数 的 :w 命 令 类 似 于 其 它 字 处 理 软 件 的另 存 为 ( Save AS ) 命 令 , 即 当 前 编 辑 的 文 件 将 被 保 存 为 你 刚 才 输 入 的 文 件 名 。同 时 , 当 编 辑 一 个 你 未 曾 命 名 的 文 件 时 , 你 也 要 使 用 :w 命 令 。 当 你 启 动 Vi
编 辑 器 时 没 有 键 入 文 件 名 参 数 , 编 辑 器 将 默 认 为 你 是 在 编 辑 一 个 未 命 名
( unnamed ) 的 文 件 。 下 面 的 例 子 中 , 用 户 在 Shell 下 启 动 Vi 编 辑 器 , 并 且 没有 指 定 编 辑 的 文 件 名 , 此 时 , 用 户 在 编 辑 一 个 未 命 名 ( unnamed ) 文 件 。
$ vi
你 可 以 在 未 命 名 ( unnamed ) 文 件 中 输 入 文 本 , 执 行 编 辑 操 作 与 命 令 , 但此 时 并 没 有 创 建 实 际 的 文 件 。 如 果 你 正 在 编 辑 一 个 未 命 名 ( unnamed ) 文 件 , Vi 编 辑 器 禁 止 使 用 ZZ 命 令 退 出 当 前 的 编 辑 工 作 , 因 此 , 你 必 须 首 先 创 建 该 编辑 的 文 件 。 你 可 以 使 用 带 文 件 名 参 数 的 :w 命 令 来 创 建 该 文 件 , 操 作 如 下 : 首 先必 须 回 到 命 令 模 式 下 , 然 后 键 入 :( 冒 号 ) 键 , 屏 幕 的 底 部 将 出 现 一 行 , 再 键 入w 键 , 一 个 空 格 及 创 建 的 文 件 名 , 最 后 键 入 ENTER 键 。
:w booklist
键 入 ENTER 键 后 , 你 将 返 回 到 命 令 模 式 下 , 光 标 也 将 停 留 在 光 标 先 前 所在 的 位 置 。 创 建 的 新 文 件 的 文 件 名 也 将 被 显 示 在 屏 幕 的 底 部 。 此 后 , 你 可 以 使用 ZZ 命 令 退 出 当 前 的 编 辑 工 作 。 需 要 指 出 的 是 , 如 果 你 指 定 的 文 件 已 经 存 在 , 文 件 创 建 与 保 存 将 失 败 。 出 现 这 种 情 况 , 你 只 需 重 复 上 述 存 在 , 键 入 另 外 一 个文 件 名 即 可 。
在 Vi 编 辑 器 中 , 你 可 以 使 用 :q 命 令 退 出 编 辑 器 。 与 ZZ 命 令 不 同 , 在 执 行 :q 命 令 之 前 , 编 辑 器 不 执 行 任 何 保 存 文 件 的 操 作 。 但 该 命 令 有 一 个 重 要 限 制 : 如果 你 在 上 一 次 保 存 之 后 作 了 任 何 修 改 , :q 命 令 将 失 败 , 即 它 不 会 退 出 编 辑 器 。但 是 , 你 可 以 在 :q 命 令 之 后 键 入 !( 惊 叹 号 ) 来 忽 略 该 限 制 。 命 令 :q !将 结 束 文 本编 辑 并 退 出 编 辑 器 , 同 时 , 它 不 保 存 上 一 次 保 存 之 后 的 任 何 修 改 。
有 许 多 Vi 编 辑 命 令 是 与 底 行 命 令 模 式 下 的 编 辑 命 令 相 等 同 的 , 例 如 Vi 编 辑命 令 ZZ 。 你 可 以 在 底 行 命 令 模 式 下 使 用 wq 命 令 来 完 成 与 Vi 编 辑 命 令 ZZ 相 同的 操 作 ,即 :wq 命 令 将 在 退 出 编 辑 器 之 前 先 保 存 编 辑 的 文 件 。因此 :wq 命 令 与 ZZ 命 令 是 完 全 等 同 的 。
在 Vi 编 辑 器 中 管 理 编 辑 模 式
保 存 、 退 出 及 向 文 件 中 增 加 文 本 三 个 命 令 涉 及 到 了 Vi 编 辑 器 的 三 种 模 式 。当 启 动 进 入 Vi 编 辑 器 时 , 编 辑 器 处 于 命 令 模 式 ; 键 入 a 命 令 将 进 入 输 入 模 式 , 你 可 以 在 这 种 模 式 下 输 入 文 本 ,此 时 ,键 入 ESC 键 将 从 输 入 模 式 回 到 命 令 模 式 。要 保 存 或 退 出 编 辑 的 文 件 , 你 必 须 用 :( 冒 号 ) 命 令 进 入 底 行 命 令 模 式 。 底 行 命令 模 式 下 的 w 和 q 将 保 存 并 退 出 编 辑 的 文 本 文 件 。 键 入 底 行 命 令 最 后 再 键 入ENTER 键 将 执 行 该 命 令 并 回 到 Vi 编 辑 器 命 令 模 式 下 ( 退 出 Vi 编 辑 器 命 令 除外 ) 。
管 理 Vi 编 辑 器 编 辑 模 式 的 困 难 在 于 你 必 须 知 道 你 所 处 在 模 式 。 在 Vi 编 辑 器的 一 个 编 辑 过 程 中 , 键 盘 不 断 地 在 输 入 模 式 与 命 令 模 式 下 相 互 改 变 。 同 时 , 这两 种 模 式 是 排 他 性 的 , 不 能 同 时 存 在 。 在 输 入 模 式 下 , 不 能 执 行 任 何 命 令 模 式下 的 命 令 , 而 在 命 令 模 式 下 , 不 能 进 行 任 何 输 入 。 没 有 任 何 提 示 告 诉 你 是 处 于输 入 模 式 下 还 是 处 于 命 令 模 式 下 。 如 果 你 认 为 你 处 于 输 入 模 式 下 , 而 实 际 上 你处 于 命 令 模 式 下 , 有 时 这 种 错 误 是 破 坏 性 的 。 有 时 , 你 处 于 命 令 模 式 下 , 而 你认 为 处 于 输 入 模 式 下 , 此 时 你 输 入 的 文 本 实 际 上 是 执 行 一 系 列 的 编 辑 命 令 , 这些 命 令 会 对 编 辑 文 件 产 生 一 些 意 想 不 到 的 操 作 。
如 果 你 不 知 道 自 己 所 处 在 的 模 式 , 你 可 以 键 入 ESC 键 来 间 接 地 判 断 出 你 所处 的 模 式 。 在 输 入 模 式 下 , 如 果 你 键 入 ESC 命 令 将 退 出 输 入 模 式 而 进 入 命 令 模式 下 。 但 是 , 在 命 令 模 式 下 键 入 ESC 命 令 , 你 会 听 到 扬 声 器 的 鸣 笛 声 。 如 果 你
键 入 ESC 命 令 后 扬 声 器 鸣 笛 , 则 表 明 你 处 于 命 令 模 式 下 。 但 如 果 没 有 任 何 事 情发 生 , 则 表 明 你 刚 从 输 入 模 式 下 返 回 到 命 令 模 式 下 。
一 个 常 见 的 错 误 是 : 你 通 常 在 输 入 模 式 下 试 图 结 束 文 本 文 件 的 编 辑 。 实 际上 , 你 只 能 在 命 令 模 式 下 才 能 结 束 一 次 编 辑 工 作 。 必 须 记 住 : 在 输 入 模 式 下 键入 ZZ 命 令 只 是 简 单 地 把 两 个 Z 字 符 输 入 到 编 辑 的 文 本 中 。 两 个 Z 字 符 出 现 在屏 幕 上 后 , Vi 编 辑 器 仍 然 处 于 输 入 模 式 下 , 并 等 待 用 户 的 进 一 步 输 入 。 要 结 束一 次 编 辑 工 作 , 你 必 须 键 入 ESC 键 , 退 出 输 入 模 式 而 回 到 命 令 模 式 , 再 键 入 ZZ 命 令 。 一 旦 进 入 命 令 模 式 , 键 盘 上 的 键 将 成 为 编 辑 命 令 , 而 两 个 大 写 的 ZZ 编辑 命 令 将 结 束 本 次 编 辑 工 作 , 并 保 存 编 辑 的 文 本 。
Vi 编 辑 命 令 : 常 用 操 作 命 令
本 节 将 介 绍 Vi 编 辑 器 的 一 系 列 编 辑 命 令 , 包 括 基 本 的 光 标 移 动 、 文 本 输 入 、查 询 及 编 辑 操 作 。 Vi 编 辑 器 实 用 程 序 设 计 的 目 的 是 用 来 编 辑 文 本 的 , 它 包 括 对文 本 行 的 操 作 、 字 符 的 操 作 、 句 子 的 操 作 甚 至 段 落 的 操 作 。 本 节 将 仅 仅 介 绍 对单 个 字 符 及 行 的 操 作 。 对 编 辑 文 件 中 文 本 的 其 它 操 作 ( 如 : 单 词 及 句 子 的 操 作 ) 将 在 本 章 后 半 部 分 的 高 级 操 作 与 命 令 中 作 详 细 介 绍 。
图 17-2Vi 编辑器常用命令要点小结
图 17-2 中 列 出 了 一 组 基 本 的 Vi 命 令 , 这 组 命 令 对 初 学 者 开 始 学 习 Vi 编 辑
器 时 是 非 常 重 要 的 。 表 17-1 列 出 了 本 节 介 绍 的 一 些 常 见 的 命 令 。
表 17-1Vi 编 辑 器 常 用 命 令
光 标 移 动 命 令 |
作 用 、 效 果 |
命 令 |
作 用 、 效 果 |
---|---|---|---|
h |
左移 |
x |
删 除 一 字 符 |
l |
右移 |
dd |
删 除 一 行 |
k |
上移 |
||
j |
下移 |
改 变 |
作 用 、 效 果 |
CTRL-F |
下 一 屏 |
r |
替 换 一 字 符 |
CTRL-B |
前 一 屏 |
cc |
改 变 一 行 |
G |
移 动 至 指 定 行 |
R |
覆 盖 改 写 字 符 |
输 入 命 令 |
作 用 、 效 果 |
移 动 命 令 |
作 用 、 效 果 |
a |
添加 |
p |
插 入 删 除 / 拷 贝 文 |
本 |
|||
I O |
插入 |
dd p |
移 动 一 行 |
查 询 命 令 |
作 用 、 效 果 |
拷 贝 命 令 |
作 用 、 效 果 |
/ |
搜 索 模 式 |
yy p |
拷 贝 一 行 |
? |
搜 索 模 式 |
||
n |
重 复 搜 索 |
17.4.1 在 Vi 编 辑 器 编 辑 的 文 本 中 移 动
你 可 以 在 Vi 编 辑 器 编 辑 的 文 本 中 移 动 , 包 括 移 动 光 标 、 滚 屏 及 移 动 到 指 定的 行 等 。 Vi 编 辑 器 光 标 的 移 动 命 令 包 括 在 屏 幕 上 显 示 的 文 本 里 左 、 右 、 上 、 下移 动 。 你 也 可 以 一 次 把 文 本 向 前 、 后 整 屏 滚 屏 。 有 时 你 需 移 动 到 指 定 的 行 , 你可 以 指 定 行 号 来 完 成 这 些 操 作 。
光 标 的 移 动
在 命 令 模 式 下 , 你 可 以 用 键 盘 上 的 移 动 命 令 键 使 光 标 在 文 本 中 来 回 移 动 。按 键 h 、 j、 k 及 l 命 令 执 行 基 本 的 光 标 移 动 操 作 。 其 中 , h 和 l 键 用 来 在 文 本 行上 水 平 移 动 , 且 h 键 用 来 左 移 一 个 字 符 , l 键 用 来 右 移 一 个 字 符 ; j 及 k 键 用 来在 文 本 行 上 上 、 下 移 动 光 标 。 j 键 用 来 下 移 一 行 , k 键 用 来 上 移 一 行 。 需 要 指 出的 是 , 继 续 按 光 标 命 令 键 将 重 复 光 标 的 移 动 。 例 如 始 终 按 住 l 命 令 键 将 把 光 标移 动 至 该 行 尾 。
同 时 需 要 指 出 的 是 , 为 了 方 便 地 移 动 光 标 , 这 些 键 就 放 置 在 你 右 手 各 手 指下 面 。 在 继 续 文 本 编 辑 的 时 候 , 你 需 要 经 常 在 文 本 行 上 或 行 与 行 之 间 移 动 光 标 。也 有 部 分 键 盘 使 用 一 组 光 标 方 向 键 来 代 替 h 、 j、 k 及 l 键 , 还 有 部 分 用 ENTER 键 来 代 替 j 键 来 将 光 标 下 移 一 行 。 SPACEBAR 键 ( 空 格 键 ) 来 代 替 l 键 去 左 移一 个 字 符 。
每 个 文 本 行 从 屏 幕 的 左 列 开 始 , 直 至 你 键 入 ENTER 键 ( 回 车 键 ) 来 结 束
- 行 。 如 果 光 标 在 该 行 的 行 尾 , 你 键 入 l 键 来 右 移 光 标 , 扬 声 器 将 鸣 笛 而 光 标不 再 移 动 。 如 果 光 标 在 该 行 的 第 一 个 字 符 上 , 你 试 图 键 入 h 键 来 左 移 光 标 也 将鸣 笛 。 扬 声 器 鸣 笛 表 明 光 标 已 移 动 到 文 本 行 的 边 界 上 。
行 尾 不 一 定 是 屏 幕 窗 口 的 右 侧 , 而 是 任 何 你 键 入 了 ENTER 键 ( 回 车 键 ) 的 地 方 。 当 用 l 键 在 文 本 行 上 一 直 右 移 光 标 的 时 候 , 光 标 将 停 留 在 该 文 本 行 的行 尾 ( 即 键 入 了 回 车 键 的 地 方 ) 。
你 只 能 在 文 件 中 真 正 存 在 字 符 ( 包 括 空 格 字 符 ) 的 地 方 进 行 光 标 移 动 。 在行 尾 及 屏 幕 右 边 界 之 间 的 区 域 称 为 屏 幕 死 区 ( dead space ) , 它 不 是 属 于 文 件部 分 。 如 果 光 标 放 置 在 某 行 的 行 尾 , 而 你 将 光 标 移 动 到 下 一 行 的 时 候 , 必 须 请注 意 : 光 标 将 自 动 移 动 到 下 一 行 的 行 尾 。
屏 幕 此 时 好 像 你 所 编 辑 的 文 本 文 件 的 一 个 窗 口 , 每 次 只 是 显 示 文 件 的 一 部
分 。 你 可 以 通 过 各 种 文 本 编 辑 命 令 来 把 文 件 在 该 窗 口 内 前 后 移 动 。 如 果 光 标 被放 置 在 屏 幕 的 首 行 或 底 行 , 你 可 以 通 过 j 及 k 键 来 逐 行 垂 直 滚 动 文 本 。 j 键 用 来将 光 标 在 屏 幕 上 下 移 一 行 , 一 旦 光 标 达 到 屏 幕 的 底 行 , 按 j 键 将 使 文 本 上 滚 一行 , 而 先 前 屏 幕 顶 行 的 文 本 将 在 屏 幕 上 消 失 , 新 的 文 本 将 在 底 行 上 出 现 。 当 光标 在 屏 幕 的 底 行 时 , 连 续 不 断 的 键 入 j 键 将 使 文 件 内 容 不 断 向 上 滚 屏 ( 或 者 说屏 幕 窗 口 相 对 于 文 本 不 断 下 移 ) 。 类 似 的 , 键 入 k 键 也 是 如 此 , 但 文 本 或 屏 幕的 移 动 刚 好 相 反 。
你 也 可 以 使 用 CTRL-F 命 令 及 CTRL-B 命 令 来 整 屏 移 动 文 本 ,其中 CTRL-F 命 令 向 前 ( 即 向 文 本 尾 部 ) 整 屏 滚 屏 而 CTRL-B 命 令 将 向 后 ( 即 向 文 本 首 部 ) 整 屏 滚 屏 。一 旦 移 至 文 件 尾 部 ,你 想 移 动 至 文 件 首 部 ,可 以 通 过 不 断 键 入 CTRL-B
命 令 来 逐 步 整 屏 移 动 来 实 现 。
行 号 : G
你 可 以 使 用 G 命 令 及 行 号 来 移 动 至 特 定 的 行 。 Vi 编 辑 器 对 编 辑 的 文 件 中 的每 一 行 按 顺 序 进 行 编 号 , G 命 令 ( 必 须 是 大 写 的 G ) 将 把 光 标 移 动 到 指 定 的 行 。你 首 先 输 入 要 移 动 的 行 号 , 然 后 键 入 G 键 , 于 是 , 光 标 将 移 动 至 指 定 的 文 本 行 。你 也 可 以 用 G 命 令 迅 速 地 将 光 标 移 动 至 文 件 的 尾 部 。 如 果 在 键 入 G 键 之 前 没 有输 入 行 号 , 那 么 , 光 标 将 直 接 移 动 至 文 件 尾 部 。 因 此 , 对 于 大 文 件 来 说 , G 命令 是 一 种 非 常 迅 速 、 有 效 地 定 位 至 尾 部 的 一 种 方 法 。
在 Vi 编 辑 器 中 修 改 文 件 : 输 入 、 删 除 及 修 改
在 对 文 本 文 件 进 行 编 辑 的 时 候 经 常 涉 及 到 文 件 某 些 方 面 的 修 改 。 例 如 , 你可 以 在 文 件 不 同 的 地 方 添 加 更 多 的 文 本 , 可 以 任 意 删 除 已 经 存 在 的 文 本 , 也 可以 修 改 文 件 的 任 意 部 分 。 Vi 编 辑 器 有 一 系 列 的 控 制 命 令 , 可 以 采 取 不 同 的 方 式用 这 些 命 令 来 输 入 字 符 、 删 除 及 修 改 文 件 任 意 的 部 分 , 如 : 字 符 、 行 、 单 词 、句 子 及 段 落 等 。 你 也 可 以 用 Vi 编 辑 器 的 编 辑 命 令 来 取 消 ( undo ) 你 对 编 辑 文 本的 任 何 改 变 , 例 如 : 你 可 以 取 消 ( undo ) 你 的 文 本 输 入 。 取 消 ( undo ) 命 令 为u 命 令 , 它 将 取 消 ( undo ) 用 户 先 前 键 入 的 一 些 Vi 命 令 。 当 你 修 改 了 文 件 的 时
候 , 必 须 记 住 该 命 令 可 以 取 消 你 对 文 件 的 修 改 。 许 多 时 候 你 会 无 意 中 对 文 件 的内 容 进 行 了 修 改 , 这 时 , 你 可 以 非 常 方 便 地 用 u 命 令 去 取 消 这 些 修 改 。
输 入
你 已 经 知 道 , 当 启 动 Vi 编 辑 器 的 时 候 , 一 个 新 的 文 件 会 被 创 建 , 而 你 此 时处 于 Vi 编 辑 器 的 命 令 模 式 下 。 要 进 行 字 符 输 入 , 你 需 要 执 行 一 个 输 入 命 令 , 例如 a 命 令 。该 命 令 可 以 使 你 处 于 Vi 编 辑 器 的 输 入 模 式 下 。 一 旦 你 进 入 输 入 模 式 , 键 盘 就 类 似 于 一 部 打 字 机 , 此 时 你 键 入 的 任 何 文 本 都 将 被 输 入 到 文 件 中 去 。
一 旦 进 入 输 入 模 式 , 你 可 以 输 入 任 何 字 符 及 任 意 个 你 想 输 入 的 字 符 , 直 至你 键 入 ESC 命 令 。 你 也 可 以 用 空 格 键 ( SPACEBAR ) 来 删 除 最 近 键 入 的 字 符 。空 格 键 的 使 用 仅 仅 局 限 于 输 入 模 式 下 , 它 仅 仅 删 除 光 标 左 边 的 字 符 。 连 续 不 断地 键 入 空 格 键 , 你 可 以 删 除 进 入 输 入 模 式 以 后 所 键 入 的 所 有 字 符 。
当 你 达 到 右 边 界 的 时 候 , 许 多 PC 式 的 文 字 处 理 软 件 将 自 动 对 输 入 的 文 字进 行 换 行 ( 软 回 车 ) , 但 Vi 编 辑 器 不 会 。 在 Vi 编 辑 器 中 , 只 有 在 输 入 模 式 下键 入 ENTER 键 ( 回 车 键 ) 之 后 编 辑 器 才 会 创 建 新 的 文 本 行 。 尽 管 当 光 标 达 到屏 幕 右 边 界 的 时 候 , Vi 编 辑 器 不 会 自 动 插 入 新 的 行 ( 尽 管 看 起 来 好 像 增 加 了 新 的行 ) 。 如 果 文 本 行 的 长 度 超 过 了 屏 幕 的 宽 度 , 文 本 行 将 自 动 绕 行 (wrapped around ), 好 像 在 屏 幕 上 是 两 行 一 样 。 但 编 辑 器 把 它 们 当 作 是 同 一 行 。 如 果 需 要 , 你 可 以 设 置 Vi 编 辑 器 的 选 项 来 设 置 当 编 辑 的 文 本 达 到 指 定 的 边 界 时 自 动 插 入 新的 行 。 这 个 边 界 称 为 文 本 换 行 边 界 ( word-wrap margin ) , 你 可 以 在 底 行 命 令模 式 下 键 入 命 令 :set wm=col 来 设 置 它 , 这 里 , col 是 右 边 界 的 列 号( colum n) 。
例 如 命 令 :set wm=70 将 设 置 文 本 换 行 边 界 为 70 列 , 当 你 输 入 的 文 本 达 到 70 列时 , Vi 编 辑 器 将 自 动 插 入 新 的 行 。
有 几 个 输 入 命 令 可 以 进 入 输 入 模 式 , 而 这 每 个 命 令 进 入 输 入 模 式 后 进 行 编辑 时 输 入 字 符 的 位 置 与 光 标 有 关 。 最 常 见 的 输 入 命 令 是 a 命 令 ( append ) 、 i 命 令 ( insert) 及 o 命 令 ( open ) 。 用 a 命 令 进 入 输 入 模 式 后 , 编 辑 器 将 在 光标 所 在 的 字 符 后 输 入 文 本 。 用 i 命 令 进 入 输 入 模 式 后 , 编 辑 器 将 在 光 标 所 在 的字 符 的 前 面 输 入 文 本 。 用 o 命 令 进 入 输 入 模 式 后 , 将 在 光 标 所 在 行 下 插 入 新 的一 行 , 且 光 标 位 于 下 一 行 的 行 首 。
当 你 在 文 本 行 的 行 首 或 行 尾 添 加 字 符 时 , 你 会 发 现 i 命 令 与 a 命 令 有 很 大 的不 同 。 你 可 以 使 用 i 命 令 在 文 本 行 行 首 添 加 字 符 , 而 使 用 a 命 令 在 行 尾 添 加 字符 。 要 在 文 本 行 的 行 首 添 加 文 本 , 你 必 须 把 光 标 放 置 在 该 行 的 首 字 符 上 , 用 i 命 令 将 把 插 入 的 字 符 添 加 到 该 字 符 的 前 面 。 要 在 文 本 行 的 行 尾 添 加 文 本 , 你 必须 把 光 标 放 置 在 该 行 的 最 后 一 个 字 符 上 , 用 a 命 令 将 把 插 入 的 字 符 添 加 到 该 字符 的 后 面 。 请 注 意 不 要 混 淆 这 两 个 命 令 。 如 果 光 标 被 放 置 在 文 本 行 的 最 后 一 个字 符 上 , 此 时 你 键 入 i 命 令 , 那 么 新 增 加 的 文 本 将 被 添 加 在 最 后 一 个 字 符 之 前 。如 果 你 想 在 文 本 行 的 首 字 符 之 前 用 a 命 令 插 入 文 本 , 类 似 的 错 误 也 会 发 生 , 即 : 如 果 光 标 被 放 置 在 文 本 行 的 首 字 符 上 , 此 时 你 键 入 a 命 令 , 那 么 新 增 加 的 文 本将 被 添 加 在 首 字 符 之 后 。 而 不 是 在 文 本 行 的 行 首 。
除 了 在 指 定 行 上 增 加 文 本 之 外 , 你 也 可 以 插 入 新 的 整 行 字 符 , 此 时 , 你 需使 用 o 命 令 。 该 命 令 可 以 认 为 是 在 两 行 之 间 插 入 新 的 文 本 行 。 插 入 的 文 本 行 不仅 仅 只 局 限 于 在 新 增 加 的 行 上 输 入 文 本 , 新 插 入 的 行 只 是 进 入 输 入 模 式 进 行 文
本 编 辑 的 一 个 起 始 点 。 一 旦 进 入 输 入 模 式 下 , 你 可 以 通 过 键 入 ENTER 键 来 输入 你 希 望 的 任 何 行 文 本 。 实 际 上 , o 命 令 等 同 于 : 把 光 标 放 置 在 文 本 行 的 行 尾 , 并 键 入 a 命 令 , 然 后 再 键 入 ENTER 键 , 于 是 , a 命 令 使 编 辑 器 进 入 输 入 模 式 , 而 ENTER 命 令 用 来 插 入 新 的 文 本 行 。 o 命 令 通 常 被 用 来 在 文 件 的 末 尾 添 加 文本 。 把 光 标 放 置 在 文 件 的 最 后 一 行 , 键 入 o 命 令 , 编 辑 器 将 在 文 件 的 最 后 一 行之 后 插 入 新 的 文 本 行 。 于 是 , 你 可 以 在 输 入 模 式 下 输 入 任 何 你 想 输 入 的 文 本 。
删 除
最 简 单 的 删 除 操 作 是 单 个 字 符 及 整 行 文 本 的 删 除 。 键 入 x 键 将 删 除 单 个 字符。键入 x 键 将 删 除 光 标 所 在 位 置 上 的 任 何 字 符 。dd 命 令 将 删 除 光 标 所 在 的 行 。
修 改
你 可 以 修 改 任 何 字 符 。 首 先 , 你 可 以 用 删 除 命 令 来 删 除 该 字 符 , 然 后 , 进入 输 入 模 式 下 输 入 新 的 字 符 。 要 修 改 整 个 单 词 , 你 必 须 重 复 地 使 用 x 命 令 来 删除 该 单 词 , 然 后 键 入 i 或 a 命 令 进 入 输 入 模 式 下 并 键 入 新 的 单 词 。 Vi 编 辑 器 也有 一 组 修 改 命 令 , 用 这 些 命 令 可 以 简 化 上 述 修 改 过 程 。 这 组 命 令 可 以 自 动 地 删除 单 词 、 文 本 行 、 句 子 甚 至 段 落 , 然 后 进 入 输 入 模 式 下 。 这 些 命 令 都 会 在 本 章的 高 级 命 令 里 详 细 介 绍 。 这 里 , 我 们 只 是 用 一 些 简 单 的 操 作 来 实 现 字 符 及 文 本行 的 修 改 。
cc 命 令 可 以 用 来 修 改 整 行 。 首 先 , cc 命 令 将 删 除 光 标 所 在 行 上 所 有 的 文 本 ,
然 后 进 入 输 入 模 式 下 。 此 时 , 你 可 以 输 入 新 的 字 符 , 直 至 你 键 入 ESC 键 回 到 命令 模 式 下 。 dd 命 令 和 o 命 令 两 命 令 的 组 合 与 cc 命 令 的 功 能 相 同 , 其 中 , dd 命令 用 来 删 除 一 文 本 行 , 而 o 命 令 用 来 插 入 新 的 文 本 行 。
你 可 以 使 用 r 命 令 来 修 改 单 个 字 符 。 r 命 令 删 除 光 标 所 在 位 置 上 的 任 何 字 符 , 并 等 待 用 户 输 入 新 的 字 符 , 即 光 标 位 置 上 的 字 符 将 被 你 键 入 的 任 何 字 符 所 代 替 。 r 命 令 与 其 它 修 改 命 令 不 一 样 , 键 入 r 命 令 后 , 编 辑 器 不 进 入 输 入 模 式 , 在 你 键入 替 换 的 字 符 后 , 编 辑 器 仍 然 处 于 命 令 模 式 下 。
R 键 是 一 个 替 换 命 令 , 键 入 该 命 令 后 进 行 输 入 时 将 覆 盖 光 标 位 置 所 在 的 文本 , 直 到 你 键 入 ESC 键 为 止 。 键 入 R 命 令 后 , 编 辑 器 处 于 输 入 模 式 下 , 且 当你 在 光 标 位 置 上 每 键 入 一 个 字 符 时 , Vi 编 辑 器 将 同 时 删 除 光 标 位 置 上 相 应 的 字符 。 该 命 令 似 乎 与 其 它 文 字 处 理 软 件 中 的 覆 盖 模 式 类 似 , 但 实 际 上 不 是 。 与 cc 命 令 一 样 , 在 你 进 行 任 何 文 本 编 辑 之 前 , 编 辑 器 实 际 上 已 退 出 命 令 模 式 而 进 入了 输 入 模 式 下 。 请 注 意 不 要 混 淆 r 及 R 这 两 个 命 令 。 r 命 令 仅 仅 用 来 修 改 单 个字 符 , 而 R 命 令 将 覆 盖 所 有 的 字 符 , 直 至 你 进 入 ESC 命 令 , 退 出 输 入 模 式 为止 。 如 果 你 想 键 入 r 命 令 时 不 小 心 键 入 了 R 命 令 , 你 可 能 无 意 中 覆 盖 了 原 来 的文 本 , 此 时 , 你 可 以 键 入 ESC 键 回 到 命 令 模 式 下 , 并 键 入 u 命 令 来 取 消 这 次 操作 。
取 消 操 作 ( undo )
在 删 除 或 修 改 文 本 的 时 候 , 你 可 能 进 行 了 意 外 地 删 除 或 修 改 。 如 果 你 希 望取 消 这 些 意 外 操 作 , 并 回 到 原 来 的 状 态 , 可 以 使 用 u 命 令 。 u 命 令 可 以 使 你 恢
复 到 最 近 你 所 执 行 的 编 辑 命 令 之 前 的 状 态 。 u 命 令 可 以 取 消 任 何 你 对 文 件 所 作的 修 改 , 包 括 输 入 操 作 、 删 除 命 令 及 修 改 命 令 等 。 在 学 习 Vi 编 辑 器 时 , 你 可 能要 大 量 地 使 用 该 命 令 , 因 为 你 容 易 执 行 意 外 的 操 作 或 命 令 。 如 果 意 外 地 删 除 了一 行 , 你 可 以 键 入 u 键 来 恢 复 删 除 的 文 本 。 如 果 你 修 改 了 一 行 , 而 又 决 定 不 想进 行 这 一 修 改 , 你 也 可 以 使 用 u 命 令 来 取 消 这 一 修 改 。
重 复 因 子
你 可 以 在 删 除 或 修 改 命 令 之 前 键 入 一 数 字 , 以 便 一 次 进 行 多 次 修 改 或 多 行删 除 。 此 时 , 与 G 命 令 中 的 数 字 不 一 样 , 它 们 不 代 表 行 号 , 而 是 代 表 该 命 令 的重 复 因 子 , 即 命 令 的 重 复 次 数 。 任 何 命 令 ( G 命 令 除 外 ) 之 前 键 入 的 数 字 表 示该 命 令 重 复 的 次 数 。 例 如 : 3x 命 令 将 删 除 三 个 字 符 而 不 是 一 个 字 符 , 2dd 将 同时 删 除 两 行 。
同 时 , 请 注 意 不 要 混 淆 数 字 的 上 述 两 种 用 法 。 例 如 , 假 设 你 想 用 G 命 令 把光 标 移 动 到 指 定 的 行 , 但 你 在 键 入 一 个 数 字 之 后 、 键 入 G 命 令 之 前 突 然 改 变 了主 意 , 例 如 键 入 了 200 之 后 改 变 了 主 意 , 而 用 x 命 令 代 替 了 G 命 令 , 那 么 编 辑器 将 删 除 200 个 字 符 。 该 重 复 因 子 也 可 以 用 在 输 入 及 修 改 命 令 之 中 。 例 如 , 如果 你 输 入 了 50 之 后 执 行 了 i 命 令 , 而 不 是 G 命 令 , 且 输 入 了 某 些 字 符 , 那 么 , 在 键 入 ESC 键 停 止 输 入 并 退 出 输 入 模 式 之 时 , Vi 编 辑 器 将 插 入 此 次 输 入 字 符的 50 个 拷 贝 到 编 辑 的 文 件 中 去 , 也 就 是 说 , 编 辑 器 会 立 即 重 复 50 次 你 刚 才 的输 入 操 作 。 如 果 在 输 入 一 数 字 后 , 你 突 然 想 改 变 了 主 意 而 去 执 行 其 它 的 编 辑 命令 , 你 可 以 键 入 ESC 键 来 取 消 刚 才 输 入 的 数 字 。
尽 管 你 非 常 小 心 , 仍 可 能 会 出 现 错 误 。 这 时 , 你 可 以 用 u 命 令 来 取 消 上 次执 行 的 操 作 , 从 而 更 正 由 于 上 次 的 操 作 而 导 致 的 错 误 。 一 个 重 复 的 编 辑 命 令 会被 看 作 是 一 个 编 辑 操 作 , 你 可 以 键 入 一 次 u 键 来 取 消 上 述 重 复 的 操 作 。 例 如 , 你 用 200x 命 令 重 复 删 除 了 200 个 字 符 , 键 入 u 命 令 之 后 , 删 除 200 个 字 符 这一 操 作 将 会 立 即 取 消 。
行 的 拆 分 与 合 并
使 用 Vi 编 辑 器 对 文 本 中 行 的 拆 分 与 合 并 过 程 要 比 PC 机 式 的 文 字 处 理 软 件要 复 杂 。 对 于 PC 机 式 的 编 辑 器 , 你 可 以 非 常 简 单 地 键 入 ENTER 键 来 对 一 行进 行 拆 分 , 或 者 使 用 BACKSPACE 键 来 合 并 行 。 在 Vi 编 辑 器 中 , 对 行 的 拆 分需 要 键 入 一 个 输 入 命 令 。 因 此 , 首 先 要 进 入 输 入 模 式 , 此 时 你 才 能 键 入 ENTER 键 。 合 并 行 时 需 要 一 个 新 的 Vi 编 辑 器 中 的 J 命 令 ( 必 须 是 大 写 ) , 而 你 不 能 使用 BACKSPACE 键 来 合 并 行 。
要 把 一 行 拆 分 成 两 行 , 首 先 必 须 把 光 标 放 置 在 你 所 希 望 的 拆 分 处 , 然 后 键入 i 或 a 命 令 ( 必 须 注 意 i 命 令 将 在 光 标 所 在 的 字 符 前 插 入 字 符 , 而 a 命 令 将 在光 标 所 在 的 字 符 后 添 加 字 符 ) 。 一 旦 进 入 输 入 模 式 , 键 入 ENTER 将 即 可 。 要回 到 命 令 模 式 下 , 只 需 键 入 ESC 键 。 要 合 并 两 行 , 键 入 J 命 令 即 可 , 此 时 , 光标 所 在 行 的 下 一 行 将 被 合 并 到 光 标 所 在 的 行 的 行 尾 上 。 在 Vi 编 辑 器 里 , 你 似 乎从 来 没 有 键 入 ENTER 键 , 实 际 上 是 因 为 ENTER 键 是 不 可 见 的 。 Vi 编 辑 器 里的 换 行 标 识 ( 不 可 见 的 ) 本 身 不 会 被 任 何 删 除 命 令 所 删 除 , 但 有 些 命 令 , 如 dd 命 令 , 可 以 把 它 与 文 本 行 上 的 其 它 字 符 一 并 删 除 。
17.5.1 在 Vi 编 辑 器 中 拷 贝 、 移 动 及 搜 索 文 本
你 可 以 把 文 件 中 的 文 本 拷 贝 或 移 动 至 文 件 的 另 一 个 地 方 。 尽 管 在 Vi 编 辑 器中 可 以 拷 贝 或 移 动 任 意 文 本 , 包 括 单 词 及 句 子 等 , 但 本 节 只 介 绍 文 本 行 的 移 动与 拷 贝 。 你 也 可 以 在 文 件 中 搜 索 指 定 的 单 词 与 模 式 。 在 Vi 编 辑 器 中 , 你 既 可 以向 前 也 可 以 向 后 搜 索 , 同 时 , 你 也 可 以 重 复 搜 索 。
移 动 、 拷 贝 文 本 行 : dd 、 yy 及 p 命 令
要 移 动 文 本 , 首 先 你 必 须 删 除 你 需 要 移 动 的 文 本 。 dd 命 令 将 删 除 一 行 文 本 。在 dd 命 令 之 前 键 入 一 数 字 n 将 删 除 从 光 标 所 在 的 行 起 的 n 行 文 本 ( 包 括 光 标所 在 的 行 ) 。 这 些 删 除 的 文 本 将 被 保 存 到 一 个 临 时 缓 冲 区 中 。 然 后 , 移 动 光 标至 你 将 要 插 入 的 行 上 , 最 后 键 入 p 命 令 , 编 辑 器 将 把 刚 才 保 存 到 临 时 缓 冲 区 中的 所 有 文 本 插 入 到 光 标 所 在 的 行 之 后 。
你 可 以 用 yy 命 令 来 拷 贝 文 本 行 。 在 yy 命 令 之 前 键 入 一 数 字 n 将 拷 贝 从 光标 所 在 的 行 起 的 n 行 文 本 ( 包 括 光 标 所 在 的 行 ) 。 要 拷 贝 这 些 文 本 行 , 首 先 把光 标 放 置 在 要 拷 贝 的 文 本 行 的 首 行 上 , 然 后 键 入 要 拷 贝 的 文 本 行 行 数 , 再 键 入yy 命 令 , 该 命 令 将 把 要 拷 贝 的 文 本 行 保 存 到 一 个 临 时 缓 冲 区 中 , 最 后 把 光 标 移动 到 要 拷 贝 插 入 的 行 上 键 入 p 命 令 , 这 些 被 拷 贝 的 文 本 行 将 被 插 入 到 光 标 所 在的 文 本 行 之 后 。
搜 索
在 你 进 行 文 本 编 辑 的 时 候 , 你 可 以 需 要 搜 索 或 定 位 特 定 的 单 词 或 单 词 的 一部 分 。 Vi 编 辑 器 有 向 前 或 向 后 搜 索 指 定 模 式 的 功 能 。 斜 扛 /是 Vi 编 辑 器 的 模 式搜 索 命 令 。 键 入 斜 扛 /后 将 在 屏 幕 的 底 部 出 现 一 行 , 同 时 一 个 斜 扛 会 出 现 在 底 行的 行 首 上 , 且 光 标 被 放 置 在 斜 扛 之 后 。 于 是 , 你 可 以 在 光 标 位 置 键 入 你 需 要 搜索 的 模 式 , 键 入 ENTER 键 之 后 , 编 辑 器 将 开 始 模 式 搜 索 。 当 执 行 斜 扛 命 令 的时 候 , 编 辑 器 将 从 光 标 所 在 的 位 置 起 向 文 件 尾 部 搜 索 你 键 入 的 模 式 。 斜 扛 命 令是 向 前 ( forward ) 搜 索 命 令 , 如 果 输 入 的 模 式 被 找 到 , 光 标 将 停 留 在 找 到 的 模式 上 。
问 号 ? 命 令 将 向 后 ( backward ) 搜 索 编 辑 的 文 本 。 键 入 问 号 ? 命 令 也 将 在 屏幕 的 底 部 出 现 一 行 , 再 键 入 你 需 要 搜 索 的 模 式 , 最 后 键 入 ENTER 键 , 编 辑 器将 从 光 标 所 在 的 位 置 起 向 文 件 首 部 搜 索 匹 配 的 模 式 。
先 键 入 斜 扛 /命 令 或 问 号 ? 命 令 , 再 键 入 搜 索 模 式 , 按 ENTER 键 进 行 搜 索 之后 , 可 以 用 n 命 令 用 来 进 行 重 复 搜 索 。 键 入 n 命 令 将 开 始 在 文 件 中 再 进 行 一 次模 式 的 搜 索 。 如 果 键 入 的 是 斜 扛 / 命 令 , 那 么 , 将 继 续 向 文 件 的 尾 部 方 向 向 前
( forward ) 进 行 的 搜 索 ; 如 果 键 入 的 是 问 号 ? 命 令 , 那 么 , 将 继 续 向 文 件 的 首部 方 向 向 后 ( backward ) 进 行 的 搜 索 。
如 果 达 到 了 文 件 的 首 部 或 者 是 尾 部 , 光 标 将 回 到 文 件 的 尾 部 或 首 部 继 续 搜索 文 件 中 匹 配 的 模 式 。 你 可 以 重 复 键 入 n 命 令 在 文 件 中 多 次 搜 索 指 定 的 模 式 。
高 级 Vi 编 辑 命 令
到 目 前 为 止 , 我 们 已 介 绍 了 Vi 编 辑 器 的 一 些 基 本 编 辑 命 令 , 但 是 , Vi 编 辑器 实 际 上 还 有 很 多 的 命 令 。 大 部 分 小 写 字 母 命 令 都 有 与 其 对 应 的 由 大 写 字 母 组成 的 命 令 , 它 们 执 行 相 同 的 操 作 。 例 如 , 小 写 的 命 令 o 将 在 当 前 行 与 下 一 行 之间 插 入 新 的 行 ; 与 之 相 对 应 , 大 写 的 命 令 O 将 在 当 前 行 与 上 一 行 之 间 插 入 新 的行 。 本 节 将 详 细 介 绍 不 同 的 屏 幕 光 标 移 动 命 令 及 各 种 修 改 命 令 , 例 如 : 执 行 输入 、 修 改 及 删 除 等 操 作 。
你 也 可 以 根 据 各 种 搜 索 模 式 来 搜 索 你 要 查 询 的 文 本 , 包 括 单 词 、 句 子 及 段落 等 。 在 前 面 的 章 节 中 , 你 只 学 习 了 怎 样 搜 索 单 个 字 符 及 文 本 行 。 例 如 , l 命 令把 光 标 左 移 一 个 字 符 , 而 j 命 令 将 把 光 标 下 移 一 行 。 但 是 , 你 也 可 以 用 w 、)(右原 括 号 ) 及 }( 右 大 括 号 ) 命 令 来 在 文 本 之 间 移 动 。 w 命 令 将 以 单 词 为 单 位 进 行移 动 , 右 原 括 号 将 以 句 子 为 单 位 进 行 移 动 , 而 右 大 括 号 将 以 段 落 为 单 位 进 行 移动 。 你 也 可 以 由 这 些 Vi 命 令 去 限 定 另 外 一 些 Vi 命 令 来 执 行 文 本 操 作 。 例 如 , 你 可 以 用 w 命 令 来 限 定 修 改 命 令 c , 即 用 它 们 组 合 成 新 命 令 cw , 该 命 令 用 来 修改 一 个 单 词 ; 你 可 以 用 ) 命 令 来 限 定 d 命 令 , 即 用 它 们 组 合 成 新 的 命 令 d) 来 删 除一 个 句 子 。 限 定 命 令 位 于 主 命 令 之 后 。
17.6.1 高 级 光 标 移 动 命 令
Vi 编 辑 器 提 供 了 许 多 命 令 , 这 些 命 令 可 以 使 用 户 在 文 件 中 任 意 移 动 。 你 可以 在 文 本 行 上 的 以 字 符 为 单 位 在 不 同 的 字 符 之 间 进 行 移 动 , 也 可 以 以 单 词 、 句子 甚 至 段 落 为 单 位 进 行 移 动 。 此 外 , 你 还 可 以 在 屏 幕 上 的 不 同 文 本 行 之 间 进 行移 动 , 包 括 屏 幕 顶 部 、 屏 幕 底 部 及 屏 幕 中 部 等 。 你 甚 至 可 以 采 用 搜 索 、 定 位 的方 法 来 在 不 同 的 文 本 行 之 间 移 动 , 例 如 行 号 、 搜 索 模 式 或 标 识 等 。 例 如 : 你 可以 用 特 定 的 代 码 在 某 行 作 一 标 识 , 以 后 , 你 可 以 通 过 这 个 特 定 标 识 返 回 到 该 行 。
所 有 这 些 移 动 命 令 都 可 以 认 为 是 对 位 置 的 搜 索 与 定 位 。 例 如 行 号 及 搜 索 模式 可 以 用 来 定 位 特 定 的 文 本 行 。 一 个 单 词 或 句 子 定 位 命 令 可 以 用 来 搜 索 特 定 的单 词 或 句 子 。 你 还 可 以 使 用 定 位 命 令 与 修 改 命 令 的 组 合 来 修 改 字 符 、 文 本 、 句子 、 段 落 等 。 例 如 , 用 单 词 搜 索 定 位 命 令 及 修 改 命 令 可 以 用 来 修 改 特 定 的 单 词 ; 用 模 式 搜 索 命 令 与 行 删 除 命 令 来 删 除 包 含 匹 配 模 式 的 文 本 行 ; 用 屏 幕 底 行 定 位命 令 与 行 拷 贝 命 令 来 把 光 标 所 在 的 文 本 行 拷 贝 至 当 前 屏 幕 上 的 最 后 一 行 上 。 请记 住 本 节 介 绍 的 有 关 光 标 移 动 的 高 级 命 令 。 在 下 面 的 章 节 中 , 你 可 以 使 用 本 节介 绍 的 光 标 定 位 命 令 及 编 辑 修 改 命 令 来 编 辑 你 要 修 改 的 文 本 。
Vi 通 过 行 号 来 组 织 编 辑 的 文 本 , 因 此 你 可 以 通 过 行 号 、 搜 索 模 式 及 特 定 标识 来 搜 索 、 定 位 。 正 如 本 章 前 几 节 中 指 出 的 那 样 , 你 可 以 使 用 G 命 令 及 其 行 号来 定 位 。 在 G 命 令 及 其 前 面 输 入 行 号 , 可 以 把 光 标 移 动 到 指 定 的 文 本 行 。 如 果没 有 指 定 行 号 , 缺 省 状 态 下 光 标 将 移 动 到 文 件 的 尾 部 。 你 也 可 以 用 G 命 令 与 修改 或 删 除 命 令 的 来 组 合 成 新 的 命 令 。 例 如 , dG 命 令 可 以 删 除 从 当 前 行 至 文 件 结
尾 的 所 有 文 本 ; cG 命 令 在 删 除 从 当 前 行 至 文 件 结 尾 之 间 所 有 文 本 的 同 时 , Vi
编 辑 器 将 进 入 输 入 模 式 下 。
模 式 搜 索 命 令 ( 由 标 识 符 斜 扛 / 开 始 ) 将 在 文 本 中 进 行 模 式 匹 配 , 并 把 光 标定 位 于 与 搜 索 模 式 匹 配 的 文 本 行 上 。 键 入 斜 扛 /后 将 在 屏 幕 的 底 部 出 现 一 行 , 于是 , 你 可 以 在 底 行 上 键 入 你 需 要 搜 索 的 模 式 , 键 入 ENTER 键 之 后 , 编 辑 器 将开 始 搜 索 。 如 果 搜 索 到 该 模 式 , 光 标 将 出 现 在 搜 索 到 的 模 式 上 。 问 号 ? 命 令 也 用来 进 行 模 式 搜 索 , 但 它 向 文 件 的 首 部 方 向 进 行 搜 索 , 请 记 住 : 问 号 ? 命 令 将 从 光标 所 在 的 位 置 起 向 文 件 首 部 方 向 搜 索 键 入 的 模 式 , 而 斜 扛 / 命 令 将 从 光 标 所 在 的位 置 起 向 文 件 尾 部 方 向 搜 索 键 入 的 模 式 。
n 命 令 重 复 先 前 的 搜 索 , 或 者 向 前 ( forward ) 搜 索 , 或 者 向 后 ( backward ) 搜 索 。 大 写 N 命 令 也 用 来 重 复 先 前 的 搜 索 , 但 它 与 n 命 令 的 搜 索 方 向 相 反 。 如果 用 户 已 使 用 了 斜 扛 /命 令 进 行 向 前 ( forward ) 搜 索 , 那 么 , 键 入 N 命 令 将 进行 向 后 ( backward ) 搜 索 ; 如 果 用 户 已 使 用 了 问 号 ? 命 令 进 行 向 后 ( backward ) 搜 索 , 那 么 , 进 入 N 命 令 将 进 行 向 前 ( forward ) 搜 索 。
搜 索 到 的 模 式 可 以 认 为 是 一 个 文 本 的 边 界 。 删 除 命 令 和 修 改 命 令 可 以 使 用模 式 去 搜 索 文 本 行 。 在 删 除 命 令 后 键 入 搜 索 模 式 将 删 除 当 前 行 及 与 搜 索 模 式 匹配 的 文 本 行 之 间 ( 包 括 这 两 行 ) 的 所 有 文 本 。 例 如 : d/hello/ 命 令 将 删 除 当 前 行与 包 含 字 符 串 hello 的 文 本 行 之 间 ( 包 括 这 两 行 ) 的 所 有 行 , c/hello /命 令 将 修改 这 些 行 。
Vi 编 辑 器 有 两 个 特 殊 的 字 符 , 这 两 个 特 殊 字 符 用 来 在 模 式 中 代 表 单 词 的 起始 或 结 束 。 特 殊 字 符 \< 代 表 单 词 的 开 始 , 而 特 殊 字 符 \> 代 表 单 词 的 结 束 。 例 如 ,
模 式 /\<make\> /将 仅 仅 搜 索 包 含 单 词 make 的 文 本 行 , 而 模 式 /\<make /将 搜 索 所有 包 含 由 make 打 头 的 单 词 的 文 本 行 , 如 包 含 单 词 makeup 的 文 本 行 等 。
% 命 令 将 搜 索 、 定 位 相 应 的 开 始 或 结 束 圆 括 号 ( 、 ) 、 括 弧 [ 、 ] 及 大 括号 { 、 } 等 。 例 如 , 如 果 光 标 位 于 起 始 圆 括 号 ( 上 , 那 么 , 键 入 % 命 令 将 向 前
( forward ) 搜 索 最 近 的 一 个 回 括 号 ) , 无 论 该 回 括 号 位 于 文 件 的 何 处 。 如 果 光标 位 于 回 圆 括 号 ) 上 , 那 么 , 键 入 % 命 令 将 向 后 ( backward ) 搜 索 最 近 的 一个 起 始 圆 括 号 ( 。 同 理 , 对 于 括 弧 及 大 括 号 也 是 如 此 。 在 进 行 程 序 设 计 的 源 代码 编 辑 过 程 中 , 该 命 令 是 非 常 有 用 的 , 因 为 在 源 代 码 中 常 有 大 量 的 圆 括 号 、 括弧 及 大 括 号 。
你 可 以 用 标 识 命 令 m 标 识 某 行 , 并 可 以 在 其 它 命 令 中 用 这 一 标 识 去 搜 索 、定 位 该 行 。 如 果 在 m 命 令 后 键 入 一 个 字 母 , 编 辑 器 将 会 用 该 字 母 去 标 识 本 行 。在 标 识 字 母 之 前 键 入 单 引 号 ’ , 编 辑 器 将 搜 索 并 定 位 于 用 该 标 识 字 母 标 识 的 文本 行 上 。 你 可 以 在 任 何 命 令 中 用 标 识 字 母 去 代 替 行 号 。 例 如 , m b 命 令 将 用 字母 b 去 标 识 一 行 , 命 令 ’ bG 将 把 光 标 移 动 至 用 字 母 b 标 识 的 行 。 单 引 号 加 标识 字 母 本 身 也 将 把 光 标 移 动 至 该 标 识 行 , 例 如 ’ b 命 令 。 你 也 可 以 用 标 识 字 母去 搜 索 标 识 行 , 并 对 标 识 行 进 行 修 改 或 删 除 , 例 如 ’ bd 命 令 将 删 除 当 前 行 与 用字 母 b 标 识 的 行 之 间 的 所 有 文 本 ( 包 括 标 识 行 及 当 前 行 ) 。
单 引 号 也 用 来 在 文 件 中 搜 索 、 定 位 先 前 光 标 所 在 的 位 置 。 你 可 以 用 两 个 单引 号 ’ ’ 去 回 到 光 标 先 前 所 在 的 位 置 。 从 某 种 意 义 上 来 说 , 编 辑 器 是 用 第 二 个单 引 号 来 标 识 光 标 先 前 所 在 的 位 置 的 。 多 次 重 复 地 键 入 两 个 单 引 号 将 会 使 光 标在 当 前 位 置 与 先 前 位 置 之 间 来 回 移 动 。
底 行 编 辑 命 令
Vi 编 辑 器 的 底 行 编 辑 命 令 与 第 14 章 中 介 绍 并 列 出 的 Sed 编 辑 器 的 命 令 基本 相 同 。 大 多 数 编 辑 任 务 都 可 以 用 Vi 命 令 简 单 方 便 地 完 成 , 但 是 , 如 果 想 用 行号 去 搜 索 、 定 位 文 本 , 你 需 用 底 行 编 辑 命 令 。 例 如 , 如 果 你 想 删 除 第 9 至 17 之 间 的 文 本 行 。 在 Vi 命 令 模 式 下 , 你 必 须 首 先 定 位 于 第 九 行 , 然 后 使 用 合 适 的命 令 去 删 除 这 九 行 文 本 。 但 是 , 在 底 行 命 令 模 式 下 , 你 只 需 在 删 除 命 令 d 中 指定 要 删 除 的 行 号 范 围 就 可 以 完 成 删 除 , 例 如 , :9,17 d 。 底 行 命 令 模 式 下 的 行 定位 能 力 使 你 在 进 行 全 局 操 作 时 非 常 有 用 。 你 也 可 以 用 1, $ 来 指 定 整 个 文 件 中 的文 本 行 , 其 中 字 符 $ 用 来 指 定 文 件 的 最 后 一 行 。
前 面 已 经 指 出 , 冒 号 :是 一 个 编 辑 命 令 , 它 用 来 在 屏 幕 的 底 行 创 建 新 的 一 行 , 并 允 许 你 在 该 行 上 键 入 底 行 编 辑 命 令 。 键 入 底 行 编 辑 命 令 并 执 行 该 命 令 之 后 , 光 标 将 返 回 到 先 前 所 在 的 位 置 上 , 然 后 你 可 以 继 续 进 行 你 的 编 辑 工 作 。 Vi 编 辑器 的 底 行 命 令 模 式 通 常 用 来 进 行 一 些 全 局 操 作 。 在 Vi 编 辑 器 中 , 通 常 键 入 冒 号 : 命 令 使 编 辑 器 进 入 底 行 命 令 模 式 下 。
你 可 以 通 过 搜 索 文 件 中 所 有 的 文 本 并 对 每 一 个 与 模 式 匹 配 的 字 符 串 进 行 替换 操 作 来 实 现 全 局 替 换 。 字 符 $ 代 表 文 件 中 最 后 一 行 , 而 1,$ 将 代 表 文 件 中 所 有的 行 。 替 换 命 令 将 用 要 替 换 的 模 式 来 代 替 一 个 与 搜 索 模 式 相 匹 配 的 字 符 串 , 加入 g 以 后 , 将 对 所 有 与 搜 索 模 式 匹 配 的 文 本 进 行 替 换 , 即 在 替 换 命 令 中 指 定 所有 文 本 行 将 执 行 全 局 替 换 操 作 。 该 命 令 的 使 用 格 式 如 下 :
: 1, $ s/psttern/text/g
下 面 的 命 令 将 把 文 件 中 所 有 搜 索 到 的 字 符 串 m ilk 用 字 符 串 yogurt 代 替 。
: 1, $ /s/milk/yogurt/g
与 Sed 编 辑 器 一 样 , 所 有 的 特 殊 字 符 在 Vi 编 辑 器 底 行 命 令 模 式 下 仍 然 起 作用 。 在 下 面 的 例 子 中 , 每 一 行 的 第 一 个 单 词 都 将 被 用 字 符 - 代 替 。 当 在 模 式 中 使用 特 殊 字 符 ^ 的 时 候 , 它 代 表 某 行 的 首 字 符 。 本 例 中 , 括 号 内 代 表 一 系 列 可 能 的字 符 , [ a-z ] 表 示 任 何 匹 配 的 小 写 字 母 , 而 [ a-z ] * 代 表 任 何 字 母 组 成 的 字 符串 , 其 后 是 一 个 空 格 。 该 搜 索 模 式 表 示 文 本 行 上 第 一 个 单 词 , 该 单 词 可 以 是 任意 一 组 字 母 组 合 成 的 , 而 替 换 命 令 中 的 替 换 文 本 是 由 字 符 - 及 空 格 组 成 的 文 本 。
: 1, $ /s/^ [ a-z ] * /- /
Vi 编 辑 器 中 的 选 项 ; set 及 .exrc
Vi 编 辑 器 有 一 组 选 项 , 这 些 选 项 用 配 置 你 的 Vi 编 辑 器 。 你 可 以 用 set 命 令来 设 置 编 辑 选 项 。 你 也 可 以 在 Vi 编 辑 器 中 的 底 行 命 令 模 式 下 设 置 选 项 。 set 命令 后 加 入 选 项 名 可 以 打 开 该 选 项 , 如 果 在 选 项 名 的 前 面 加 入 字 符 串 no 将 关 闭 该选 项 。 例 如 , set number 命 令 将 设 置 行 选 项 , 用 来 在 屏 幕 上 显 示 文 本 行 的 行 号 , 而 set nonumber 将 关 闭 行 选 项 , 即 在 屏 幕 上 不 显 示 文 本 行 的 行 号 。 不 带 参 数 的set 命 令 本 身 将 列 出 用 户 已 设 置 的 所 有 选 项 。 如 果 某 个 选 项 已 经 设 置 , 在 set 命令 后 键 入 选 项 的 名 , 系 统 将 显 示 该 选 项 的 值 。 命 令 set all 将 显 示 所 有 设 选 项 的
设 置 。
17.8.1 Vi 编 辑 器 初 始 化 文 件 .exrc
有 时 你 希 望 在 编 辑 所 有 的 文 件 时 都 设 置 了 特 定 的 选 项 。 与 每 次 都 需 对 每 个你 所 编 辑 的 文 件 手 动 设 置 选 项 不 同 , 你 可 以 用 Shell 变 量 EXINIT 或 初 始 化 文 件来 自 动 设 置 你 的 编 辑 器 选 项 。 如 果 想 用 EXINIT 变 量 来 自 动 设 置 选 项 , 你 必 须用 set 命 令 来 设 置 你 想 设 置 的 选 项 , 且 需 把 它 们 用 单 引 号 括 起 来 , 并 赋 值 给 变量 EXINIT 。 任 何 时 候 启 动 Vi 编 辑 器 , 保 存 在 变 量 EXINIT 中 的 set 命 令 都 被 自动 执 行 。 在 下 面 的 例 子 中 , 用 户 给 EXINIT 变 量 赋 值 , 该 变 量 把 编 辑 器 设 置 成 nu
( 带 行 号 ) 及 ic ( 搜 索 时 忽 略 大 小 写 ) 。
$ EXINIT= ‘ set nu ic ’
尽 管 你 可 以 在 Shell 命 令 下 把 set 命 令 设 置 的 选 项 赋 值 给 变 量 EXINIT , 但更 多 的 是 可 以 在 登 陆 或 Shell 初 始 化 文 件 中 给 EXINIT 变 量 赋 值 。 于 是 , 你 任 何时 候 登 陆 , EXINIT 变 量 都 会 被 自 动 赋 值 。 看 下 面 的 例 子 : 在 用 户 初 始 化 文件 .bash_profile 中 , 被 单 引 号 括 起 来 的 set 命 令 被 赋 值 给 变 量 EXINIT 。
.bash_profile 文 件 清 单 :
EXINIT= ‘ set nu ic ’
用 这 种 方 法 设 置 的 选 项 会 在 你 每 个 编 辑 的 文 本 中 都 起 作 用 。 但 是 , 有 时 你希 望 这 些 指 定 的 选 项 只 对 某 部 分 特 定 的 文 件 起 作 用 , 例 如 , 你 只 希 望 在 编 辑 C 源 程 序 时 显 示 行 号 , 而 仅 在 你 编 辑 的 普 通 文 本 文 件 中 自 动 换 行 , 这 时 , 你 可 以
用 编 辑 器 初 始 化 文 件 .exrc 对 特 定 类 型 的 文 件 定 制 特 定 的 选 项 。 .exrc 文 件 包 含一 些 设 置 编 辑 器 选 项 的 命 令 。 当 Vi 编 辑 器 启 动 时 , Shell 首 先 搜 索 当 前 的 工 作目 录 , 如 果 该 文 件 存 在 , 将 执 行 运 行 该 文 件 。 通 常 我 们 用 set 命 令 来 为 编 辑 器设 置 编 辑 选 项 。在 下 面 的 例 子 中 ,.exrc 文 件 包 含 两 条 set 命 令 ,用 来 设 置 n u( 带行 号 ) 及 ic ( 搜 索 时 忽 略 大 小 写 ) 选 项 。
.exrc 文 件 清 单 :
set nu set ic
如 果 在 当 前 工 作 目 录 下 没 有 搜 索 到 .exrc 文 件 , Shell 将 会 在 用 户 主 目 录 下
搜 索 .exrc 文 件 。 任 何 目 录 下 都 可 以 有 单 独 的 .exrc 文 件 , 这 样 , 你 可 以 根 据 目录 下 文 件 的 类 型 来 定 制 你 的 Vi 编 辑 器 选 项 。 例 如 , 在 存 放 程 序 源 代 码 文 件 的 目录 下 进 行 源 代 码 编 辑 时 , 如 果 你 希 望 显 示 代 码 的 行 号 , 可 以 在 该 目 录 下 . 的 exrc 文 件 中 用 set 命 令 设 置 number 选 项 。 当 在 该 目 录 下 启 动 Vi 编 辑 器 时 , 该 文 件中 的 命 令 将 被 执 行 , 从 而 自 动 设 置 number 选 项 。 在 另 外 一 个 目 录 下 进 行 文 本编 辑 时 , 如 果 你 希 望 自 动 换 行 , 可 以 在 该 目 录 下 .的 exrc 文 件 中 用 set 命 令 设 置wordwrap 选 项 。 当 在 该 目 录 下 启 动 Vi 编 辑 器 时 , 编 辑 的 文 本 将 自 动 换 行 。
有 一 些 选 项 设 置 可 以 用 来 控 制 搜 索 操 作 。 如 果 你 设 置 ignorecase 选 项 , 在搜 索 过 程 中 进 行 模 式 匹 配 的 时 候 将 忽 略 大 小 写 。 例 如 , 执 行 搜 索 命 令 /There 时 , 字 符 串 there 及 There 都 将 被 搜 索 到 。 你 可 以 把 ignorecase 选 项 简 写 成 ic , 命令 set ignorecase 及 set ic 将 把 忽 略 大 小 写 选 项 打 开 , 而 set unignorecase 及set noic 命 令 将 关 闭 大 小 写 选 项 。
有 几 个 选 项 可 以 使 你 用 来 控 制 文 本 的 显 示 方 式 。 你 可 以 在 文 本 行 上 显 示 行号 、 显 示 文 本 中 的 非 打 印 字 符 、 控 制 显 示 在 屏 幕 上 的 文 本 行 数 及 文 本 中 TAB 键的 空 格 数 等 。 你 已 经 知 道 , 使 用 set number 命 令 可 以 使 编 辑 器 显 示 行 号 ( 也 可以 简 写 为 set nu ) , 使 用 set nonumber 命 令 来 关 闭 显 示 行 号 选 项 。
你 可 以 用 tabstop 选 项 来 设 置 更 改 键 入 制 表 键 ( TAB 键 ) 时 制 表 键 中 包 含的 空 格 数 。 命 令 set tabstop=5 用 来 把 制 表 键 ( TAB 键 ) 中 的 空 格 键 设 置 为 五个 空 格 。 tabstop 选 项 可 以 简 写 为 ts 。 set ts=3 将把 TAB 键 中 的 空 格 键 设 置 为三 个 空 格 。 tabstop 选 项 并 不 真 正 改 变 文 本 中 的 空 格 数 , 只 是 改 变 文 本 在 屏 幕 上的 显 示 方 式 。 尽 管 在 编 辑 器 编 辑 的 过 程 中 , 上 述 tabstop 选 项 被 设 成 5 , 但 当 打印 出 文 本 时 , TAB 键 仍 然 代 表 标 准 的 八 个 字 符 。
有 几 个 选 项 影 响 你 输 入 文 本 时 的 方 式 。 当 你 在 输 入 模 式 下 且 在 进 行 字 符 输入 的 时 候 , 这 些 选 项 会 起 作 用 。 在 输 入 模 式 下 , 你 可 以 在 指 定 的 边 界 上 开 始 新的 一 行 , 也 可 以 进 行 文 本 自 动 缩 进 。 当 你 输 入 回 括 号 ) 时 , 编 辑 器 还 可 以 自 动检 查 你 是 否 输 入 了 起 始 括 号 ( 。 在 进 行 字 符 输 入 时 , 你 还 可 以 设 置 按 tab 键 时输 入 的 空 格 数 。
wrapmargin 选 项 ( 可 以 缩 写 为 wm ) 用 来 决 定 文 本 的 右 边 界 。 设 置 了wrapmargin 选 项 后 进 行 文 本 编 辑 的 时 候 , 如 果 输 入 的 文 本 到 达 边 界 , 编 辑 器 会自 动 回 车 , 插 入 新 的 文 本 行 , 并 在 新 的 文 本 行 上 继 续 进 行 文 本 的 输 入 。 命 令 set wrapmargin=30 将 把 输 入 边 界 定 为 30 个 字 符 , 当 你 在 文 本 行 上 输 入 第 30 个 字符 的 时 候 , 当 前 文 本 行 下 会 自 动 插 入 新 的 文 本 行 , 并 在 新 插 入 的 文 本 行 上 继 续将 要 的 输 入 。 set wm=0 命 令 将 取 消 右 边 界 的 设 置 。 如 果 右 边 界 没 有 设 置 , 新 的
文 本 行 不 会 自 动 插 入 到 文 件 中 去 , 你 必 须 键 入 ENTER 键 或 在 原 文 本 行 上 继 续将 要 的 输 入 。
autoindent 选 项 ( 可 缩 写 为 ai) 可 实 现 文 本 行 的 自 动 缩 进 。 当 你 处 于 输 入模 式 下 , 且 正 进 行 字 符 输 入 的 时 候 , 自 动 缩 进 选 项 会 起 作 用 。 当 你 打 开 自 动 缩进 选 项 时 , 且 在 行 首 键 入 了 若 干 TAB 键 , 那 么 , 下 一 行 将 自 动 缩 进 相 同 的 TAB 键 数 。 如 果 你 在 下 一 行 的 缩 进 处 继 续 键 入 TAB 键 , 该 行 的 下 一 行 将 缩 进 与 上 一行 相 同 的 TAB 键 数 ( 包 括 新 键 入 的 TAB 键 ) 。 尽 管 自 动 缩 进 选 项 允 许 你 增 加缩 进 量 ( 例 如 , 在 原 缩 进 的 基 础 上 继 续 键 入 TAB 键 ) , 但 有 时 你 需 要 在 某 些 行上 减 少 缩 进 量 ,此 时 ,你 只 需 键 入 CTRL-D 键 来 取 消 一 次 缩 进 。键 入 一 次 CTRL-D 将 使 光 标 左 移 一 个 TAB 键 ,键 入 第 二 次 CTRL-D 将 使 继 续 使 光 标 左 移 一 个 TAB 键 , 依 次 类 推 。 你 可 以 使 用 set noai 命 令 来 禁 止 编 辑 器 缩 进 。
Vi 编 辑 器 小 结
Vi 编 辑 器 是 一 个 文 本 编 辑 器 , 用 来 编 辑 文 本 文 件 。 Vi 编 辑 器 有 三 种 编 辑 模式 : 命 令 模 式 、 输 入 模 式 及 底 行 命 令 模 式 。 在 不 同 模 式 下 , 键 盘 的 特 性 将 改 变 。在 命 令 模 式 下 , 每 个 键 都 是 一 个 编 辑 命 令 ; 在 输 入 模 式 下 , 键 盘 类 似 于 一 台 打字 机 , 每 个 键 用 于 向 文 件 中 输 入 文 本 ; 在 底 行 命 令 模 式 下 , 屏 幕 的 底 行 将 出 现一 行 , 你 可 以 在 该 行 上 输 入 行 编 辑 命 令 。
在 Shell 命 令 行 上 键 入 Vi 命 令 , 同 时 指 定 编 辑 的 文 件 名 就 可 以 启 动 Vi 编 辑
器 , 并 开 始 该 文 件 的 编 辑 。 你 可 以 用 w 命 令 保 存 文 件 , 用 q !命 令 退 出 文 件 的 编辑 。 这 些 命 令 必 须 处 于 底 行 命 令 模 式 下 。 键 入 :命 令 可 以 进 入 底 行 命 令 模 式 。 ZZ 命 令 将 保 存 编 辑 的 文 件 、 结 束 本 次 编 辑 并 退 出 Vi 编 辑 器 。
当 使 用 Vi 编 辑 器 的 时 候 , 你 会 在 输 入 模 式 与 命 令 模 式 之 间 不 断 地 转 换 。 在命 令 模 式 下 , 键 入 a 命 令 及 i 命 令 可 以 直 接 进 入 输 入 模 式 ; 修 改 命 令 cc 将 首 先删 除 文 本 , 然 后 进 入 输 入 模 式 。 尽 管 有 很 多 方 法 进 入 输 入 模 式 , 但 只 有 一 种 方式 退 出 该 模 式 , 即 键 入 ESC 键 。 一 旦 进 入 输 入 模 式 , 键 入 ESC 命 令 将 退 出 输入 模 式 。
Vi 是 一 个 非 常 复 杂 的 编 辑 器 , 它 有 大 量 的 命 令 , 通 过 这 些 命 令 用 户 可 以 操作 、 控 制 这 一 全 屏 幕 编 辑 器 。 你 可 以 以 单 词 、 句 子 及 段 落 为 单 位 进 行 光 标 移 动 。大 多 数 小 写 字 母 命 令 都 有 与 之 相 对 应 的 大 写 字 母 命 令 , 例 如 : 命 令 i 及 命 令 I 都用 来 在 文 本 行 上 输 入 字 符 。 本 章 的 前 半 部 分 重 点 介 绍 了 一 组 核 心 命 令 , 这 部 分命 令 主 要 用 来 实 现 基 本 的 编 辑 操 作 , 而 本 章 的 后 半 部 分 集 中 介 绍 Vi 编 辑 器 的 一些 高 级 命 令 与 高 级 特 性 。 Vi 编 辑 器 中 的 编 辑 命 令 可 以 编 辑 处 理 字 符 、 文 本 行 、单 词 、 句 子 及 段 落 等 。 这 些 修 改 、 拷 贝 及 删 除 等 操 作 都 可 以 用 来 操 作 文 本 ( 见表 17-2 至表 17-4 ) 。 你 可 以 移 动 、 拷 贝 及 取 消 文 本 操 作 , 也 可 以 根 据 指 定 的模 式 向 前 或 向 后 搜 索 文 本 。 用 来 删 除 字 符 的 命 令 是 x 命 令 , 而 用 来 删 除 文 本 行的 命 令 是 dd 命 令 。 有 时 无 意 中 删 除 或 修 改 了 文 件 中 的 文 本 , 你 可 以 使 用 u 命令 取 消 向 前 的 编 辑 操 作 。 如 果 你 意 外 地 删 除 或 修 改 了 文 本 , 你 可 以 键 入 u 键 来取 消 这 一 意 外 操 作 。
Vi 编 辑 器 还 有 大 量 的 选 项 , 这 些 选 项 可 以 用 set 命 令 来 设 置 。 这 些 选 项 可
以 用 来 设 置 Vi 编 辑 器 的 一 些 特 征 , 如 : 是 否 显 示 行 号 , 是 否 自 动 回 车 等 。 你 可以 在 Vi 编 辑 器 中 手 动 设 置 这 些 选 项 , 也 可 以 在 登 陆 或 Shell 初 始 化 文 件 中 , 给EXINIT 变 量 赋 值 ( 其 值 为 单 引 号 括 起 来 的 set 命 令 ) 。 当 你 启 动 Vi 编 辑 器 的时 候 , 这 些 指 定 的 选 项 会 被 自 动 设 置 。 你 也 可 以 创 建 编 辑 初 始 化 文 件 .exrc , 并把 set 命 令 放 置 到 .exrc 文 件 中 。 任 何 时 候 你 启 动 Vi 编 辑 器 , 当 前 目 录 下 .exrc 文 件 中 的 命 令 将 被 执 行 。
表 17-2Vi 编 辑 器 命 令
按 键 光 标 移 动
h 左 移 光 标 一 个 字 符
l 右 移 光 标 一 个 字 符
k 光 标 上 移 一 行
j 光 标 下 移 一 行
w 光 标 右 移 ( forward ) 一 个 单 词
W 光 标 右 移 ( forward ) 一 个 空 格 定 界 词
b 光 标 左 移 ( backward ) 一 个 单 词
B 光 标 左 移 ( backward ) 一 个 空 格 定 界 词
e 光 标 移 动 至 下 一 单 词 词 尾
E 光 标 移 动 至 下 一 空 格 定 界 词 词 尾
- 光 标 移 动 至 行 首
$ 光 标 移 动 至 行 尾
续 表 | ||
---|---|---|
ENTER - |
光 标 移 动 至 下 一 行 行 尾 光 标 移 动 至 上 一 行 行 尾 |
|
( |
光 标 移 动 至 句 首 |
|
) |
光 标 移 动 至 句 尾 |
|
{ |
光 标 移 动 至 段 首 |
|
} |
光 标 移 动 至 段 尾 |
|
CTRL-F |
向 下 滚 屏 , 并 显 示 下 一 屏 文 本 |
|
CTRL-B CTRL-D |
向 上 滚 屏 , 并 显 示 上 一 屏 文 本 向 下 滚 半 屏 |
|
CTRL-U |
向 上 滚 半 屏 |
|
G |
移 动 光 标 至 文 本 最 后 一 行 |
|
NumG |
移 动 光 标 至 指 定 一 行 ,例 如 ,45G |
将 把 光 标 移 动 至 第 45 |
H |
移 动 光 标 至 屏 幕 顶 部 |
|
M |
移 动 光 标 至 屏 幕 中 间 |
|
L |
移 动 光 标 至 屏 幕 底 部 |
|
“ |
移 动 光 标 至 先 前 光 标 所 在 的 位 置 |
mmark 移 动 光 标 至 标 识 文 本 处 , 标 识 ( mark ) 可 以 是 字 母 表中 任 何 字 符
’ mark 移 动 至 用 mark 标 识 的 文 本 行
续 表
输 入 所 有 输 入 命 令 将 使 Vi 编 辑 器 进 入 输 入 模 式 , 键 入 ESC
命 令 退 出 输 入 模 式
a 在 光 标 后 插 入 文 本
A 在 行 尾 插 入 文 本
i 在 光 标 前 插 入 文 本
I 在 文 本 行 的 第 一 个 非 空 白 处 字 符 前 插 入 文 本
- 在 当 前 行 之 下 插 入 文 本 行
O 在 当 前 行 之 上 插 入 文 本 行删 除
x 删 除 光 标 处 的 一 字 符
X 删 除 光 标 处 前 一 字 符
Dw 删 除 至 单 词 的 末 尾
db 删 除 至 单 词 的 开 始
dW 删 除 空 格 定 界 单 词
dB 删 除 至 空 格 定 界 单 词 的 开 始
dd 删 除 光 标 所 在 行
D 删 除 到 行 尾
d0 删 除 到 行 的 开 始
d 删 除 其 后 指 定 的 文 本
d) 删 除 至 句 的 末 尾
续 表
d} 删 除 至 段 的 末 尾
dG 删 除 到 工 作 缓 冲 区 的 末 尾
dm 删 除 至 标 识 所 有 文 本 ( 该 命 令 后 跟 一 标 识 )
dL 删 除 到 屏 幕 最 后 一 行
dH 删 除 到 屏 幕 第 一 行
J 把 光 标 下 一 行 合 并 至 当 前 行 行 尾 , 实 际 上 是 删 除 当 前 行上 的 分 行 字 符 ( 该 字 符 不 可 见 )
修 改 除 非 重 键 入 命 令 r, 所 有 修 改 命 令 都 使 用 户 在 删 除 文 本后 进 入 输 入 模 式
s 删 除 光 标 所 在 的 字 符 , 并 使 用 户 进 入 输 入 模 式
cw 删 除 光 标 所 在 的 单 词 , 并 使 用 户 进 入 输 入 模 式
cb 修 改 至 单 词 词 首
cW 修 改 空 格 定 界 单 词
cB 修 改 至 空 格 定 界 单 词 词 首
cc 删 除 光 标 所 在 的 字 符 , 并 使 用 户 进 入 输 入 模 式
c0 从 光 标 处 修 改 至 行 首 ( 即 第 一 个 非 空 格 字 符 )
C 修 改 至 行 尾 , 并 使 用 户 进 入 输 入 模 式
c 修 改 其 后 指 定 的 文 本
- 修 改 至 句 子 结 尾
c} 修 改 至 段 落 结 尾
续 表
cG 修 改 至 文 件 结 尾
cm 修 改 至 标 识 的 所 有 文 本 ( 该 命 令 后 跟 一 标 识 )
cL 修 改 至 屏 幕 底 部
cH 修 改 至 屏 幕 顶 部
r 替 换 光 标 处 的 字 符 ; 键 入 r 命 令 后 , 用 户 键 入 替 换 字 符 , 但 不 必 进 入 输 入 模 式 就 能 完 成 替 换 , 用 户 仍 然 处 于 命 令模 式 下
R 首 先 进 入 输 入 模 式 , 然 后 用 键 入 的 字 符 覆 盖 原 来 的 字符 。 似 乎 是 处 于 命 令 模 式 下 , 而 实 际 上 处 于 输 入 模 式 下
移 动 在 移 动 文 本 的 同 时 首 先 删 除 文 本 , 然 后 把 光 标 移 动 到 想要 插 入 的 地 方 键 入 p 命 令 ( 当 该 文 本 被 删 除 时 , 它 会 被自 动 保 存 在 特 殊 缓 冲 区 之 中 )
P 插 入 删 除 或 拷 贝 的 字 符 至 光 标 所 在 的 行 或 字 符 之 后
P 插 入 删 除 或 拷 贝 的 字 符 至 光 标 所 在 的 行 或 字 符 之 前
dw P 删 除 一 单 词 , 移 动 光 标 至 你 指 定 的 地 方 , 键 入 P 命 令之 后 , 被 删 除 的 单 词 将 被 插 入 至 光 标 所 在 单 词 的 与 下 一单 词 之 间
dw p 删 除 一 单 词 , 移 动 光 标 至 你 指 定 的 地 方 , 键 入 p 命 令 之后 , 被 删 除 的 单 词 将 被 插 入 至 光 标 所 在 单 词 的 与 前 一 单词 之 间
续 表
dd p 删 除 一 文 本 行 , 移 动 光 标 至 你 指 定 的 地 方 , 键 入 p 命 令之 后 , 被 删 除 的 文 本 行 将 被 插 入 至 光 标 所 在 的 行 与 下 一行 之 间
d p 首 先 删 除 其 后 指 定 的 文 本 , 然 后 把 它 移 动 光 标 指 定 的 地方 ( 键 入 p 或 P )
- p 移 动 至 句 子 结 尾
d} p 移 动 至 段 尾
dG p 移 动 至 文 件 结 尾
dm p 移 动 至 标 识 处 的 所 有 文 本 ( 该 命 令 后 跟 一 标 识 )
dL p 移 动 至 屏 幕 底 部
dH p 移 动 至 屏 幕 顶 部
拷 贝 拷 贝 命 令 意 味 着 该 命 令 与 p 命 令 最 后 在 一 起 使 用 。 在 拷贝 文 本 之 前 , 用 户 把 光 标 移 动 至 需 要 插 入 文 本 的 地 方 , 然 后 键 入 p 命 令 , 于 是 被 拷 贝 的 文 本 将 被 插 入 到 光 标 所在 的 字 符 或 文 本 行 之 后
yw 拷 贝 光 标 位 置 处 的 单 词 , 然 后 把 单 词 插 入 到 光 标 所 在 的
位 置 上 ( 键 入 p 命 令 后 将 把 单 词 插 入 到 光 标 所 在 的 单 词之 后 )
yb 从 光 标 位 置 处 拷 贝 字 符 至 单 词 词 首
yW 拷 贝 光 标 位 置 处 空 格 定 界 单 词
续 表
yB |
从 光 标 位 置 处 拷 贝 字 符 至 空 格 定 界 单 词 词 首 |
|
---|---|---|
yy 或 |
Y |
说 明 : 拷 贝 光 标 所 在 的 文 本 行 , 然 后 把 拷 贝 行 拷 贝 至 光 |
标 指 定 的 行 上 ( 键 入 p 命 令 将 把 拷 贝 行 拷 贝 至 光 标 所 在 |
||
的 行 之 后 ) |
||
y |
拷 贝 其 后 指 定 的 文 本 |
|
y) |
拷 贝 至 句 子 结 尾 |
|
y} |
拷 贝 至 段 落 结 尾 |
|
yG ym |
拷 贝 至 文 件 结 尾 拷 贝 至 标 识 处 所 有 的 文 本 ( 该 命 令 后 跟 一 标 识 ) |
|
yL |
拷 贝 至 屏 幕 底 部 |
|
yH |
拷 贝 至 屏 幕 顶 部 |
|
搜 索 |
有 两 种 搜 索 命 令 。 执 行 搜 索 命 令 时 将 在 屏 幕 的 底 行 开 辟 |
一 行 , 然 后 用 户 在 该 行 上 键 入 搜 索 的 模 式 , 按 ENTER
键 后 执 行 搜 索 ( 回 车 键 )
/pattern 向 前 ( forward ) 搜 索 文 本 中 的 模 式
?pattern 向 后 ( backward ) 搜 索 文 本 中 的 模 式
n 重 复 先 前 的 搜 索 ( 可 以 向 前 也 可 以 向 后 )
N 与 先 前 相 反 的 方 向 搜 索 文 本 中 的 模 式
/ 向 前 ( forward ) 重 复 先 前 的 搜 索
? 向 后 ( backward ) 重 复 先 前 的 搜 索
续 表缓 冲 区 ( Buffers ) 有 9 个 数 字 缓 冲 区 , 有 26 个 有 名 缓 冲 区 。 有 名 缓 冲 区
由 字 母 表 中 a-z 的 26 个 小 写 字 母 来 标 识 。 你 可 以 用 双引 号 来 引 用 指 定 的 缓 冲 区
“ buf-letter 引 用 一 个 指 定 的 有 名 缓 冲 区 , 如 a 、 b 、 c 等
“ num 引 用 一 个 指 定 的 数 字 缓 冲 区 , 该 数 字 在 1-9 之 间
表 17-3Vi 行 编 辑 命 令 |
|||
---|---|---|---|
文 件 操 作 |
功 能 |
||
W r filename q |
W rite Read Quit |
保 存 文 件插 入 文 件 退 出 编 辑 器 |
|
删 除 、 移 动 、 拷 贝 d |
Delete |
删 除 一 行 或 多 行 |
|
mNum |
Move |
移 动 一 行 或 多 行 |
文 本 |
( 首 先 删 除 一 行 |
或 多 |
||
行 , 然 后 在 指 定 的 |
Num |
行 之 后 插 入 要 移 动 的 文本 行 , 也 就 是 刚 才 删 除的 文 本 )
续 表
coNum |
Copy |
拷 贝 一 行 或 多 行 来 文 本 ( 首 先 拷 贝 它 们 , 然 后在 指 定 的 Num 行 之 后插 入 要 拷 贝 的 文 本 行 |
---|---|---|
行 ) |
||
行 定 位 |
说 明 |
|
Num |
一 行 |
用 行 号 来 定 位 一 行 |
Num,Num |
两 行 |
定 位 用 逗 号 ,隔 开 的 两 行 |
文 本 |
||
Num-Num |
一 系 列 的 行 |
定 位 用 符 号 - 隔 开 的 多 行 |
文 本 |
||
-Num |
行 偏 移 |
定 位 从 当 前 行 向 上 偏 移 |
Num 的 文 本 行 |
||
+Num |
行 偏 移 |
定 位 从 当 前 行 向 下 偏 移 |
$ |
文 本 最 后 一 行 |
Num 的 文 本 行 符 号 $ 定 位 至 文 件 最 后 |
一 行 |
续 表
/Pattern/ 模 式 定 位 用 模 式 pattern 定 位 一行 ( 符 号 / 表 示 向 前
( forward ) 搜 索 定 位 一行 )
?Pattern? |
模 式 定 位 |
用 |
模 式 pattern 定 位 一 |
---|---|---|---|
行 |
( 符 号 ? 表 示 向 后 |
||
( |
backward ) 搜 索 定 位 |
||
g/Pattern/ |
模 式 定 位 ( 全 文 件 ) |
一 一 |
行 ) 系 列 的 行 被 搜 索 定 位 |
( |
所 有 包 含 指 定 模 式 的 |
||
行 |
都 将 被 搜 索 到 ) |
||
特 殊 字 符 |
说 明 |
||
. |
字 符 通 配 符 |
与 |
任 何 可 能 的 字 符 都 匹 |
配 |
的 字 符 |
||
* |
任 意 字 符 或 字 符 串 |
与 |
任 意 字 符 或 字 符 串 都 |
匹 |
配 的 字 符 |
||
[ ] |
字 符 集 |
与 |
字 符 集 中 指 定 的 任 意 |
字 |
符 相 匹 配 的 字 符 |
||
^ |
行 起 始 符 |
定 |
位 于 行 首 |
$ |
行 结 束 符 |
定 |
位 于 行 尾 |
续 表 | ||
---|---|---|
/< |
单 词 开 始 |
定 位 于 单 词 词 首 |
>/ |
单 词 结 束 |
定 位 于 单 词 词 尾 |
替 换 命 令 |
说 明 |
s/pattern/replacement/ 用 replacement 替 换 当 前 行 上 的 一 个 pattern
s/pattern/replacemant/ g
Num-Num s/pattern/replacement/ 1,$ s/pattern/replacement/ g
用 replacement 替 换 当 前 行 上 的 所 有 pattern 用 replacement 替 换 指 定 行 之 间 的 pattern 用 replacement 替 换 文 件 中 所 有 的 pattern
表 |
17-4 Vi 搜 索 、 显 示 、 输 入 选 项 |
||||
---|---|---|---|---|---|
搜 索 选 项 ignorecase |
缩写 ic |
缺 省 值 noic |
说明 搜 索 是 忽 |
略 |
大 小 |
写 |
|||||
magic wrapscan |
ws |
magic nows |
使 特 殊 字 符 有 效 搜 索 时 可 绕 回 至 |
||
文 件 首 |
|||||
文 本 显 示 选 项 |
|||||
缩 写 |
缺 省 值 |
说 明 |
续 表
number nu nonm 显 示 行 号
list nolist 用 ^I 及 $ 标 识 显示 出 新 的 行
w indow window-23 设 置 屏 幕 上 显 示的 文 本 行 行 数
tabstop ts Ts-8 设置 tab 键 显 示的 空 格 数
输 入 选 项 缩写 缺 省 值 说明
wrapmargin wm wm-0 在 进 行 文 本 输入 、 到 达 文 本 右边 界 的 时 候 编 辑器 自 动 换 行
autoindent ai noai 自 动 缩 进 , 按CTRL-D 返 回 至上 一 缩 进 处
shiftwidth sw sw-8 移 动 宽 度
showmatch sm nosm 显 示 初 始 括 号
( 、 {、 [ 及 结 束括 号 ) 、 }、 ]
续 表
beautify bf nobt 禁 止 输 入 控 制 字符