2016-10-24 3 views
1

Я регулярно использую <leader>d, чтобы перейти к определению функции. Когда это определение относится к другому файлу, оно приводит меня в строку импорта файла.Как я могу определить определение функции, импортированное из другого файла, используя jedi-vim?

Как использовать jedi-vim для доступа к файлу, который определяет функцию, импортированную в эту строку?

ответ

2

Похоже, что у вас что-то не так с вашей конфигурацией ... Двойная проверка, что ваш filetype действительно python. Это должно работать в соответствии с the documentation:

5.2. g:jedi#goto_command

Функция: jedi#goto()

По умолчанию: <leader>d

Перейти к определению (или назначения)

Эта функция сначала пытается jedi#goto_definitions, и возвращается к jedi#goto_assignments для встроенных модулей. Он вызывает ошибку, если ничего не найдено. ПРИМЕЧАНИЕ: эта реализация зависит от изменения . Ссылка: https://github.com/davidhalter/jedi/issues/570

Эта команда пытается найти исходное определение функции/класса под курсором. Как и функция jedi#goto_assignments(), она не работает, если определение не находится в исходном файле Python.

Разница между jedi#goto_assignments() и jedi#goto_definitions(), что последний выполняет рекурсивные поиск. Возьмем, к примеру, следующая структура модуля:

# file1.py: 
from file2 import foo 

# file2.py: 
from file3 import bar as foo 

# file3.py 
def bar(): 
    pass 

jedi#goto_assignments() функция примет вас заявление в

from file2 import foo 

в file1.py, в то время как функция jedi#goto_definitions() займет у вас весь путь

def bar(): 

линия in файл3.py.

+0

Вы правы. Он работает с установленными библиотеками. Я этого не понимал. Проблема с библиотеками, которые я написал. Я задам еще один вопрос, связанный с этой проблемой. – krumpelstiltskin

+0

Другой вопрос: http://stackoverflow.com/questions/40235611/using-goto-with-user-defined-modules-in-jedi-vim. – krumpelstiltskin