คุณสมบัติของ PyCharm ที่คุณพูดถึงเป็นหนึ่งในรายการโปรดของฉันและเป็นหนึ่งในสิ่งแรกที่ฉันมองหาในการพยายามแทนที่ PyCharm อย่างสมบูรณ์ด้วย Emacs (ซึ่งฉันยินดีที่จะบอกว่าฉันสามารถทำได้)
ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆelpy
แพ็คเกจนี้มีคุณสมบัตินี้ (นอกเหนือจากคุณสมบัติ IDE ที่มีประโยชน์อื่น ๆ อีกมากมาย ) อย่างไรก็ตามหากคุณใช้elpy-goto-definition
เพื่อค้นหาสัญลักษณ์ ณ จุดนั้นคุณจะพบว่าไม่ช้าก็เร็วว่าในบางกรณีที่ PyCharm จะประสบความสำเร็จในการค้นหาสิ่งที่คุณกำลังมองหาelpy
จะไม่ ตามที่เอกสารระบุไว้:
แบ็กเอนด์ไม่สามารถระบุประเภทของสัญลักษณ์ได้เสมอ โดยเฉพาะอย่างยิ่งหลังจากไม่กี่ทิศทางพวกเขาไม่มีความหวังที่จะคาดเดาได้ถูกต้องดังนั้นพวกเขาจึงไม่ทำเช่นนั้น
ในกรณีนี้การเรียกใช้elpy-goto-definition
จะไม่ทำอะไรเลยและแสดงข้อความแสดงข้อผิดพลาดเล็กน้อยในพื้นที่ echo เมื่อสิ่งนี้เกิดขึ้นแน่นอนคุณยังต้องการค้นหาสิ่งที่คุณกำลังมองหาและ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/… )