第 16 章 指 随 意 动 , 移 动 如 飞 ( 一 )
指 随 意 动 , 移 动 如 飞 ( 一 ) 命 令 "G" 前 可 以 加 上 数 字 , 在 这 里 , 数 字 的 含 义 并 不 是 倍 数 , 而 是 你 打 算 跳 转 的 行 号 。 例 如 , 你 想 跳 转 到 文 件 的 第 1234 行 , 只 需 输 入 "1234G"。 你 还 可 以 按 百 分 比 来 跳 转 , 例 如 , 你 想 跳 到 文 件 的 正 中 间 , 输 入 "50%"; 如 果 想 跳 到 75% 处 , 输 入 "75%"。 注 意 , 你 必 须 先 输 入 一 个 数 字 , 然 后 输 入 "%"。 如 果 直 接 输 入 "%", 那 含 义 就 完 全 不 同 了 。":help N%" 阅 读 更 多 细 节 。 在 文 件 中 移 动 , 你 可 能 会 迷 失 自 己 的 位 置 , 这 时 使 用 "CTRL-G" 命 令 , 查 看 一 下 自 己 位 置 。 这 个 命 令 会 显 示 出 光 标 的 位 置 及 其 它 信 息 。 为 了 避 免 迷 失 , 你 可 以 打 开 行 号 显 示 ; 使 用 ":set number" 命 令 后 , 会 在 每 一 行 前 显 示 出 行 号 , 可 以 更 方 便 的 定 位 的 跳 转 (:help 'number')。 [ 移 动 到 指 定 字 符 ] 上 面 的 命 令 都 是 行 间 移 动 ( 除 h, l 外 ), 也 就 是 从 当 前 行 移 动 到 另 外 一 行 。 如 果 我 们 想 在 当 前 行 内 快 速 移 动 , 可 以 使 用 f, t, F, T 命 令 。 "f" 命 令 移 动 到 光 标 右 边 的 指 定 字 符 上 , 例 如 ,"fx", 会 把 移 动 到 光 标 右 边 的 第 一 个 'x' 字 符 上 。"F" 命 令 则 反 方 向 查 找 , 也 就 是 移 动 到 光 标 左 边 的 指 定 字 符 上 。 "t" 命 令 和 "f" 命 令 的 区 别 在 于 , 它 移 动 到 光 标 右 边 的 指 定 字 符 之 前 。 例 如 ,"tx" 会 移 动 到 光 标 右 边 第 一 个 'x' 字 符 的 前 面 。"T" 命 令 是 "t" 命 令 的 反 向 版 本 , 它 移 动 到 光 标 右 边 的 指 定 字 符 之 后 。 这 四 个 命 令 只 在 当 前 行 中 移 动 光 标 , 光 标 不 会 跨 越 回 车 换 行 符 。 可 以 在 命 令 前 面 使 用 数 字 , 表 示 倍 数 。 例 如 ,"3fx" 表 示 移 动 到 光 标 右 边 的 第 3 个 'x' 字 符 上 。 ";" 命 令 重 复 前 一 次 输 入 的 f, t, F, T 命 令 , 而 "," 命 令 会 反 方 向 重 复 前 一 次 输 入 的 f, t, F, T 命 令 。 这 两 个 命 令 前 也 可 以 使 用 数 字 来 表 示 倍 数 。 [ 行 首 / 行 尾 ] 在 vim 中 , 移 动 到 行 首 的 命 令 非 常 简 单 , 就 是 "0", 这 个 是 数 字 0, 而 不 是 大 写 字 母 O。 移 动 到 行 尾 的 命 令 是 "$"。 另 外 还 有 一 个 命 令 "^", 用 它 可 以 移 动 到 行 首 的 第 一 个 非 空 白 字 符 。 在 正 则 表 达 式 中 我 们 会 看 到 ,"^" 字 符 代 表 行 首 , 而 "$" 字 符 代 表 行 尾 。 可 见 ,vi/vim 的 按 键 的 安 排 , 的 确 是 别 具 匠 心 的 。 [ 按 单 词 移 动 ] 我 们 知 道 , 英 文 文 档 的 主 体 是 单 词 , 通 常 用 空 白 字 符 ( 包 括 空 格 、 制 表 符 和 回 车 换 行 符 ) 来 分 隔 单 词 。vim 中 提 供 了 许 多 命 令 来 按 单 词 移 动 。 要 根 据 单 词 来 移 动 , 首 先 要 把 文 本 分 隔 为 一 个 个 独 立 的 单 词 。vim 在 对 单 词 进 行 分 隔 时 , 会 把 'iskeyword' 选 项 中 的 字 符 做 为 单 词 的 组 成 字 符 。 也 就 是 说 , 一 个 单 词 (word) 由 'iskeyword' 选 项 中 定 义 的 字 符 构 成 , 它 前 面 、 后 面 的 字 符 不 在 'iskeyword' 选 项 定 义 的 字 符 中 。 例 如 , 如 果 我 们 把 'iskeyword' 选 项 设 置 为 "a-z,A-Z,48-57,_", 那 么 "FooBar_123" 被 做 为 一 个 单 词 , 而 "FooBar-123" 被 做 为 三 个 单 词 :"FooBar", "-" 和 "123"。"a-z,A-Z,48-57,_" 中 的 48-57 表 示 ASCII 码 表 中 的 数 字 0-9。 vim 中 , 移 动 光 标 到 下 一 个 单 词 的 词 首 , 使 用 命 令 "w", 移 动 光 标 到 上 一 个 单 词 的 词 首 , 使 用 命 令 "b"; 移 动 光 标 到 下 一 个 单 词 的 结 尾 , 用 命 令 "e", 移 动 光 标 到 上 一 个 单 词 的 结 尾 , 使 用 命 令 "ge"。 上 面 这 些 命 令 都 使 用 'iskeyword' 选 项 中 的 字 符 来 确 定 单 词 的 分 界 , 还 有 几 个 命 令 , 只 把 空 白 字 符 当 做 " 单 词 " 的 分 界 。 当 然 , 这 里 说 的 " 单 词 " 已 经 不 是 传 统 意 义 上 的 单 词 了 , 而 是 由 非 空 白 字 符 60