Особливість PyCharm, яку ви згадуєте, була однією з моїх улюблених і одна з перших речей, яку я шукав, намагаючись повністю замінити PyCharm Emacs (що я радий сказати, що міг зробити).
Як було сказано в іншій відповіді, elpy
пакет має цю особливість (на додаток до багатьох інших корисних функцій IDE ). Однак якщо ви elpy-goto-definition
шукаєте символ у точці, ви рано чи пізно виявите, що в деяких випадках, коли PyCharm вдасться знайти те, що ви шукаєте, elpy
не буде. Як кажуть документи:
мітки не завжди можуть ідентифікувати, який символ є в точці. Особливо після кількох непрямих, вони в основному не сподіваються здогадатися правильно, так що вони не роблять
У цьому випадку виклик elpy-goto-definition
нічого не зробить і покаже невелике повідомлення про помилку в області ехо. Коли це відбувається, звичайно, ви все одно хочете знайти те, що шукаєте, і elpy
не залишає вас повішеним. У такій ситуації я завжди використовую C-c C-s
( elpy-rgrep-symbol
) rgrep
для символу в будь-якому проекті, в якому я перебуваю. Принаймні для мене, те, що я шукаю, більш-менш завжди виявляється в rgrep
результатах. Насправді, я думаю, що це схоже на те, що робить і PyCharm: якщо ви спробуєте знайти визначення чогось, і PyCharm не знає, де це визначено, ви виберете його зі списку. Я насправді віддаю перевагу elpy
реалізації, тому що замість перехідного списку, який зникає, коли ви переходите до першого варіанту,elpy-rgrep-symbol
залишить список можливостей відкритим в іншому буфері, щоб ви могли стрибати між ними вперед і назад.
Оскільки мій робочий процес майже завжди є першим, elpy-goto-definition
і якщо він не працює, дзвоніть elpy-rgrep-symbol
, я вирішив зламати просту функцію, яка просто дзвонить elpy-rgrep-symbol
автоматично, якщо elpy-goto-definition
не працює. Ця функція знаходиться нижче:
(defun goto-def-or-rgrep ()
"Go to definition of thing at point or do an rgrep in project if that fails"
(interactive)
(condition-case nil (elpy-goto-definition)
(error (elpy-rgrep-symbol (thing-at-point 'symbol)))))
Потім я пов'язую це M-.
(прив'язка за замовчуванням для elpy-goto-definition
).
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
Таким чином я можу використовувати одну з улюблених функцій PyCharm у своєму улюбленому редакторі. Я знаю, що це якесь старе питання, і ви, можливо, вже вирішили цю проблему або продовжили роботу, але сподіваюся, ви чи хтось інший вважає це корисним!
python-mode
Emacs це не за замовчуванням. ( stackoverflow.com/questions/11363089/… )