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

发布于 2024-09-03 17:43:18 字数 246 浏览 7 评论 0原文

我正在编辑一个简单的 PHP 文件,其中包含一个具有一些方法的类,如果 $bar 是此类的实例并且我输入

$bar->ctrlxctrlo

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

I'm editing a simple PHP file with a class which has a few methods, if $bar is an instance of this class and I type

$bar->ctrlxctrlo

I get a popup with a lot of methods (builtin ones) in addition to those of my class and present in the ctags list. How can avoid showing all those external methods and just keep the ones defined in my class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆之渊 2024-09-10 17:43:18

我确信您已经看过 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 的脚本,因为您在编码时会经常更改当前的翻译单元。

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

I'm sure you've seen the VIM documentation (:help ft-c-omni) for this:

When using CTRL-X CTRL-O after a name without any "." or "->" it is completed
from the tags file directly. This works for any identifier, also function
names. If you want to complete a local variable name, which does not appear
in the tags file, use CTRL-P instead.

When using CTRL-X CTRL-O after something that has "." or "->" Vim will attempt
to recognize the type of the variable and figure out what members it has.
This means only members valid for the variable will be listed.

When a member name already was complete, CTRL-X CTRL-O will add a "." or
"->" for composite types.

If I read that correctly, the built-in functionality will, at best, only allow you to use CTRL-P and match the local variables names thus bypassing the TAGS file altogether.

What you really want is a TAGS file that is specific to the translation unit that you're currently working on (header/cpp file). Here are the steps that I would perform if I were trying to solve this problem:

  1. Create a script (or better yet, incorporate into a makefile) the automatic creation of translation unit specific TAG files.
  2. Create a command in vim that unloads existing TAGS files, reloads the file specific TAGS file, and performs regular CTRL-X CTRL-O omni-completion. If necessary, revert to the original TAGS.

Also, it seems to me like you would want to be able to call the script for #1 directly from VIM since you would be frequently changing the current translation unit as you code.

I hope that gets you started in the right direction, and I'd be happy to see / help you with an implementation =).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文