Vim:将omnicomplete显示的方法限制为ctags中的方法

时间:2010-06-03 18:02:30

标签: php vim code-completion ctags

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

$bar-> CTRL X CTRL 0

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

1 个答案:

答案 0 :(得分: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文件,该文件特定于您当前正在处理的翻译单元(header / cpp文件)。如果我试图解决这个问题,我将执行以下步骤:

  1. 创建一个脚本(或者更好,并入makefile)自动创建翻译单元特定的TAG文件。
  2. 在vim中创建一个卸载现有TAGS文件的命令,重新加载特定于文件的TAGS文件,并执行常规CTRL-X CTRL-O omni-completion。如有必要,请恢复原始标签。
  3. 此外,在我看来,您希望能够直接从VIM调用#1的脚本,因为您在编码时经常更改当前的翻译单元。

    我希望能让你开始朝着正确的方向前进,我很乐意看到/帮助你实施=)。