BBS水木清华站∶精华区

发信人: yyh (阿欢&正在努力上进中......), 信区: Linux        
标  题: vi的使用 
发信站: BBS 水木清华站 (Sun Oct 17 19:20:17 1999) 
 
Vi使 用 说 明 
                                         佚 名 
                 ---- Vi 简 介 
                 ---- Vi 是 Unix 世 界 里 极 为 普 遍 的 全 屏 
                 幕 文 字 编 辑 器, 几 乎 可 以 说 任 何 一 
                 台 Unix 机 器 都 会 提 供 这 套 软 件。Linux 
                 当 然 也 有, 它 的 vi 其 实 是 elvis( 版 权 
                 问 题), 不 过 它 们 都 差 不 多。 熟 悉 DOS 
                 下 的 文 字 处 理 後, 也 许 会 感 到 vi 并 
                 不 好 用;Unix 上 也 已 经 发 展 出 许 多 更 
                 新、 更 好 用 的 文 字 编 辑 器, 但 是 并 不 
                 一 定 每 一 台 Unix 机 器 上 都 会 安 装 这 
                 些 额 外 的 软 件。 所 以, 学 习 vi 的 基 本 
                 操 作 还 是 有 好 处, 让 你 在 各 个 不 同 
                 的 机 器 上 得 心 应 手。 
                 ---- Vi 基 本 观 念 
                 ---- Unix 提 供 一 系 列 的 ex 编 辑 器, 包 
                 括 ex, edit 和 vi 。 相 对 於 全 屏 幕 编 辑 
                 器, 现 在 可 能 很 难 想 像 如 何 使 用 ex, 
                 edit 这 种 行 列 编 辑 器( 有 人 用 过 DOS 
                 3.3 版 以 前 所 附 的 EDLIN 吗 ?)。 Vi 的 
                 原 意 是 "Visual", 它 是 一 个 立 即 反 应 
                 的 编 辑 程 式, 也 就 是 说 可 以 立 刻 看 
                 到 操 作 结 果。 
                 ---- 也 由 於 vi 是 全 屏 幕 编 辑 器, 所 以 
                 它 必 须 控 制 整 个 终 端 机 屏 幕 哪 里 该 
                 显 示 些 什 麽。 而 终 端 机 的 种 类 有 许 
                 多 种, 特 性 又 不 尽 相 同, 所 以 vi 有 必 
                 要 知 道 现 在 所 使 用 的 是 哪 一 种 终 端 
                 机。 这 是 通 过 TERM 这 个 环 境 变 数 来 设 
                 定, 设 定 环 境 变 数 方 面 请 查 看 所 使 
                 用 shell 的 说 明。( 除 非 执 行 vi 的 时 候 
                 回 应 unknow terminal type , 否 则 可 以 不 
                 用 设 定。) 
                 ---- 只 要 简 单 的 执 行 vi 就 可 以 进 入 
                 vi 的 编 辑 环 境。 在 实 际 操 作 之 前 先 
                 对 它 有 个 概 略 的 了 解 会 比 较 好。Vi 有 
                 两 种 模 式, 输 入 模 式 以 及 指 令 模 式。 
                 输 入 模 式 即 是 用 来 输 入 文 字 资 料, 
                 而 指 令 模 式 则 是 用 来 下 达 一 些 编 排 
                 文 件、 存 档、 以 及 离 开 vi 等 等 的 操 作 
                 指 令。 当 执 行 vi 後, 会 先 进 入 指 令 模 
                 式, 此 时 输 入 的 任 何 字 符 都 视 为 指 
                 令。 
                 ---- 进 入 与 离 开 
                 ---- 要 进 入 vi 可 以 直 接 在 系 统 提 示 
                 字 符 下 键 入 vi < 文 件 名 称 >,vi 可 以 
                 自 动 帮 你 载 入 所 要 编 辑 的 文 件 或 是 
                 开 启 一 个 新 文 件。 进 入 vi 後 屏 幕 左 
                 方 会 出 现 波 浪 符 号, 凡 是 列 首 有 该 
                 符 号 就 代 表 此 列 目 前 是 空 的。 要 离 
                 开 vi 可 以 在 指 令 模 式 下 键 入 :q, :wq 
                 指 令 则 是 存 档 後 再 离 开( 注 意 冒 号 
                 )。 要 切 换 到 指 令 模 式 下 则 是 用 
                 [ESC] 键, 如 果 不 晓 得 现 在 是 处 於 什 
                 麽 模 式, 可 以 多 按 几 次 [ESC], 系 统 会 
                 发 出 哔 哔 声 以 确 定 进 入 指 令 模 式。 
                 ---- Vi 输 入 模 式 
                 ---- 如 何 输 入 资 料 呢 ? 有 好 几 个 指 
                 令 可 以 进 入 输 入 模 式: 
                 ---- 新 增 (append) 
                 ---- a 从 光 标 所 在 位 置 後 面 开 始 新 增 
                 资 料, 光 标 後 的 资 料 随 新 增 资 料 向 
                 後 移 动。 
                 ---- A 从 光 标 所 在 列 最 後 面 的 地 方 开 
                 始 新 增 资 料。 
                 ---- 插 入 (insert) 
                 ---- i 从 光 标 所 在 位 置 前 面 开 始 插 入 
                 资 料, 光 标 後 的 资 料 随 新 增 资 料 向 
                 後 移 动。 
                 ---- I 从 光 标 所 在 列 的 第 一 个 非 空 白 
                 字 符 前 面 开 始 插 入 资 料。 
                 ---- 开 始 (open) 
                 ---- o 在 光 标 所 在 列 下 新 增 一 列 并 进 
                 入 输 入 模 式。 
                 ---- O 在 光 标 所 在 列 上 方 新 增 一 列 并 
                 进 入 输 入 模 式。 
                 ---- 也 许 文 字 叙 述 看 起 来 有 点 繁 杂, 
                 但 是 只 要 实 际 操 作 一 下 马 上 可 以 了 
                 解 这 些 操 作 方 式。 实 务 很 重 要, 尤 其 
                 是 电 脑 方 面 的 东 西 随 时 可 以 尝 试 及 
                 验 证 结 果。 极 力 建 议 实 际 去 使 用 它 
                 , 才 有 事 半 功 倍 的 效 用。 
                 ---- Vi 基 本 编 辑 
                 ---- 配 合 一 般 键 盘 上 的 功 能 键, 像 是 
                 方 向 键、[Insert] 、[Delete] 等 等, 现 在 
                 你 应 该 已 经 可 以 利 用 vi 来 处 理 文 字 
                 资 料 了。 当 然 vi 还 提 供 其 他 许 许 多 
                 多 功 能 让 文 字 的 处 理 更 形 方 便, 有 
                 兴 趣 的 看 倌 请 继 续。 
                 ---- 在 继 续 下 去 之 前 先 来 点 BCC 吧。 
                 电 脑 有 许 多 厂 牌, 不 同 的 硬 体 及 作 
                 业 系 统。PC 也 不 是 仅 仅 只 有 IBM PC 及 
                 其 相 容 品 而 已。 事 实 上, 包 括 键 盘, 
                 终 端 机 等 等 往 往 都 有 不 同 的 规 格。 
                 这 代 表 什 麽 ? 
                 ---- 在 文 字 编 辑 软 件 上 会 遇 这 样 的 
                 问 题, 某 些 电 脑 的 键 盘 上 没 有 特 定 
                 的 几 个 功 能 键 ! 那 麽 不 就 有 某 些 功 
                 能 不 能 用 了 ? 这 个 问 题 在 Unix 系 统 
                 上 也 一 样, 几 乎 各 大 电 脑 厂 商 都 有 
                 自 己 的 Unix 系 统, 而 vi 的 操 作 方 法 也 
                 会 随 之 有 点 出 入。 我 们 固 然 可 以 用 
                 PC 的 键 盘 来 说 明 vi 的 操 作, 但 是 还 
                 是 得 提 一 下 这 个 问 题。 
                 ---- 删 除 与 修 改 
                 ---- 何 谓 编 辑 ? 在 这 里 我 们 认 为 是 
                 文 字 的 新 增 修 改 以 及 删 除, 甚 至 包 
                 括 文 字 区 块 的 搬 移、 复 制 等 等。 这 里 
                 先 介 绍 vi 的 如 何 做 删 除 与 修 改。( 注 
                 意: 在 vi 的 原 始 观 念 里, 输 入 跟 编 辑 
                 是 两 码 子 事。 编 辑 是 在 指 令 模 式 下 
                 操 作 的, 先 利 用 指 令 移 动 光 标 来 定 
                 位 要 进 行 编 辑 的 地 方, 然 後 才 下 指 
                 令 做 编 辑。) 
                 ---- x 删 除 光 标 所 在 字 符。 
                 ---- dd 删 除 光 标 所 在 的 列。 
                 ---- r 修 改 光 标 所 在 字 符,r 後 接 著 要 
                 修 正 的 字 符。 
                 ---- R 进 入 取 代 状 态, 新 增 资 料 会 覆 
                 盖 原 先 资 料, 直 到 按 [ESC] 回 到 指 令 
                 模 式 下 为 止。 
                 ---- s 删 除 光 标 所 在 字 符, 并 进 入 输 
                 入 模 式。 
                 ---- S 删 除 光 标 所 在 的 列, 并 进 入 输 
                 入 模 式。 
                 ---- 其 实 呢, 在 PC 上 根 本 没 有 这 麽 麻 
                 烦 ! 输 入 跟 编 辑 都 可 以 在 输 入 模 式 
                 下 完 成。 例 如 要 删 除 字 符, 直 接 按 
                 [Delete] 不 就 得 了。 而 插 入 状 态 与 取 
                 代 状 态 可 以 直 接 用 [Insert] 切 换, 犯 
                 不 著 用 什 麽 指 令 模 式 的 编 辑 指 令。 
                 不 过 就 如 前 面 所 提 到 的, 这 些 指 令 
                 几 乎 是 每 台 终 端 机 都 能 用, 而 不 是 
                 仅 仅 在 PC 上。 
                 ---- 在 指 令 模 式 下 移 动 光 标 的 基 本 
                 指 令 是 h, j, k, l 。 想 来 各 位 现 在 也 
                 应 该 能 猜 到 只 要 直 接 用 PC 的 方 向 键 
                 就 可 以 了, 而 且 无 论 在 指 令 模 式 或 
                 输 入 模 式 下 都 可 以。 多 容 易 不 是。 
                 ---- 当 然 PC 键 盘 也 有 不 足 之 处。 有 个 
                 很 好 用 的 指 令 u 可 以 恢 复 被 删 除 的 
                 资 料, 而 U 指 令 则 可 以 恢 复 光 标 所 在 
                 列 的 所 有 改 变。 这 与 某 些 电 脑 上 的 
                 [Undo] 按 键 功 能 相 同。 
                 ---- Vi 进 阶 应 用 
                 ---- 相 信 现 在 对 於 vi 应 该 已 经 有 相 
                 当 的 认 识。 处 理 文 字 也 不 会 有 什 麽 
                 麻 烦 才 对。 如 果 有 兴 趣 善 用 vi 的 其 
                 它 功 能 进 一 步 简 化 操 作 过 程, 不 妨 
                 继 续 看 下 去。 
                 ---- 移 动 光 标 
                 ---- 由 於 许 多 编 辑 工 作 是 通 过 光 标 
                 来 定 位, 所 以 vi 提 供 许 多 移 动 光 标 
                 的 方 式, 这 个 我 们 列 几 张 简 表 来 说 
                 明( 这 些 当 然 是 指 令 模 式 下 的 指 令 
                 ): 
                  指令 
                              说明 
                                                    功能键 
                  0 
                              移动到游标所在列 
                              的最前面 
                                                    [Home] 
                  $ 
                              移动到游标所在列 
                              的最後面 
                                                    [End] 
                  [CTRL][d] 
                              向下半页 
                  [CTRL][f] 
                              向下一页 
                                                    [PageDown] 
                  [CTRL][u] 
                              向上半页 
                  [CTRL][b] 
                              向上一页 
                                                    [PageUp] 
                  指令 
                              说明 
                  H 
                              移动到视窗的第一列 
                  M 
                              移动到视窗的中间列 
                  L 
                              移动到视窗的最後列 
                  b 
                              移动到下个字的第一个字母 
                  w 
                              移动到上个字的第一个字母 
                  e 
                              移动到下个字的最後一个字母 
                  ^ 
                              移动到游标所在列的第一个非空 
                              白字元 
                  指令 
                              说明 
                  n- 
                              减号移动到上一列的第一个非空 
                              白字元    前面加上数字可以指 
                              定移动到以上 n 列 
                  n+ 
                              加号移动到下一列的第一个非空 
                              白字元 前面加上数字可以指定移 
                              动到以下 n 列 
                  nG 
                              │直接用数字 n 加上大写 G 移 
                              动到第 n 列 
                  指令 
                              说明 
                  fx 
                              往右移动到 x 字元上 
                  Fx 
                              往左移动到 x 字元上 
                  tx 
                              往右移动到 x 字元前 
                  Tx 
                              往左移动到 x 字元前 
                  ; 
                              配合 f&t 使用,重复一次 
                  , 
                              配合 f&t 使用,反方向重复一次 
                  /string 
                              往右移动到有 string 的地方 
                  ?string 
                              往左移动到有 string 的地方 
                  n 
                              配合 /&? 使用,重复一次 
                  N 
                              配合 /&? 使用,反方向重复一次 
                  指令 
                         说明 
                                                        备注 
                  n( 
                         左括号移动到句子的最前面 
                         前面 加上数字可以指定往 
                         前移动 n个句子 
                                                        句子是以! . 
                                                        ? 三种符号来 
                                                        界定 
                  n) 
                         右括号移动到下个句子的最 
                         前面 前面加上数字可以指 
                         定往後移动 n 个句子 
                  n{ 
                         左括弧移动到段落的最前面 
                         前面加上数字可以指定往前 
                         移动 n 个段落 
                                                        段落是以段落 
                                                        间的 空白列 
                                                        界定 
                  n} 
                         右括弧移动到下个段落的最 
                         前面 前面加上数字可以指 
                         定往後移动 n 个段落 
                 ---- 不 要 尝 试 背 诵 这 些 指 令, 否 则 後 
                 果 自 行 负 责。 它 们 看 起 来 又 多 又 杂 
                 乱, 事 实 上 这 是 文 字 叙 述 本 身 的 障 
                 碍。 再 强 调 一 次, 实 际 去 使 用 它 只 要 
                 几 次 就 可 以 不 经 大 脑 直 接 下 达 这 些 
                 奇 奇 怪 怪 的 指 令, 远 比 死 记 活 背 搞 
                 得 模 模 糊 糊 强 多 了。 
                 ---- 进 阶 编 辑 指 令 这 些 编 辑 指 令 非 
                 常 有 弹 性, 基 本 上 可 以 说 是 由 指 令 
                 与 范 围 所 构 成。 例 如 dw 是 由 删 除 指 
                 令 d 与 范 围 w 所 组 成, 代 表 删 除 一 个 
                 字 d(elete) w(ord)。 
                 ---- 指 令 列 表 如 下: 
                 ---- d 删 除(delete)y 复 制(yank)p 放 
                  置(put)c 修 改(change) 
                 ---- 范 围 可 以 是 下 列 几 个: 
                 ---- e 光 标 所 在 位 置 到 该 字 的 最 後 一 
                 个 字 母w 光 标 所 在 位 置 到 下 个 字 的 第 
                 一 个 字 母b 光 标 所 在 位 置 到 上 个 字 的 
                 第 一 个 字 母$ 光 标 所 在 位 置 到 该 列 的 
                 最 後 一 个 字 母0 光 标 所 在 位 置 到 该 列 
                 的 第 一 个 字 母) 光 标 所 在 位 置 到 下 个 
                 句 子 的 第 一 个 字 母( 光 标 所 在 位 置 到 
                 该 句 子 的 第 一 个 字 母} 光 标 所 在 位 置 
                 到 该 段 落 的 最 後 一 个 字 母{ 光 标 所 在 
                 位 置 到 该 段 落 的 第 一 个 字 母 
                 ---- 说 实 在 的, 组 合 这 些 指 令 来 编 辑 
                 文 件 有 一 点 点 艺 术 气 息。 不 管 怎 麽 
                 样, 它 们 提 供 更 多 编 辑 文 字 的 能 力。 
                 值 得 注 意 的 一 点 是 删 除 与 复 制 都 会 
                 将 指 定 范 围 的 内 容 放 到 暂 存 区 里, 
                 然 後 就 可 以 用 指 令 p 贴 到 其 它 地 方 
                 去, 这 是 vi 用 来 处 理 区 段 拷 贝 与 搬 
                 移 的 办 法。 
                 ---- 某 些 vi 版 本, 例 如 Linux 所 用 的 
                 elvis 可 以 大 幅 简 化 这 一 坨 指 令。 如 
                 果 稍 微 观 察 一 下 这 些 编 辑 指 令 就 会 
                 发 现 问 题 其 实 是 定 范 围 的 方 式 有 点 
                 杂, 实 际 上 只 有 四 个 指 令 罢 了。 指 令 
                 v 非 常 好 用, 只 要 按 下 v 键, 光 标 所 
                 在 的 位 置 就 会 反 白, 然 後 就 可 以 移 
                 动 光 标 来 设 定 范 围, 接 著 再 直 接 下 
                 指 令 进 行 编 辑 即 可。 
                 ---- 对 於 整 列 操 作, vi 另 外 提 供 了 更 
                 方 便 的 编 辑 指 令。 前 面 曾 经 提 到 过 
                 删 除 整 列 文 字 的 指 令 dd 就 是 其 中 一 
                 个;cc 可 以 修 改 整 列 文 字; 而 yy 则 是 
                 复 制 整 列 文 字; 指 令 D 则 可 以 删 除 光 
                 标 到 该 列 结 束 为 止 所 有 的 文 字。 
                 ---- 文 件 指 令 
                 ---- 文 件 指 令 多 以 : 开 头, 跟 编 辑 指 
                 令 有 点 区 别。 例 如 前 面 提 到 结 束 编 
                 辑 的 指 令 就 是 :q。 现 在 就 简 单 说 明 
                 一 下 作 为 本 篇 故 事 的 结 尾: 
                 ---- :q 结 束 编 辑(quit) 如 果 不 想 存 档 
                 而 要 放 弃 编 辑 过 的 文 件 则 用 :q! 强 制 
                 离 开。:w 存 档(write) 其 後 可 加 所 要 存 
                 档 的 档 名。 可 以 将 文 件 指 令 合 在 一 
                 起, 例 如 :wq 即 存 档 後 离 开。zz 功 能 与 
                 :wq 相 同。 
                 ---- 另 外 值 得 一 提 的 是 vi 的 部 份 存 
                 档 功 能。 可 以 用 :n,mw filename 将 第 n 行 
                 到 第 m 行 的 文 字 存 放 的 所 指 定 的 
                 filename 里 去 哩。 时 代 在 变, 世 界 在 
                 变, vi 也 在 变, 不 过 大 致 上 就 这 样。 
                                                                             
 
                                                                           园 
地开垦之 
                                                                           初 
,北京 
                                                                           L 
inux俱乐部 
                                                                           给 
予 了大力 
                                                                           协 
助,后来又 
                                                                           得 
中国Linux 
                                                                           论 
坛的关照。 
                                                                           我 
们共同的目 
                                                                           的 
就是推广 
                                                                           L 
inux在中国 
                                                                           的 
应用。欢迎 
                                                                           大 
家把自己在 
                                                                           学 
习、 使用 
                                                                           L 
inux时的经 
                                                                           验 
、体会写出 
                                                                           来 
,让其他的 
                                                                           人 
都能从你的 
                                                                           智 
慧中受益。 
                                                                           我 
们希望每个 
                                                                           人 
在这里都有 
                                                                           所 
收获... 
                                                                             
 中国惠普 
                                                                             
 3Com中国 
                                                                             
 Motorola中 
                                                                           国 
 
                                                                             
 联想科技 
                                                                             
 CA中国 
                                                                             
 Cabletron 
                                                            中国计算机世界出 
版服务公司版权所有  
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 162.105.17.237] 

BBS水木清华站∶精华区