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 />

上 面 的 设 置 表 明 , 只 在 下 拉 菜 单 中 显 示 匹 配 项 目 , 并 且 会 自 动 插 入 所 有 匹 配 项 目 的 相 同 文 本 。<br />

如 果 要 支 持 C++ 的 全 能 补 全 , 需 要 到 vim 主 页 下 载 OmniCppComplete 插 件 , 链 接 如 下 :<br />

http://www.vim.org/scripts/script.php?script_id=1520<br />

下 载 后 , 把 它 解 压 到 你 的 .vim 目 录 ( 在 windows 下 是 vimfiles 目 录 ), 它 会 安 装 以 下 文 件 :<br />

after\ftplugin\cpp.vim<br />

autoload\omni\common\debug.vim<br />

\utils.vim<br />

autoload\omni\cpp\complete.vim<br />

\includes.vim<br />

\items.vim<br />

\maycomplete.vim<br />

\namespaces.vim<br />

\settings.vim<br />

\tokenizer.vim<br />

\utils.vim<br />

doc\omnicppcomplete.txt<br />

确 保 你 已 关 闭 了 vi 兼 容 模 式 , 并 允 许 进 行 文 件 类 型 检 测 :<br />

set nocp<br />

filetype plugin on<br />

接 下 来 , 使 用 下 面 的 命 令 , 为 C++ 文 件 生 成 标 签 文 件 , 假 定 你 的 文 件 在 src 目 录 树 下 :<br />

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src<br />

在 对 C++ 文 件 进 行 补 全 时 ,OmniCppComplete 插 件 需 要 tag 文 件 中 包 含 C++ 的 额 外 信 息 , 因 此 上 面 的<br />

ctags 命 令 不 同 于 以 前 我 们 所 使 用 的 , 它 专 门 为 C++ 语 言 生 成 一 些 额 外 的 信 息 , 上 述 选 项 的 含 义 如<br />

下 :<br />

--c++-kinds=+p : 为 C++ 文 件 增 加 函 数 原 型 的 标 签<br />

--fields=+iaS : 在 标 签 文 件 中 加 入 继 承 信 息 (i)、 类 成 员 的 访 问 控 制 信 息 (a)、 以 及 函 数 的 指 纹 (S)<br />

--extra=+q : 为 标 签 增 加 类 修 饰 符 。 注 意 , 如 果 没 有 此 选 项 , 将 不 能 对 类 成 员 补 全<br />

现 在 , 进 入 vim, 设 置 好 tag 选 项 ( 我 在 前 面 的 文 章 中 介 绍 过 )。 好 极 了 ,vim 能 够 对 C++ 自 动 补 全<br />

了 !<br />

我 写 了 一 个 简 单 的 例 子 , 来 演 示 C++ 的 自 动 补 全 功 能 , 如 下 图 所 示 , 在 输<br />

入 "t." 后 ,OmniCppComplete 插 件 会 自 动 弹 出 struct test1 的 成 员 供 选 择 , 而 在 输 入 "b->" 后 ,<br />

又 会 自 动 弹 出 class base 的 成 员 供 选 择 , 非 常 方 便 , 连 "CTRL-X CTRL-O" 都 不 必 输<br />

入 。OmniCppComplete 插 件 的 缺 省 设 置 比 较 符 合 我 的 习 惯 , 因 此 不 须 对 其 设 置 进 行 调 整 , 如 果 你<br />

需 要 调 整 , 参 阅 OmniCppComplete 的 帮 助 页 。<br />

53

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

Saved successfully!

Ooh no, something went wrong!