it-swarm-ko.tech

이맥스를 IDE

현재 C 또는 C++로 코딩 할 때 Emacs의 워크 플로우에는 세 개의 창이 포함됩니다. 오른쪽에서 가장 큰 파일은 내가 작업하고있는 파일을 포함합니다. 왼쪽은 두 가지로 나뉘어져 있으며, 맨 아래는 컴파일하거나 명령을 입력하는 데 사용되는 쉘이며 맨 위는 종종 일종의 문서 또는 README 참조하려는 파일입니다) 저는 지금 이맥스 전문가들 중 일부가 있다는 것을 알고 있습니다. 다른 Emacs가 완전한 IDE로 사용하려는 경우 다른 Emacs가 기능적으로 유용한 지 궁금합니다. 또는 다른 :

  • 소스 코드 편집기
  • 컴파일러
  • 디버깅
  • 문서 조회
  • 버전 관리
  • 클래스 조회 및 객체 관리자와 같은 OO 기능

이 중 몇 가지에 대해 Emacs가 이러한 기능에 어떻게 적합한 지 분명하지만 나머지는 어떻습니까? 또한 특정 언어에 중점을 두어야하는 경우 C++이어야한다고 말하고 싶습니다.

편집 : 한 사용자가 '나머지는 어떻습니까'라고 말할 때 더 구체적이어야한다고 지적했습니다. 대부분 효율적인 버전 관리와 문서 조회에 대해 궁금했습니다. 예를 들어, SLIME에서는 LISP 함수에서 빠른 하이퍼 스펙 조회를 수행하는 것이 매우 쉽습니다. C++ STL 문서에서 무언가를 찾는 빠른 방법이 있습니까? (예를 들어 hash_map 의 정확한 구문을 잊어 버린 경우)?

165
user7545

"나머지"의 의미에 대해 구체적이어야합니다. 내가 알고있는 객체 인스펙터를 제외하고, emacs는 위의 모든 것을 아주 쉽게 수행한다 :

  • 편집자 (명백한)
  • 컴파일러-그냥 M-x compile하고 컴파일 명령을 입력하십시오. 거기서부터 M-x compile 및 기본값을 사용하십시오. Emacs는 C/C++ 컴파일러 오류 (GCC에서 가장 잘 작동 함)를 캡처하고 경고 또는 오류가있는 행으로 이동하도록 도와줍니다.
  • 디버깅-마찬가지로 디버깅하려는 경우 M-x gdb 그리고 특별한 바인딩을 가진 gdb 버퍼를 생성 할 것이다
  • 문서 조회-emacs는 코드 탐색을위한 뛰어난 CScope 바인딩을 제공합니다. 다른 문서 : Emacs에는 맨 페이지 리더가 있으며 그 밖의 모든 웹과 서적도 있습니다.
  • 버전 제어-다양한 VCS 백엔드에 대한 많은 Emacs 바인딩이 있습니다 (CVS, SCCS, RCS, SVN, GIT 모두 염두에 두십시오)

편집 : 실제로 코드 탐색과 관련된 문서 조회에 대한 내 대답을 알고 있습니다. 여기에 더 많은 정보가 있습니다 :

구글 검색은 의심 할 여지없이 더 많은 예를 보여줄 것입니다.

두 번째 링크에서 알 수 있듯이 다른 문서에서 기능 및 기타 검색 기능은 지원되지 않더라도 수행 할 수 있습니다.

73
Ben Collins

좀 더 "전통적인"IDE emacs의 스타일 환경으로 Emacs Code Browser 을 추천해야합니다.

[~ # ~] edit [~ # ~] : 이제 emacs의 표준 VCS 인터페이스보다 Magit 을 강력하게 추천합니다. .

29
baudtack

Shell 창에서 make 명령을 실행하는 대신 M-x 컴파일을 시도 했습니까? make 명령을 실행하고 오류를 표시하며 많은 경우 출력에 파일 이름과 줄 번호가 포함되어 있으면 오류를 일으킨 코드 줄로 매우 쉽게 이동할 수 있습니다.

IDE를 좋아한다면 emacs의 스피드 바 패키지 (M-x 스피드 바)를보고 싶을 수도 있습니다. 그리고 아직 태그 테이블을 사용하여 코드를 탐색하는 방법에 대해 알아보십시오.

19
Bryan Oakley

한 번 발견 한 emacs의 코너는 생각하지 못한 방식으로 생산성을 높여줍니다. 다른 사람들이 언급했듯이, 태그를 사용하는 것은 소스 코드를 확대하는 환상적이고 빠른 방법이며 M-/(dabbrev-expand)를 사용하면 변수 이름을 완성 할 때 기대하는 것을 정확하게 수행합니다.

발생을 사용하면 버퍼에서 정규식이 모두 발생하는 버퍼를 얻는 데 유용합니다. 코드를 리팩토링하고 코드 조각이나 변수 사용을 찾을 때 또는 소스 파일에서 TODO 마커를 사용하고 모두 방문하려는 경우에 매우 유용합니다.

플러시 라인, 정렬 숫자 필드, replace-regexp 및 사각형 함수는 일부 도구에서 덤프를 가져 와서 elisp 프로그램 또는 쉼표로 구분 된 스프레드 시트와 같은 유용한 데이터로 변환하는 데 실제로 유용 할 수 있습니다.

나는 당신이 emacs로 할 수있는 것과 같은 IDE에 관한 페이지를 썼습니다.

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

Elisp를 배우는 것은 emacs가 전형적인 IDE 할 수있는 것 이상으로 할 수있는 다른 일을 스스로 할 수있는 또 다른 좋은 방법입니다.

예를 들어, 비난과 같은 Perforce 도우미 기능 작성에 대해 블로그를 작성했습니다 (자신이 직접 작성하면 원하는대로 정확하게 작동 할 수 있음을 의미 함) ...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

또한 현재 작업중 인 코딩 표준과 일치하는 시점에 함수에 대한 주석을 동적으로 작성하는 코드를 작성했습니다.

내 elisp 코드 중 특히 훌륭한 것은 없으며 대부분이 이미 라이브러리에 존재하지만 근무 시간 동안 emacs가 사용자 정의 작업을 수행하도록하는 것이 실제로 유용합니다.

15
justinhj

my site 에서 emacs 및 버전 제어 통합에 대한 자세한 설명을 찾을 수 있습니다. 또한 C/C++, Java, Perl, LISP/Scheme, Erlang 등 많은 언어에서 Emacs를 개발 환경으로 사용하는 방법에 대한 기사를 작성 중입니다.

10
Alex Ott

좋아, 여기의 모든 사람들은 emacs를 훌륭한 IDE로 만들기위한 완벽한 힌트를주고있다.

그러나 누구나 확장 기능을 사용하여 emacs를 커스터마이즈 할 때 (특히 형식 검사, 함수 정의 조회 등) emacs가 에디터에 매우 느리게로드된다는 점을 명심해야합니다.

이 문제를 해결하려면 server mode에서 emacs를 사용하는 것이 좋습니다.

Init 파일을 사용자 정의 할 필요가 없으므로 사용이 매우 간단합니다. 데몬 모드에서 emacs를 시작하면됩니다.

emacs --daemon

그러면 emacs 서버가 생성되고 터미널이나 GUI에서 연결할 수 있습니다. 또한 쉽게 호출 할 수 있도록 별칭을 만드는 것이 좋습니다.

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

이런 식으로, emacs는 gedit, promise보다 훨씬 빠르게 작동합니다.

여기서 가능한 한 가지 문제는 일반 사용자로부터 emacs 데몬을 실행하는 경우 emacs 서버를 root로 연결할 수없는 것입니다.

따라서 루트 액세스 권한이있는 파일을 열어야하는 경우 대신 tramp를 사용하십시오. 일반 사용자로 emacs 클라이언트를 실행하고 다음과 같은 파일을여십시오.

C-x C-f
/Sudo:[email protected]/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:[email protected]` 

이것은 내 인생을 더 쉽게 만들었고, 무거운 커스터마이징 python IDE이 방법으로 밀리 초 단위로 열 수 있습니다.) 시스템에 emacs --daemon을 추가하고 싶을 수도 있습니다 시작하거나 emacsclient 용 데스크탑 파일을 만듭니다.

Emacs 데몬 및 emacs 클라이언트에 대한 추가 정보는 wiki에서 찾을 수 있습니다.

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

8
Muhammet Can

버전 제어의 경우 사용하는 버전 제어 시스템에 따라 사용할 수있는 몇 가지가 있습니다. 그러나 일부 기능은 모든 기능에 공통적입니다.

vc.el 파일 수준에서 버전 제어를 처리하는 기본 제공 방법입니다. 대부분의 버전 제어 시스템을위한 백엔드가 있습니다. 예를 들어 Subversion 백엔드는 Emacs와 함께 제공되며 다른 소스에서 사용할 수있는 git 백엔드 및 기타가 있습니다.

가장 유용한 명령은 C-x v v (vc-next-action)는 방문하는 파일에 대해 적절한 다음 조치를 수행합니다. 이것은 저장소에서 업데이트하거나 변경 사항을 커밋하는 것을 의미 할 수 있습니다. C-x C-q 필요한 시스템 (RCS와 같은)을 사용하는 경우 파일을 체크인 및 체크 아웃합니다.

다른 매우 유용한 명령은 C-x v l 과 C-x v = 사용중인 파일의 로그 및 현재 diff가 표시됩니다.

그러나 실제 생산성을 위해서는 간단한 것 이외의 단일 파일 vc.el 명령을 사용하지 않아야합니다. 전체 트리의 상태에 대한 개요를 제공하고 더 많은 기능을 제공 할 수 있으며 여러 파일에 걸쳐 일관된 커밋을 생성하는 기능은 말할 수없는 여러 패키지가 있습니다.

이들 중 대부분은 원본에 크게 영향을 받거나 pcl-cvs/pcvs CVS 용 Subversion에는 두 가지가 있습니다. psvn.el 과 dsvn.el. 자식 등을위한 패키지가 있습니다.

8
dkagedal

M-x 컴파일에 대해 배워야한다는 것에 동의합니다 (M-x 다음 오류를 짧은 키 시퀀스에 바인딩).

버전 제어 바인딩 (예 : vc-diff, vc-next-action 등)에 대해 알아보십시오.

레지스터를 살펴보십시오. 버퍼의 위치뿐만 아니라 전체 창 구성 (C-x r w-창 구성-등록)을 기억할 수 있습니다.

7
HD.

Emacs의 VC 기능을 탐색하기위한 시작점 (명백하지 않을 수도 있음)은 M-x vc-next-action입니다.

파일 상태와 VC 백엔드에 따라 현재 파일에서 "다음 논리 버전 제어 작업"을 수행합니다. 따라서 파일이 버전 제어 상태에 있지 않으면 파일을 등록합니다. 파일이 변경된 경우 변경 사항이 제출됩니다.

익숙해지는 데 약간의 시간이 걸리지 만 매우 유용합니다.

기본 키 바인딩은 C-x v v입니다.

6
Chopmo

Microsoft TFS에 emacs 통합을위한 TFS.el 가 있습니다. Codeplex.com을 실행하는 TFS를 포함한 모든 TFS에서 작동합니다.

설정하는 기본 단계 :

  1. Tfs.el을로드 경로에 배치하십시오.

  2. .emacs 파일에서 :

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
    
  3. 또한 .emacs 파일에서 tfs 명령에 대한 로컬 또는 글로벌 키 바인딩을 설정하십시오. 이렇게 :

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)
    
4
Cheeso

컴파일, 다음 오류 및 이전 오류는 모두 Emacs에서 C++ 개발을위한 매우 중요한 명령입니다 (grep 출력에서도 잘 작동합니다). 태그, 방문 태그 테이블 및 찾기 태그도 중요합니다. completion.el은 20 세기의 이름없는 해킹 중 하나이며 C++ 해킹 속도를 한 단계 높일 수 있습니다. 아 그리고 ediff를 잊지 말자.

셸을 방문하지 않고 버전 제어를 사용하는 방법을 아직 배우지 않았지만 이제는 커밋을 훨씬 더 자주 (git으로) 실행하고 있습니다.

3
jfm3

Windows에서 emacs를 사용합니다. 컴파일 모듈은 훌륭하지만 컴파일 명령 줄에 대해 더 똑똑하게 컴파일하고 싶었습니다. "파일 변수"를 사용하여 compile-command , 그러나 나는 그것보다 조금 더 똑똑한 것을 원했습니다. 그래서 나는 도울 수있는 작은 기능을 썼습니다. compile를 실행할 때 사용자에게 프롬프트하기 위해 사용할 컴파일 명령을 추측합니다.

추측 함수는 vbproj 또는 csproj 또는 sln 파일을 찾고, 발견되면 msbuild를 제안합니다. 그런 다음 버퍼 파일 이름을보고 이에 따라 다른 것을 제안합니다. .wxs 파일은 WIX 프로젝트임을 의미하며 MSI를 빌드 할 가능성이 있으므로 추측 논리는 MSI에 대한 nmake 명령을 제안합니다. Javascript 모듈 인 경우 jslint-for-wsh.js를 실행하여 .js 파일을 보 푸라 게하는 것이 좋습니다. 폴백으로 nmake를 제안합니다.

내가 사용하는 코드는 다음과 같습니다.

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

나는 이것을 컴파일 함수에 대한 "조언 전"으로 시도했지만 만족스럽게 작동하지 못했습니다. 새 함수를 정의하고 compile에 사용한 것과 동일한 키 스트로크 조합에 바인딩했습니다.


[~ # ~] edit [~ # ~] 이제이 아이디어를 취하는 " smarter-compile.el " 한 걸음 더 나아갑니다.

3
Cheeso

tabbar 유용 할 수도 있습니다. Eclipse에서 Emacs로 옮길 때 놓친 유일한 행동을 모방합니다. ","및 "."에 바인딩 이전 및 다음 탭 표시 줄로 이동하기 위해 항상 Ctrl-x b로 버퍼를 전환하지 않아도됩니다.

불행히도, 언급 된 웹 페이지는 다운로드 할 올바른 버전을 제공하지 않습니다. 그러나 대부분의 우분투 버전은 emacs-goodies 패키지로 제공합니다.

3
wr.

나는 이것이 매우 오래된 게시물이라는 것을 알고 있습니다. 그러나이 질문은 이맥스 초보자에게 유효합니다.

IMO를 eide로 사용하는 가장 좋은 방법은 emacs와 함께 language server protocol 를 사용하는 것입니다. 링크 된 웹 사이트에서 언어 서버에 대한 모든 정보를 찾을 수 있습니다.

빠른 설정을 위해이 페이지 eglot 로 이동하십시오. IMO eglot은 잘 작동합니다. 회사와 같은 자동 완성 패키지와 잘 통합됩니다. 찾기 참조 등을 제공합니다.

또한 디버거의 경우 특정 언어에 대한 특정 디버거가 필요할 수 있습니다. emacs 내에서 gdb를 사용할 수 있습니다. M-x gdb.

코드를 컴파일하려면 셸 명령을 사용하는 것이 가장 좋습니다. 이 프로젝트에서 일하고 있습니다 eproj . 완료하는 데 시간이 걸릴 것입니다. 그러나 쉘 명령을 프로젝트 유형에 매핑하기 만하면됩니다. 그리고 Shell을 통해 프로젝트를 빌드합니다. 명령을 실행하는 것도 동일합니다. 이 프로젝트를 완료하는 데 도움이 필요할 수 있습니다. 사용할 준비가되지 않았지만 약간의 설명을 알고 있다면 코드를 살펴볼 수 있습니다.

따로, 항상 emacs compile 명령을 사용하는 것이 가장 좋습니다.

버전 제어의 경우, magit 의 힘과 일치 할 수있는 다른 패키지는 아직 보지 못했습니다. git에만 해당됩니다. 또한 git에는 다른 패키지 git-timemachine이 있는데 매우 유용합니다.

객체 조회 및 클래스 조회는 언어 서버 프로토콜에 의해 제공됩니다.

treemacs 인터페이스와 같은 아이디어에 프로젝트 트리를 사용할 수 있습니다.

projectile 이라는 프로젝트 상호 작용 라이브러리도 있습니다.

자동 완성의 경우 company-mode 매우 유용합니다.

진정으로 이맥스는 무엇이든 할 수 있습니다.

2
sidharth arya

설명서 조회 : 프로그래밍 언어에 따라 다릅니다.

C 라이브러리 및 시스템 호출은 일반적으로 매뉴얼 페이지에 문서화되어 있습니다. 이를 위해 M-x man를 사용할 수 있습니다. 일부 정보는 정보 페이지에 더 잘 문서화 될 수 있습니다. M-x info를 사용하십시오.

생략하려면 C-h f를 사용하십시오. 파이썬의 경우 인터프리터에서 >>> help(<function, class, module>)을 사용하십시오.

대부분의 다른 언어는 html 형식의 문서를 제공합니다. 이를 위해 임베디드 브라우저를 사용해보십시오 (w3m 사용). 브라우저를 열거 나 emacs 내에서 열어야 할 경우를 대비하여 BROWSER 환경 변수를 emacsclient -e "(w3m-goto-url-new-session \"[email protected]\")" (* nix) 주위의 랩퍼 스크립트로 설정하십시오.

2
Jonas Kölker

최근 몇 년 동안 Clang은 Emacs C++ 지원의 중요한 부분이되었습니다. Atila Neves는 CppCon 2015에 대해 이야기했습니다 : "E ++ s as C++ IDE"

16 분짜리 대화로 다음 주제에 대한 솔루션을 보여줍니다.

  • 정의로 이동
  • 자동 완성
  • 즉각적인 구문 강조
  • 프로젝트에서 파일 찾기

슬라이드는 여기 에서 찾을 수 있습니다.

1
Philipp Claßen

유닉스 또는 X 윈도우 스타일에서는 모든 것에 대해 작동하는 통합 IDE)가 있다는 것을 모르겠습니다.

IDE의 한 구성 요소 인 디버거와 상호 작용하려면 realgud 를 고려하십시오. 다른 유용한 점은 위치 메시지 파서이므로 호출 스택 추적이 있고 호출 스택의 특정 위치에서 편집하려는 경우이 프런트 엔드 인터페이스가이를 수행 할 수 있습니다.

지금까지이 프로그램은 개선을 사용할 수있었습니다. 그러나 그것을 개선하기 위해 노력하는 사람들을 사용할 수도 있습니다.

면책 조항 : 나는 realgud에서 일합니다.

0
rocky