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/… )M- bekerja dalam anaconda-mode (yang saya beralih setelah mengalami masalah dengan elpy).
Perhatikan bahwa Anda memerlukan lingkungan python yang tepat, dalam kasus saya, saya melakukan hal berikut: -
mkvirtualenv someenv
-python setup.py develop
untuk semua modul yang dikembangkan atau digunakan (atau lebih memilih untuk menjangkau sumber daripada versi yang diinstal) -M-x venv-workon
someenv
untuk mengaktifkan jalur di emacs.Kemudian saya konfigurasikan
anaconda-mode
untuk aktif setiap kali saya mengedit python dan voila,M-.
berfungsisumber
Pertanyaan bagus, itu tidak tersedia di luar kotak dan merupakan fitur praktis dari IDE yang penuh sesak nafas. Saya melakukannya dengan
cscope
, dengan antarmuka helm yang bagus: http://wikemacs.org/wiki/Python#cscope Dapat menjawab pertanyaan seperti "di mana simbol ini didefinisikan? Di mana ia digunakan?".ps: dalam mode kejahatan kita bisa pergi ke definisi simbol dalam file yang sama dengan
gd
.sumber
gd
pada kejahatan hanya menemukan kemunculan pertama simbol dalam file (terlepas dari doktring: "Pergi ke definisi atau kemunculan pertama simbol di bawah titik.")M-.
yang pastielpy-goto-definition
akan melakukan trik. GunakanM-*
akan memungkinkan Anda melompat kembali ke lokasi sebelumnya di buffer. Ini memungkinkan Anda untuk dengan cepat memeriksa sesuatu dan kembali ke lokasi sebelumnya.Saya juga
C-c C-o
sering menggunakan (elpy-occur-definitions
). Ini akan membuka jendela dengan semua kelas dan fungsi adalah buffer saat ini. Dari buffer itu, menekanEnter
akan mendaratkan Anda pada definisi dalam kode sumber.sumber
M-.
terikatxref-find-definitions
danelpy-goto-definition
tidak pada tombol apa pun secara default (meskipun pada menu). Menemukan definisi dalam paket situs sepertinya tidak berfungsi sama sekali.Jedi adalah pustaka analisis autocompletion / static yang mengagumkan untuk Python. Saya sering menggunakannya ketika saya menggunakan vim.
Sama seperti mesin pelengkapan otomatis golang (yaitu gocode) bekerja baik untuk vim dan emacs, mesin Jedi yang sama berfungsi baik untuk vim dan emacs .
sumber