답변:
나는 파이썬에 Jedi 모드를 사용하고 매우 기쁘다. 함수 호출에 대한 정확한 조회뿐만 아니라 상속과 같은 복잡한 상황에서도 함수를 올바른 정의로 해결합니다. 부팅이 자동 완료됩니다. http://tkf.github.io/emacs-jedi/latest/
당신이 언급 한 PyCharm의 특징은 제가 가장 좋아하는 것 중 하나였으며, PyCharm을 Emacs로 완전히 대체하려고 시도한 첫 번째 것 중 하나였습니다 (이것이 기뻤습니다).
다른 답변에서 언급했듯이 elpy
패키지 에는 다른 많은 유용한 IDE 기능 외에도이 기능이 있습니다. 그러나 elpy-goto-definition
시점에서 기호를 찾는 데 사용하면 PyCharm이 원하는 것을 찾는 데 성공하는 경우가 곧 elpy
있을 것입니다. 문서에서 말한 것처럼 :
백엔드는 항상 어떤 종류의 기호가 있는지 식별 할 수 없습니다. 특히 몇 가지 지시를 한 후에 그들은 기본적으로 옳은 추측에 대한 희망이 없으므로 그렇게하지 않습니다.
이 경우 호출 elpy-goto-definition
하면 아무 것도 수행하지 않고 에코 영역에 약간의 오류 메시지가 표시됩니다. 이런 일이 발생 elpy
하더라도 , 당신은 여전히 당신이 찾고있는 것을 찾고 싶고, 교수형을 남기지 않습니다. 이런 종류의 상황에서 나는 항상 내가 어떤 프로젝트에서든 기호 를 위해 C-c C-s
( elpy-rgrep-symbol
)를 사용 rgrep
합니다. 적어도 나를 위해, 내가 찾고있는 것은 항상 rgrep
결과에 나타납니다 . 실제로, 나는 이것이 PyCharm 이하는 것과 비슷하다고 생각합니다. 만약 당신이 무언가의 정의를 찾으려고 시도하고 PyCharm이 어디에 정의되어 있는지 확실하지 않다면, 당신은 목록에서 선택해야합니다. elpy
첫 번째 옵션으로 갈 때 사라지는 임시 목록이 아니라 실제로 구현을 선호합니다 .elpy-rgrep-symbol
필요한 경우 다른 버퍼에서 가능성 목록을 열어두고 앞뒤로 이동할 수 있습니다.
내 워크 플로우는 거의 항상 첫 번째 호출 elpy-goto-definition
이며 실패하면 call 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 기능 중 하나를 사용할 수 있습니다. 나는 이것이 일종의 오래된 질문이라는 것을 알고 있으며 이미이 문제를 해결했거나 앞으로 나아 갔을 수도 있지만, 당신이나 다른 누군가가 이것을 유용하게 사용하기를 바랍니다.
좋은 질문은 즉시 사용할 수 없으며 완전한 IDE의 편리한 기능입니다. 나는 cscope
멋진 조타 인터페이스를 사용하여 그렇게합니다 : http://wikemacs.org/wiki/Python#cscope "이 심볼은 어디에 정의되어 있습니까? 어디에 사용됩니까?"와 같은 질문에 대답 할 수 있습니다.
추신 : 악의 모드에서 우리는 같은 파일에서 기호 정의로 이동할 수 있습니다 gd
.
gd
만 파일의 심볼의 첫 번째 항목 발견 악 : (문서화 문자열에도 불구하고이 "이동 정의 또는 지점에서 심볼의 첫 번째 항목에.")
M-.
어떤는 수밖에 없다 elpy-goto-definition
트릭을 할 것입니다. 사용 M-*
당신은 그가 버퍼 이전 위치 INT로 다시 이동하게됩니다. 이를 통해 신속하게 무언가를 확인하고 이전 위치로 돌아갈 수 있습니다.
나는 또한 C-c C-o
자주 사용 합니다 ( elpy-occur-definitions
). 모든 클래스가있는 창이 열리고 함수는 현재 버퍼입니다. 해당 버퍼에서를 누르면 Enter
소스 코드의 정의에 도달하게됩니다.
M-.
에 바인딩 xref-find-definitions
하고 elpy-goto-definition
(이 메뉴에 있지만) 기본적으로 어떤 키에 없습니다. 사이트 패키지에서 정의를 찾는 것이 전혀 효과가없는 것 같습니다.
python-mode
Emacs가 기본적으로 가지고 있는 것은 아닙니다 . ( stackoverflow.com/questions/11363089/… )