Python'da bir işlevi aramak için Emacs'ı nasıl kullanırım?


22

Bir fonksiyonun tanımlandığı yere bakacak şekilde Emac'ları yapılandırmanın en kolay yolu nedir? Bunu Emacs'ta vurgulamak ve fonksiyonun kaynağının nerede olduğuna bakmak için bir tuş kombinasyonuna basın.

Belirli bir işlevin nerede kullanıldığını da bulabilir misiniz?

Bu kolayca PyCharm'ta yapılabilir, ancak Emacs'ta da kolayca yapılabilir mi?

Yanıtlar:


14

Denediniz mi Elpy ? elpy-goto-definitionAnahtarına bağlanır M-..
Yakın zamanda bir Emacs varsa, bence xref-pop-marker-stack( M-,) ile geri atlayabilirsin . Elpy'nin başka güzel özellikleri de var.

Yüklemek için bağlantıdaki talimatları izleyin.


12

Jedi modunu Python için kullanıyorum ve çok mutluyum. İşlev çağrıları için yalnızca doğru aramalar yapmakla kalmaz, karmaşık durumlarda bile (kalıtım gibi) işlevleri doğru tanımlamaya giderir. Önyükleme için auto complete ile birlikte gelir. http://tkf.github.io/emacs-jedi/latest/


8

Bahsettiğiniz PyCharm'ın özelliği benim favorilerimden biriydi ve PyCharm'i tamamen Emacs ile değiştirmeye çalışırken aradığım ilk şeylerden biriydi.

Başka bir cevapta da belirtildiği gibi, elpypaket bu özelliğe sahiptir (diğer birçok kullanışlı IDE özelliğine ek olarak ). Bununla birlikte, elpy-goto-definitionnoktayı sembolüne bakmak için kullanırsanız , er ya da geç, PyCharm'ın aradığınızı bulmada başarılı olacağı bazı durumlarda, bulamayacağınızı elpygöreceksiniz. Doktorların dediği gibi:

arka uçlar, ne tür bir sembolün noktada olduğunu her zaman tanımlayamaz. Özellikle birkaç indirmeden sonra, temelde doğru tahmin etme umuduna sahip değillerdir,

Bu durumda, çağrı elpy-goto-definitionyapmak hiçbir şey yapmaz ve yankı alanında küçük bir hata mesajı gösterir. Bu olduğunda elbette aradığınızı bulmak istersiniz ve elpysizi asılı bırakmaz. Bu tür bir durumda , içinde bulunduğum projedeki noktayı sembol yapmak için her zaman C-c C-s( elpy-rgrep-symbol) kullanırım rgrep. En azından benim için aradığım şey, rgrepsonuçlarda her zaman ortaya çıkar. Aslında, bunun PyCharm'ın yaptığıyla da benzer olduğunu düşünüyorum: bir şeyin tanımına bakmaya çalışırsanız ve PyCharm nerede tanımlandığından emin değilse, listeden seçmenizi sağlayacaktır. Aslında elpyuygulamayı tercih ediyorum , çünkü ilk seçeneğe giderken kaybolan geçici bir liste yerine,elpy-rgrep-symbol olasılıklar listesini başka bir tamponda açık bırakacak, böylece gerektiğinde bunlar arasında ileri geri gidebilirsiniz.

İş akışım neredeyse her zaman ilk çağrı yapmak elpy-goto-definitionve başarısız olursa, çağrı yapmak olduğundan, başarısız olursa otomatik olarak elpy-rgrep-symbolçağıran basit bir işlevi bir araya getirmeye karar verdim . Bu fonksiyon aşağıdadır:elpy-rgrep-symbolelpy-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)))))

Sonra bunu bağladım M-.(varsayılan bağlama için elpy-goto-definition).

(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)

Bu şekilde, en sevdiğim PyCharm özelliklerinden birini favori editörümde kullanabilirim. Bunun eski bir soru olduğunu biliyorum ve bu sorunu çözmüş ya da çoktan çözmüş olabilirsiniz, ancak umarım siz ya da başkası bunu yararlı bulur!



2

M-. anakonda modunda çalışır (elpy ile sorun yaşadıktan sonra geçtim).

Uygun python ortamına ihtiyacınız olduğunu unutmayın, benim durumumda aşağıdakileri yapıyorum: - mkvirtualenv someenv - python setup.py developtüm modüller geliştirmek veya kullanmak için (veya yüklü sürüm yerine kaynağa ulaşmayı tercih edin) - M-x venv-workon someenvemacs içindeki yolları etkinleştirmek için.

Sonra yapılandırmak anaconda-modeaktif olması zaman ben düzenlemek piton ve işte, M-.işleri


1

İyi bir soru, bu kutudan temin edilemiyor ve tamamen şişirilmiş IDE'lerin kullanışlı bir özelliği. Bunu cscopegüzel bir dümen arayüzü ile yapıyorum :  http://wikemacs.org/wiki/Python#cscope "Bu sembol nerede tanımlanır? Nerede kullanılır?" Gibi soruları yanıtlayabilir.

ps: kötü modda, aynı dosyadaki bir sembolün tanımına gidebiliriz gd.


İnanıyorum gdyalnızca dosyadaki sembolün ilk geçtiği bulur kötülük içinde: (docstringe rağmen "Git tanımı ya da noktasının altında sembolün ilk geçtiği için.")
Gordon Gustafson

0

M-.elpy-goto-definitionhile yapacak bağlı . Kullan M-*, arabellek içindeki önceki konuma geri dönmenizi sağlar. Bu, bir şeyi hızlı bir şekilde kontrol etmenizi ve önceki konuma geri dönmenizi sağlar.

Ben de C-c C-osık sık kullanırım ( elpy-occur-definitions). Bu, tüm sınıfların bulunduğu bir pencere açacak ve fonksiyon mevcut tampon. Bu tampondan, tuşuna basmak Entersizi kaynak kodundaki tanıma indirir.


Aslında, AFAICT, varsayılan olarak herhangi bir tuşa M-.bağlanır xref-find-definitionsve bağlı elpy-goto-definitiondeğildir (menüler olmasına rağmen). Site paketlerinde tanımları bulmak hiç de iyi görünmüyor.
Robert P. Goldman

0

Jedi , Python için harika bir otomatik tamamlama / statik analiz kütüphanesidir. Vim kullanırken çok kullandım.

Golang otomatik tamamlama motoru (yani gocode) vim ve emacs için hem çalışır gibi, aynı Jedi motoru hem çalışır vim ve emacs .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.