emacs 지원이 전체 프로젝트에서 기능 선언으로 이동할 수 있습니까?


12

emacs에 다른 파일에 정의 된 경우에도 사용자가 함수 선언으로 이동할 수있는 함수 또는 라이브러리가 있습니까?

그렇다면 어떤 언어를 지원합니까?

이 질문에 대한 영감은 emacs가 결코 IDE와 경쟁 할 수없는 몇 가지 이유를 설명하는 아래 기사에서 비롯됩니다.

http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/


emacs가 일반적으로이를 처리하는 방법은 소스 코드를 빠르게 이해하고 명령 행을 통해 전달 된 쿼리에 응답하기 위해 clang과 같은 컴파일 된 외부 프로그램에 의존하는 것입니다. irony-clang이쪽을 확인하십시오 . 기사에 대한 의견을 읽었습니까?
Sean Allred

1
alchemist.el, elixir 또는 omnisharp for C #에서 제공하는 기능은 탐색 / 리팩터링 / 아이디어를위한 외부 프로그램을 사용하는 기능은 대부분의 IDE와 매우 유사합니다. (적어도 대부분의 경우). Emacs는 IDE와 같은 비즈니스에 있지 않으므로 경쟁 기회 가 없다고 말하는 것이 합리적이라고 생각하지 않습니다 .
Renan Ranelli

@RenanRanelli IDE는 동일한 방식이지만, 누군가 이미 수행하지 않고 수동으로 통합해야하기 때문에 "IDE"라고합니다.
Tu Do

2019에는 내 의견으로는 고려해야 할 솔루션이 하나뿐입니다. 그리고 그것은 회사 완성과 함께 rtags입니다. etag 또는 부풀어 오르고 불안정한 CEDET은 잊어 버리십시오. rtags는 컴파일 타임 정보를 사용하여 프로젝트에서 사용중인 내용의 라이브 구조를 제공합니다. global et al은 끔찍합니다-그들은 많은 추측을하고 종종 잘못된 곳으로 데려다주는 영광스러운 "greps"입니다. github.com/Andersbakken/rtags
RichieHH

답변:


14

Linux 커널 소스 트리 (36k 이상)에 이르는 전체 프로젝트의 정의 / 참조로 즉시 이동할 수 있습니다. 자세한 내용은 C / C ++ 안내서 를 참조하십시오. C / C ++의 경우 C, C ++, Yacc, Java, PHP4 및 어셈블리를 지원 하는 GNU Global 을 사용하는 것이 좋습니다 .

핵심은 언어의 IDE 기능을 사용하려면 해당 언어의 플러그인을 설치해야한다는 것입니다. 내가 아는 동적 언어 패키지는 다음과 같습니다.

  • 라이브 웹 개발 : 꼬치 모드 .
  • 자바 스크립트 : Tern . 그러나 그 전에 js2-mode 를 설치 하십시오 . 무엇 js2-mode에 관해서 는 설명을 참조하십시오 . 그러나 본질적으로 js2-mode적절한 IDE 기능을 수행하기 위해 AST를 생성하는 완전한 Javascript 파서입니다. 기본적으로 설치 한 skewer-mode것보다 설치하는 경우 js2-mode기본 설치 보다 skewer-mode다릅니다.
  • Python : elpy , IDE 기능 참조
  • 루비 : 로브 는 다음과 같은 기능을 제공합니다.
  • 메소드 정의로 이동
  • 수퍼 또는 지점에서 생성자로 이동
  • 하나 이상의 메소드가 정의되어있는 경우 모듈 또는 클래스로 이동
  • 디스플레이 방법 문서
  • ElDoc을 사용하여 지점에서 호출 된 메소드에 대한 정보 표시
  • 방법 및 상수 이름 완성

ctags쉘 스크립트 또는 Tcl과 같은 광범위한 언어를 지원 하는 데 사용할 수도 있습니다 .


자바 스크립트에 대한 스위트 제안?
user2522280

@BarryG Tern이 있고 j2-mode내 답변에서 편집했습니다.
Tu Do

2
anaconda파이썬에서 정의 점프를위한보다 구체적인 솔루션 일 수 있음 을 지적하고 싶습니다 .
PythonNut

@TuDo 로브의 기능 목록을 ESS에 넣었습니다.
Dmitry

C ++의 경우 rtagsycmd도 있습니다. 파이썬, C #, Go 및 기타 언어와 함께 작동하는 ycmd를 사용합니다. 나는 dumb-jumpadvisor-rg대체로 사용하거나 기호의 사용법이나 주석 / 문서 언급을 표시합니다.
unhammer

20

emacs와 비슷한 문제가 발생하여 Dumb Jump 만들었습니다 . 허용 된 답변에 언급 된 많은 솔루션을 시도했지만 항상 다음 문제 중 하나 이상이 발생했습니다.

  • 솔루션은 단일 프로그래밍 언어에서만 작동했습니다.
  • 솔루션에 색인 (TAG) 파일 또는 영구 프로세스가 필요

"잘 작동하는"솔루션을 원했고 사용자 지정이나 설정이 필요하지 않았습니다. 즉, Github에서 임의의 저장소를 복제하고 다른 프로젝트처럼 탐색하고 싶습니다.

현재 Dumb Jump 는 다음을 기본적으로 지원합니다.

  • 자바 스크립트
  • 이맥스 리스프
  • 파이썬
  • 가다
  • PHP
  • 루비
  • 파우스트
  • 아르 자형
  • 루아
  • ...그리고 더

그것은이다 MELPA를 통해 사용할 수 와 GitHub의 문제와의 PR을 환영합니다 이상입니다.


4

emacs에서이를위한 기본 솔루션은 etags 또는 gtags와 같은 프로그램으로 작성된 TAGS 파일을 사용하는 것입니다. 나는 검색 기호가 여러 대상에있을 때 목적지를 좁히는 데 도움이되는 풍부한 ctags 및 etags-select.el을 사용하고 권장합니다. 지원되는 언어는 매우 많으므로 개별 도구 설명서를 참조하십시오. 자신의 언어를 추가 할 수도 있습니다. 따라서 ctags에 관심있는 태그를 분리하는 방법을 지시하는 정규식을 제공 할 수 있습니다.


1
오! 태그 파일을 잊어 버릴 수 있습니까? ctags -e -R *루트 디렉토리에서 설정합니다.
Sean Allred

프로젝트에 많은 종속성 (예 : 최신 자바 스크립트 웹 개발 프로젝트)이있는 경우 이것이 수용 가능한 솔루션입니까?
Rudolf Olah

종속성의 수 자체는 장애가 아닙니다. 많은 다른 라이브러리를 집계하는 하나의 큰 태그 파일을 가질 수 있습니다. 나는 몇 년 동안 이것을했다, ctags 명령 호출은 이것을 간단하게한다. 또는 내가 권장하는 것은 종속성마다 별도의 태그 파일을 갖는 것입니다. emacs는 여러 태그 파일을로드 할 수있을만큼 똑똑합니다. 이를 용이하게하기 위해 etags-table.el을 검색하면 프로젝트 당 태그 파일 그룹을로드하는 데 도움이됩니다.
InHarmsWay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.