【问题标题】:Vim: restricting methods shown by omnicomplete to those present in ctagsVim:将omnicomplete显示的方法限制为ctags中的方法
【发布时间】:2011-02-27 10:54:09
【问题描述】:

如果$bar 是这个类的一个实例,我正在编辑一个简单的 PHP 文件,该类有几个方法

$bar->ctrlxctrlo

我得到一个弹出窗口,其中包含许多方法(内置方法),除了我的类的方法并出现在 ctags 列表中。如何避免显示所有这些外部方法而只保留我的类中定义的方法?

【问题讨论】:

标签: php vim code-completion ctags


【解决方案1】:

我相信你已经看过 VIM 文档 (:help ft-c-omni):

当在没有任何“.”的名称后使用 CTRL-X CTRL-O 时或“->”完成 直接从标签文件中。这适用于任何标识符,也适用于 名字。如果要补全一个局部变量名,里面不出现 在标签文件中,请改用 CTRL-P。

当在带有“.”的东西之后使用 CTRL-X CTRL-O 时或 "->" Vim 将尝试 识别变量的类型并找出它有哪些成员。 这意味着只有对变量有效的成员才会被列出。

当成员名称已经完成时,CTRL-X CTRL-O 将添加一个“。”要么 "->" 表示复合类型。

如果我没看错,内置功能最多只能让您使用 CTRL-P 并匹配局部变量名称,从而完全绕过 TAGS 文件。

您真正想要的是一个特定于您当前正在处理的翻译单元的 TAGS 文件(头文件/cpp 文件)。如果我试图解决这个问题,我会执行以下步骤:

  1. 创建一个脚本(或者更好的是,将其合并到一个 makefile 中)以自动创建翻译单元特定的 TAG 文件。
  2. 在 vim 中创建一个命令,卸载现有的 TAGS 文件,重新加载文件特定的 TAGS 文件,并执行常规的 CTRL-X CTRL-O 全方位完成。如有必要,请恢复为原始 TAGS。

此外,在我看来,您似乎希望能够直接从 VIM 调用 #1 的脚本,因为您在编写代码时会经常更改当前的翻译单元。

我希望这能让你朝着正确的方向开始,我很高兴看到/帮助你实施 =)。

【讨论】:

  • 不,我正在编写 PHP 代码,而不是 C++。文档状态 after "->" complete only function and variable names specific for given class 但这不是我得到的行为。
  • 你是对的,我的错。如果您符合要求(Exuberant ctags 5.5.4/newer)并尝试了@var 技巧;那是一个非常奇怪的问题。当标签找不到更具体的东西(变量的类)时,几乎就像标签默认为全局范围一样。
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2012-09-08
  • 1970-01-01
  • 2015-04-05
  • 2019-08-22
相关资源
最近更新 更多