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水木清华站∶精华区