Как я могу использовать Meta-Dot (M-.) В Python с Emacs?
Вопрос
Есть ли эквивалент слизи для Python?
Например, если я установлю курсор на foo () и сделать m-. (Перейти к определению) Я хотел бы увидеть исходное определение функции foo
Это должно работать независимо от того, находится ли Фу в
1) Каталог местного проекта
2) в некоторых ~ / .virtualenvs / bar / lib / сайт-пакеты
3) В каком-то другом питоном-пакете
4) ВИРТУАЛЬНАЯ ENV используется (т. Е. Следует смотреть в моем нынешнем виртуалене))
Делает ли комбинация Pymacs/Ropemacs что -нибудь из этого?
Решение
Чтобы избежать --e, вы можете использовать Etags, а с найду вы рекурсивно добавляете файл PY:
find . -type f -name '*.py' | xargs etags
Другие советы
Большинство ответов, упомянутых здесь, устарели. Простое решение - использовать Elpy для M-.
Без Etags (что требует дополнительной работы).
Установить Элпи, как упомянуто здесь.
M-x package-install elpy
а затем установите пакеты Python
$ sudo pip install rope jedi
Перезапустите Emacs, откройте любой файл Python и запустите M-.
Элпи полностью задокументирован, вы можете прочитать о M-.
здесь.
М-. обычно управляет "find-tag
"Функция. Вы должны создать файл тегов из исходных файлов Python. Тогда вы"visit-tags-table
«Прежде чем делать M-. Таким образом, EMACS будет прыгать ко всем определениям тега. Тип CU M-. Чтобы перейти к следующему определению вашего тега. См. Документация на Find-Tag для получения справки. Проконсультируйтесь с Emacs Помогите знать, как Создайте файл тегов из исходных файлов Python.
Вы можете, например, использовать Буздные CTAGS Для создания файла тегов.
Перейдите в корневой каталог ваших файлов Python и сделайте это:
ctags -e -R .
Файл тегов обычно создается в корневом каталоге проекта.
Принятый отвечать пропускает важный момент, если вы выполняете etags
нравится find . -type f -name '*.py' | xargs etags
Затем файл тегов будет генерироваться каждый раз для каждого файла.
Правильный способ сделать это - добавить данные в существующие теги файла с --append
нравится
rm -f TAGS
find . -type f -name '*.py' -print0 | xargs -0 etags --append
Также, если вы хотите включить идентификаторы из карточек Virtual Env Site Dir (например, ~/.virtualenvs/bar/lib/site-packages
):
SITEPACKAGES=$(cdvirtualenv;pwd)/lib/python3.6/site-packages/
find $SITEPACKAGES -type f -name '*.py' -print0 | xargs -0 etags -a
*регулировать python3.6
к вашей текущей версии Python
Следующее будет индексировать ваш текущий проект
find . -type f -name '*.py' | xargs etags
Но если вы хотите индексировать свои импортные либера. Сначала вы активируете свой виртуально. Затем используйте which
Python, чтобы обнаружить, где находятся ваши LIBS, а затем подключите их к ETAGS.
workon my-project # if using virtualenvwrappwer
source bin/activate # if using virtualenv
find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
Попробуйте Emacs Анаконда-режим и Компания-Анаконда пакеты. Обновление конфигурации:
(eval-after-load "company"
'(add-to-list 'company-backends 'company-anaconda))
(add-hook 'python-mode-hook 'anaconda-mode)
(add-hook 'python-mode-hook 'company-mode)
Переключиться на Virtualenv с pythonic-activate
, если у тебя есть.
Теперь у тебя есть M-.
И вы можете нажать M-*
вернуться назад!