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, elpy
paket memiliki fitur ini (selain banyak fitur IDE berguna lainnya ). Namun, jika Anda menggunakan elpy-goto-definition
untuk mencari simbol pada titik, Anda akan menemukan cepat atau lambat bahwa dalam beberapa kasus di mana PyCharm akan berhasil menemukan apa yang Anda cari, elpy
tidak 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-definition
tidak 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 elpy
tidak membuat Anda menggantung. Dalam situasi seperti ini saya selalu menggunakan C-c C-s
( elpy-rgrep-symbol
) rgrep
untuk simbol pada titik dalam proyek apa pun saya berada. Setidaknya bagi saya, hal yang saya cari kurang lebih selalu muncul dalam rgrep
hasil. 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 elpy
implementasi, 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-definition
dan jika gagal, panggilan elpy-rgrep-symbol
, saya memutuskan untuk meretas bersama fungsi sederhana yang hanya memanggil elpy-rgrep-symbol
secara otomatis jika elpy-goto-definition
gagal. 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-mode
dimiliki Emacs secara default. ( stackoverflow.com/questions/11363089/… )