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

Mat*_*iva 5 php vim ctags code-completion

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

$bar->ctrlxctrlo

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

res*_*hen 1

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

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

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

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

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

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

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

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

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