25.06.2015 Views

vim使用进阶

vim使用进阶

vim使用进阶

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

开 启 文 件 类 型 检 测<br />

/* vim: ft=c */<br />

这 句 话 使 用 "/* */" 注 释 起 来 了 , 因 此 不 会 影 响 编 译 。"ft" 是 "filetype" 的 缩 写 ,vim 中 很 多 命<br />

令 、 选 项 都 有 缩 写 形 式 , 以 方 便 使 用 。 注 意 "/*" 与 "vim:" 间 的 空 格 。 在 "*/" 与 "ft=c" 间 , 也 需 要<br />

有 至 少 一 个 空 格 , 这 是 模 式 行 格 式 的 要 求 , 更 多 信 息 参 阅 ":help modeline"。<br />

检 测 出 文 件 的 类 型 有 什 么 作 用 呢 ? 我 们 知 道 , 不 同 类 型 的 文 件 具 有 不 同 的 格 式 ,vim 通 过 对 文 件<br />

类 型 的 识 别 , 可 以 为 不 同 类 型 的 文 件 , 设 置 不 同 的 选 项 值 、 定 义 不 同 键 绑 定 等 。 例 如 , 对 于 c 类<br />

型 的 文 件 , 它 就 和 bash 脚 本 有 不 同 的 注 释 格 式 、 不 同 的 缩 进 格 式 、 不 同 的 关 键 字 等 。vim 在 设 置<br />

文 件 类 型 后 , 会 触 发 FileType 事 件 , 执 行 FileType 相 关 的 自 动 命 令 , 对 不 同 类 型 的 文 件 区 别 对<br />

待 。<br />

上 面 提 到 的 "filetype plugin on", 允 许 vim 加 载 文 件 类 型 插 件 。 当 这 个 选 项 打 开 时 ,vim 会 根 据<br />

检 测 到 的 文 件 类 型 , 在 runtimepath 中 搜 索 该 类 型 的 所 有 插 件 , 并 执 行 它 们 。<br />

"filetype plugin on" 命 令 , 实 际 上 是 执 行 $vimRUNTIME/ftplugin.vim 脚 本 , 有 兴 趣 可 以 读 一 下<br />

这 个 脚 本 。 这 个 脚 本 中 会 设 置 自 动 命 令 , 在 runtimepath 中 搜 索 文 件 类 型 插 件 。<br />

runtimepath 的 定 义 在 不 同 的 系 统 上 不 一 样 , 对 UNIX 系 统 来 说 , 这 些 路 径 包 括 :<br />

$HOME/.vim、$vim/vimfiles、$vimRUNTIME、$vim/vimfiles/after、$HOME/.vim/after。<br />

举 一 个 例 子 , 当 我 们 对 一 个 c 类 型 的 文 件 打 开 "filetype plugin on" 时 , 它 会 在 上 述 这 几 个 目 录<br />

的 ftplugin 子 目 录 中 搜 索 所 有 名 为 c.vim、c_*.vim, 和 c/*.vim 的 脚 本 , 并 执 行 它 们 。 在 搜 索<br />

时 , 它 按 目 录 在 runtimepath 中 出 现 的 顺 序 进 行 搜 索 。 缺 省 的 , 它 会 执 行 $vimRUNTIME/ftplugin/<br />

c.vim, 在 这 个 脚 本 里 , 会 设 置 c 语 言 的 注 释 格 式 、 智 能 补 全 函 数 等 等 。<br />

"filetype indent on" 允 许 vim 为 不 同 类 型 的 文 件 定 义 不 同 的 缩 进 格 式 。 这 条 命 令 也 是 通 过 一<br />

个 脚 本 来 完 成 加 载 :$vimRUNTIME/indent.vim。 和 "filetype plugin on" 类 似 , 它 也 通 过 设 置<br />

自 动 命 令 , 在 runtimepath 的 indent 子 目 录 中 搜 索 缩 进 设 置 。 对 c 类 型 的 文 件 来 说 , 它 只 是 打 开 了<br />

cindent 选 项 。<br />

我 们 了 解 了 文 件 类 型 检 测 的 用 途 及 它 是 如 何 工 作 的 之 后 , 就 可 以 根 据 自 己 的 需 要 , 来 对 特 定 的 文<br />

件 类 型 进 行 特 殊 设 置 。<br />

例 如 , 我 们 在 上 篇 文 章 中 介 绍 过 lookupfile 插 件 , 在 它 打 开 一 个 缓 冲 区 时 , 会 把 缓 冲 区 的<br />

filetype 设 置 为 lookupfile, 我 们 可 以 利 用 这 一 点 , 在 这 个 缓 冲 区 里 进 行 一 些 特 殊 的 配 置 。 例<br />

如 , 我 们 创 建 一 个 名 为 lookupfile.vim 的 文 件 , 其 内 容 为 :<br />

" close lookupfile window by two <br />

nnoremap q<br />

inoremap q<br />

它 定 义 了 两 个 局 部 于 缓 冲 区 的 键 绑 定 , 无 论 在 normal 模 式 还 是 插 入 模 式 , 只 要 连 按 两 次 ESC, 就<br />

关 闭 当 前 缓 冲 区 。<br />

把 这 个 文 件 保 存 到 你 的 runtimepath 所 指 向 任 一 目 录 的 ftplugin 子 目 录 中 ( 一 般 是 放 在 ~/.vim/<br />

ftplugin 目 录 中 )。 你 在 下 次 打 开 lookupfile 窗 口 时 , 试 试 连 按 两 次 ESC, 是 不 是 lookupfile 窗<br />

口 就 关 闭 了 ? 这 样 设 置 , 非 常 适 合 vim 中 按 ESC 取 消 命 令 的 习 惯 , 效 率 也 高 。<br />

如 果 你 对 vim 缺 省 文 件 类 型 插 件 的 设 置 不 太 满 意 , 那 么 可 以 把 这 个 全 局 插 件 拷 贝 到 $HOME/.vim/<br />

plugin 目 录 中 , 然 后 更 改 其 中 的 设 置 。 你 可 以 留 意 一 下 vim 缺 省 的 文 件 类 型 插 件 , 它 们 的 头 部 都<br />

有 这 样 的 代 码 :<br />

36

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!