Emacs를 사용하여 파이썬에서 함수를 찾는 방법은 무엇입니까?


22

함수가 정의 된 위치를 조회 할 수 있도록 Emacs를 구성하는 가장 쉬운 방법은 무엇입니까? Emacs에서 강조 표시하고 키 콤보를 눌러 기능의 출처를 찾습니다.

특정 기능이 사용되는 곳을 찾을 수 있습니까?

이것은 PyCharm에서 쉽게 수행되지만 Emacs에서도 쉽게 수행 할 수 있습니까?

답변:


14

Elpy 를 사용해 보셨습니까 ? elpy-goto-definition키에 바인딩 됩니다 M-..
최근 이맥스가 있다면 xref-pop-marker-stack( M-,)로 건너 뛸 수 있다고 생각합니다 . Elpy에는 다른 멋진 기능도 있습니다.

설치하려면 링크의 지시 사항을 따르십시오.



8

당신이 언급 한 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 기능 중 하나를 사용할 수 있습니다. 나는 이것이 일종의 오래된 질문이라는 것을 알고 있으며 이미이 문제를 해결했거나 앞으로 나아 갔을 수도 있지만, 당신이나 다른 누군가가 이것을 유용하게 사용하기를 바랍니다.



2

엠-. 아나콘다 모드에서 작동합니다 (엘피에 문제가 발생한 후 전환했습니다).

내 경우에는 내가 다음을 수행, 적절한 파이썬 환경이 필요합니다 : - mkvirtualenv someenv - python setup.py develop모든 모듈 개발 또는 사용 (또는 소스 대신에 설치된 버전에 도달하는 것을 선호)에 대한 - M-x venv-workon someenv이맥스의 경로를 활성화합니다.

그런 다음 anaconda-mode파이썬과 voila를 편집 할 때마다 활성화되도록 구성 M-.합니다.


1

좋은 질문은 즉시 사용할 수 없으며 완전한 IDE의 편리한 기능입니다. 나는 cscope멋진 조타 인터페이스를 사용하여 그렇게합니다 :  http://wikemacs.org/wiki/Python#cscope "이 심볼은 어디에 정의되어 있습니까? 어디에 사용됩니까?"와 같은 질문에 대답 할 수 있습니다.

추신 : 악의 모드에서 우리는 같은 파일에서 기호 정의로 이동할 수 있습니다 gd.


저는 믿습니다 gd만 파일의 심볼의 첫 번째 항목 발견 악 : (문서화 문자열에도 불구하고이 "이동 정의 또는 지점에서 심볼의 첫 번째 항목에.")
고든 구스타프손

0

M-.어떤는 수밖에 없다 elpy-goto-definition트릭을 할 것입니다. 사용 M-*당신은 그가 버퍼 이전 위치 INT로 다시 이동하게됩니다. 이를 통해 신속하게 무언가를 확인하고 이전 위치로 돌아갈 수 있습니다.

나는 또한 C-c C-o자주 사용 합니다 ( elpy-occur-definitions). 모든 클래스가있는 창이 열리고 함수는 현재 버퍼입니다. 해당 버퍼에서를 누르면 Enter소스 코드의 정의에 도달하게됩니다.


사실, AFAICT, M-.에 바인딩 xref-find-definitions하고 elpy-goto-definition(이 메뉴에 있지만) 기본적으로 어떤 키에 없습니다. 사이트 패키지에서 정의를 찾는 것이 전혀 효과가없는 것 같습니다.
Robert P. Goldman

0

Jedi 는 Python을위한 멋진 자동 완성 / 정적 분석 라이브러리로, vim을 사용할 때 다시 사용했습니다.

golang 자동 완성 엔진 (예 : gocode)이 vim과 emacs 모두에서 작동하는 것처럼, 동일한 Jedi 엔진이 vimemacs 모두에서 작동합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.