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

5

我正在编辑一个包含几个方法的类的简单PHP文件,如果$bar是该类的实例,并且我键入

$bar->ctrlxctrlo

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


同样的问题 - 没有解决方案 :/ https://dev59.com/dXM_5IYBdhLWcg3wymc0 - nuqqsa
1个回答

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 omni-completion。如果必要,可以还原为原始的 TAGS。

此外,我认为您希望能够直接从 VIM 调用第一步中的脚本,因为您会频繁地更改当前的翻译单元。

希望这能让您朝着正确的方向前进,如果需要实现上述功能,我很乐意提供帮助 =)。


不,我正在编写PHP代码,而不是C++。文档说明“在'->'之后只需填写给定类的函数和变量名称”,但这并不是我得到的行为。 - Matteo Riva
你说得对,是我的错误。如果你符合要求(Exuberant ctags 5.5.4/更新版本),并且已经尝试了@var技巧,那么这就是一个非常奇怪的问题。这几乎就像标签在找不到更具体的内容(变量的类)时默认为全局范围。 - reshen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接