我在vim中通过YCM使用jedi,并且在我的项目中看到一些奇怪的行为,关于在jediHttp服务器上使用usages
端点。基本上它只能在我的类或函数项目中找到一小部分用法。它确实找到了当前文件中的所有用法,但在其他文件中找不到绝大多数用法。 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
以下是这些文件的内容:
classes.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')
script.py:
from classes import Foo
a = Foo(5)
a.make_a()
现在,从vim中缓冲区中的recessed.py,我可以使用GoTo
上的Foo
立即打开classes.py
缓冲区。当我在GoToReferences
缓冲区中尝试classes.py
时,我只会在usages
和script.py
中获得classes.py
。我不知道为什么绝地没有告诉我recessed.py
这是显示以下内容的quickfix缓冲区:
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
。
有什么想法吗?
答案 0 :(得分:1)
我知道这个问题已有1.5年的历史了,但是为了像我这样落在这个问题上的人们的缘故,它与《绝地武士》中目前未解决的问题有关。
Jedi script.usages
由YouCompleteMe在其GoToReferences
函数中使用。然而,根据作者的说法,script.usages
在许多地方都是越野车。他非常清楚这个问题,但是目前它的优先级较低。
答案 1 :(得分:0)
不确定是否有帮助,但是当我使用基本jedi-vim插件的“ leader n”命令时,我会看到更多用法。
尝试像我一样加载这两个插件,而不是在查找用法时在YCM中使用GoToReferences,只需使用jedi-vim的查找用法即可。