4

我在 vim 中通过 YCM 使用 jedi,并在我的项目中看到一些奇怪的行为,关于usages在 jediHttp 服务器上使用端点。基本上它只在我的项目中找到一小部分类或函数的用法。它确实找到了当前文件中的所有用法,但没有找到其他文件中的绝大多数。该GoTo命令工作正常,并将按预期在项目的任何位置打开一个新缓冲区。但是,当我从定义开始并尝试usages通过GoToReferences命令查看所有内容时,它只会产生大约 20% 的实际用法。

我曾尝试制作一个虚拟项目来重新创建该行为,它似乎奏效了。这是简单的项目结构:

> tree -I __pycache__
.
├── setup.py
└── test_jedi
    ├── classes.py
    ├── __init__.py
    ├── mod1
    │   ├── __init__.py
    │   └── recessed.py
    └── script.py

2 directories, 6 files

以下是这些文件的内容:

类.py

class Foo:
    def __init__(self, a):
        self.a = a

    def make_a(self):
        print('hello')

mod1/recessed.py:

from test_jedi.classes import Foo

Foo(5).make_a()
print('Ran this')

脚本.py:

from classes import Foo
a = Foo(5)
a.make_a()

现在,在 vim 中,我可以在缓冲区中使用带有凹陷.py 的 vimGoToFoo立即打开classes.py缓冲区。GoToReferences然后当我从缓冲区尝试时,classes.py我只得到usagesinscript.py和 in classes.py。我不知道为什么绝地没有向我展示recessed.py

这是显示的快速修复缓冲区:

classes.py|2 col 7| class Foo
script.py|2 col 21| from classes import Foo
script.py|5 col 5| a = Foo(5)

但显然没有提到 mod1/recessed.py 显然有Foo.

有任何想法吗?

4

2 回答 2

3

我知道这个问题已经有 1.5 年的历史了,但是为了像我这样遇到这个问题的人,它与 Jedi 中当前未解决的问题有关。

YouCompleteMe 在其功能script.usages中使用Jedi 。GoToReferences然而,script.usages据作者说,这在很多地方都是错误的。他非常清楚这个问题,但目前它的优先级较低。

链接到问题

于 2018-07-01T21:01:01.837 回答
0

不确定是否有帮助,但是当我使用基本 jedi-vim 插件的“leader n”命令时,我看到了更多的用法。

尝试像我一样加载这两个插件,而不是在查找用法时在 YCM 中使用 GoToReferences,只需使用 jedi-vim 的查找用法即可。

于 2019-09-03T05:09:06.543 回答