Fitur PyCharm yang Anda sebutkan adalah salah satu favorit saya, dan salah satu hal pertama yang saya cari dalam mencoba mengganti PyCharm sepenuhnya dengan Emacs (yang saya senang mengatakan saya bisa melakukannya).
Seperti disebutkan dalam jawaban lain, elpypaket memiliki fitur ini (selain banyak fitur IDE berguna lainnya ). Namun, jika Anda menggunakan elpy-goto-definitionuntuk mencari simbol pada titik, Anda akan menemukan cepat atau lambat bahwa dalam beberapa kasus di mana PyCharm akan berhasil menemukan apa yang Anda cari, elpytidak akan. Seperti yang dikatakan para dokter:
backend tidak selalu dapat mengidentifikasi simbol apa yang ada di titik Terutama setelah beberapa tipuan, mereka pada dasarnya tidak punya harapan untuk menebak dengan benar, jadi mereka tidak
Dalam hal ini, memohon elpy-goto-definitiontidak akan melakukan apa pun dan menampilkan sedikit pesan kesalahan di area gema. Ketika ini terjadi, tentu saja Anda masih ingin menemukan apa yang Anda cari, dan elpytidak membuat Anda menggantung. Dalam situasi seperti ini saya selalu menggunakan C-c C-s( elpy-rgrep-symbol) rgrepuntuk simbol pada titik dalam proyek apa pun saya berada. Setidaknya bagi saya, hal yang saya cari kurang lebih selalu muncul dalam rgrephasil. Sebenarnya, saya pikir ini mirip dengan apa yang dilakukan PyCharm juga: jika Anda mencoba mencari definisi sesuatu dan PyCharm tidak yakin di mana itu didefinisikan, Anda akan dapat memilih dari daftar. Saya sebenarnya lebih suka elpyimplementasi, karena daripada daftar sementara yang hilang ketika Anda pergi ke opsi pertama,elpy-rgrep-symbol akan membiarkan daftar kemungkinan terbuka di buffer lain sehingga Anda dapat melompat-lompat di antara mereka jika perlu.
Karena alur kerja saya hampir selalu untuk panggilan pertama elpy-goto-definitiondan jika gagal, panggilan elpy-rgrep-symbol, saya memutuskan untuk meretas bersama fungsi sederhana yang hanya memanggil elpy-rgrep-symbolsecara otomatis jika elpy-goto-definitiongagal. Fungsi itu di bawah:
(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)))))
Lalu saya ikat ini ke M-.(pengikatan default untuk elpy-goto-definition).
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
Dengan cara ini saya dapat menggunakan salah satu fitur PyCharm favorit saya di editor favorit saya. Saya tahu ini semacam pertanyaan lama dan Anda mungkin sudah memecahkan masalah ini atau pindah, tetapi saya harap Anda atau orang lain menganggap ini berguna!
python-modedimiliki Emacs secara default. ( stackoverflow.com/questions/11363089/… )