이멕스를 IDE로 사용하기
현재 C 또는 C ++로 코딩 할 때 Emacs의 워크 플로우에는 세 개의 창이 포함됩니다. 오른쪽에서 가장 큰 파일은 내가 작업하고있는 파일을 포함합니다. 왼쪽은 두 가지로 나뉘어져 있으며, 맨 아래는 컴파일하거나 명령을 입력하는 데 사용되는 쉘이며 맨 위는 종종 작업하는 동안 참조하려는 일종의 문서 또는 README 파일입니다. 이제는 꽤 전문적인 Emacs 사용자가 있다는 것을 알고 있으며, 완전한 IDE로 사용하려는 경우 다른 Emacs가 기능적으로 유용한 지 궁금합니다. 특히 대부분의 IDE는 일반적으로 이러한 기능을 수행합니다.
- 소스 코드 편집기
- 컴파일러
- 디버깅
- 문서 조회
- 버전 관리
- 클래스 조회 및 객체 관리자와 같은 OO 기능
이 중 몇 가지에 대해 Emacs가 이러한 기능에 어떻게 적합한 지 분명하지만 나머지는 어떻습니까? 또한 특정 언어에 중점을 두어야한다면 언어가 C ++이어야한다고 말하고 싶습니다.
편집 : 한 사용자는 '나머지는 어떻습니까?'라고 말할 때 더 구체적이어야한다고 지적했습니다. 대부분 효율적인 버전 관리와 문서 조회에 대해 궁금했습니다. 예를 들어, SLIME에서는 Lisp 함수에서 빠른 하이퍼 스펙 조회를 수행하는 것이 매우 쉽습니다. C ++ STL 문서에서 무언가를 찾는 빠른 방법이 있습니까 (예를 들어 hash_map 의 정확한 구문을 잊어 버린 경우 )?
"나머지"의 의미에 대해 구체적이어야합니다. 내가 알고있는 객체 인스펙터를 제외하고, 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 모두 고려)
편집 : 실제로 코드 탐색과 관련된 문서 조회에 대한 내 대답을 알고 있습니다. 여기에 더 많은 정보가 있습니다 :
구글 검색은 의심 할 여지없이 더 많은 예를 보여줄 것입니다.
두 번째 링크에서 알 수 있듯이 다른 문서에서 기능 및 기타 검색 기능은 지원되지 않더라도 수행 할 수 있습니다.
emacs를위한 "전통적인"IDE 스타일 환경으로 Emacs Code Browser 를 추천해야합니다 .
편집 : 이제는 emacs의 표준 VCS 인터페이스보다 Magit을 강력하게 권장 합니다.
쉘 창에서 make 명령을 실행하는 대신 Mx 컴파일을 시도 했습니까? make 명령을 실행하고 오류를 표시하며 많은 경우 출력에 파일 이름과 줄 번호가 포함되어 있으면 오류를 일으킨 코드 줄로 매우 쉽게 이동할 수 있습니다.
IDE 팬이라면 emacs의 스피드 바 패키지 (Mx 스피드 바)를보고 싶을 수도 있습니다. 그리고 아직 태그 테이블을 사용하여 코드를 탐색하는 방법에 대해 알아보십시오.
한 번 발견 된 emacs 코너는 생각조차하지 않는 방식으로 생산성을 높여줍니다. 다른 사람들이 언급했듯이, 태그를 사용하는 것은 소스 코드를 확대하는 환상적이고 빠른 방법이며 M- / (dabbrev-expand)를 사용하면 변수 이름을 완성 할 때 기대하는 것을 정확하게 수행합니다.
발생을 사용하면 버퍼에서 정규식이 모두 발생하는 버퍼를 얻는 데 유용합니다. 코드를 리팩토링하고 코드 조각이나 변수 사용을 찾거나 소스 파일에서 TODO 마커를 사용하고 모두 방문하려는 경우에 매우 유용합니다.
플러시 라인, 정렬 숫자 필드, replace-regexp 및 사각형 함수는 일부 도구에서 덤프를 가져 와서 elisp 프로그램 또는 쉼표로 구분 된 스프레드 시트와 같은 유용한 데이터로 변환하는 데 실제로 유용 할 수 있습니다.
emacs로 할 수있는 것과 같은 IDE에 관한 페이지를 썼습니다
http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html
elisp를 배우는 것은 일반적인 IDE가 할 수있는 것 이상으로 emacs가 할 수있는 다른 일을 스스로 해답 할 수있는 또 다른 좋은 방법입니다.
예를 들어 비난과 같은 Perforce 도우미 기능 작성에 대해 블로그를 작성했습니다 (자신이 직접 작성하면 원하는대로 정확하게 작동 할 수 있음을 의미 함).
http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html
또한 현재 작업중 인 코딩 표준과 일치하는 시점에 함수에 대한 주석을 동적으로 작성하는 코드를 작성했습니다.
내 elisp 코드 중 특히 훌륭한 것은 없으며 대부분이 이미 라이브러리에 존재하지만 근무 시간 동안 emacs가 사용자 정의 작업을 수행하도록하는 것이 실제로 유용합니다.
내 사이트 에서 emacs & version control integration에 대한 자세한 설명을 찾을 수 있습니다 . 또한 C / C ++, Java, Perl, Lisp / Scheme, Erlang 등 많은 언어에서 Emacs를 개발 환경으로 사용하는 방법에 대한 기사를 작성 중입니다.
버전 제어의 경우 사용하는 버전 제어 시스템에 따라 사용할 수있는 몇 가지가 있습니다. 그러나 일부 기능은 모든 기능에 공통적입니다.
vc.el 은 파일 수준에서 버전 제어를 처리하는 기본 제공 방법입니다. 대부분의 버전 제어 시스템을위한 백엔드가 있습니다. 예를 들어 Subversion 백엔드는 Emacs와 함께 제공되며 git 백엔드 및 기타 소스가 있습니다.
가장 유용한 명령은 Cx vv (vc-next-action)이며 방문하는 파일에 대해 적절한 다음 조치를 수행합니다. 이는 리포지토리에서 업데이트하거나 변경 사항을 커밋하는 것을 의미 할 수 있습니다. vc.el은 Cx Cq 를 리 바인드 하여 RCS와 같은 필요한 시스템을 사용하는 경우 파일을 체크인 및 체크 아웃합니다.
다른 매우 유용한 명령은 Cx vl 및 Cx v =로 , 사용중인 파일의 로그 및 현재 diff를 보여줍니다.
그러나 실제 생산성을 위해서는 간단한 것 이외의 단일 파일 vc.el 명령을 사용하지 않아야합니다. 전체 트리의 상태에 대한 개요를 제공하고 더 많은 기능을 제공 할 수 있으며 여러 파일에 걸쳐 일관된 커밋을 생성하는 기능은 말할 수없는 여러 패키지가 있습니다.
이들 중 대부분은 CVS 의 원래 pcl-cvs / pcvs 에 크게 영향을 받거나 기반으로합니다 . 서브 버전 psvn.el 및 dsvn.el 과 함께 제공되는 두 가지도 있습니다 . 자식 등을위한 패키지가 있습니다.
좋아, 여기의 모든 사람들은 emacs를 훌륭한 IDE로 만들기위한 완벽한 힌트를주고있다.
그러나 누구나 확장 기능을 사용하여 emacs를 커스터마이즈 할 때 (특히 형식 검사, 함수 정의 조회 등) emacs가 에디터에 매우 느리게로드된다는 점을 명심해야합니다.
이 문제를 해결하려면에서 emacs를 사용하는 것이 좋습니다 server mode
.
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:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...`
이렇게하면 인생이 더 쉬워졌습니다.이 방법으로 무거운 맞춤형 파이썬 IDE를 밀리 초 단위로 열 수 있습니다. 시스템 시작시 emacs --daemon을 추가하거나 emacsclient 용 데스크탑 파일을 생성 할 수도 있습니다. 그게 당신에게 달려 있습니다.
emacs 데몬 및 emacs 클라이언트에 대한 추가 정보는 wiki에서 찾을 수 있습니다.
http://www.emacswiki.org/emacs/EmacsAsDaemon
http://www.emacswiki.org/emacs/EmacsClient
Mx 컴파일에 대해 배워야한다는 것에 동의합니다 (Mx 다음 오류를 짧은 키 시퀀스에 바인딩).
버전 제어의 바인딩에 대해 학습합니다 (예 : vc-diff, vc-next-action 등).
레지스터를 살펴보십시오. 버퍼의 위치뿐만 아니라 전체 창 구성 (Cx rw-창 구성-등록)을 기억할 수 있습니다.
A starting point (which may be non-obvious) for exploring the VC features of Emacs is M-x vc-next-action.
It does the "next logical version control operation" on the current file, depending on the state of the file and the VC backend. So if the file is not under version control, it registers it, if the file has been changed, the changes are submitted etc.
It takes a little getting used to, but I find it very useful.
Default keybinding is C-x v v
There's a TFS.el for emacs integration into Microsoft TFS. It works with any TFS, including the TFS that runs Codeplex.com.
Basic steps to setup:
Place tfs.el in your load-path.
In your .emacs file:
(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
also in your .emacs file, set local or global key bindings for tfs commands. like so:
(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)
compile, next-error, and previous-error are all pretty important commands for C++ development in Emacs (works great on grep output too). Etags, visit-tags-table, and find-tag are important as well. completion.el is one of the great unsung hacks of the 20th century, and can speed up your C++ hacking by an order of magnitude. Oh and let's not forget ediff.
I've yet to learn how to use version control without visiting a shell, but now that I'm running commits so much more frequently (with git) I will probably have to.
You might also find tabbar useful. It emulates the only behavior I missed when moving from Eclipse to Emacs. Bound to "," and "." for moving to the previous and next tab bar, it relives you from switching the buffer by Ctrl-x b all the time.
Unfortunately, the mentioned web page does not provide the correct version to download. Most Ubuntu versions, however, deliver it in their emacs-goodies packages.
I use emacs on Windows. the compile module is nice, but I wanted compile to be smarter about the compile command line it suggests. It's possible to use "File Variables" to specify compile-command
, but I wanted something a little smarter than that. So I wrote a little function to help out. It guesses the compile command to use, to prompt the user with, when running compile
.
The guess function looks for a vbproj or csproj or sln file, and if found, it suggests msbuild. Then it looks at the buffer file name, and depending on that, suggests different things. A .wxs file means it's a WIX project, and you likely want to build an MSI, so the guess logic suggests an nmake command for the MSI. If it's a Javascript module, then the suggestion is to run jslint-for-wsh.js to lint the .js file. As a fallback, it suggests nmake.
The code I use looks like this:
(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)
I tried doing this as "before advice" for the compile function but couldn't get it to work satisfactorily. So I defined a new function and bound it to the same keystroke combination I have been using for compile
.
EDIT there is now "smarter-compile.el" which takes this idea one step further.
On documentation lookup: that depends on your programming language(s).
C libraries and system calls are typically documented in man pages. For that you can use M-x man
. Some things may be documented better in info pages; use M-x info
.
For elisp itself, use C-h f
. For python, use >>> help(<function, class, module>)
in the interpreter.
I find that most other languages offer documentation in html form. For that, try an embedded browser (I use w3m). Set your BROWSER
environment variable to a wrapper script around emacsclient -e "(w3m-goto-url-new-session \"$@\")"
(on *nix), in case something might open a browser and you want it opened inside emacs.
I know this is a very old post. But this question is valid for emacs beginners.
IMO the best way to use emacs as an ide is to use a language server protocol with emacs. You can find all the information about language servers in the linked website.
For a quick setup, i would urge you to go to this page eglot . IMO eglot does it's job pretty well. It integrates well with auto completions packages like company. Provides find reference, and more.
Also for a debugger, you may need specific debuggers for specific languages. You can use gdb from within emacs. Just type M-x gdb
.
For compiling your code, it's best to use shell-commands. I am working on this project eproj. It's gonna take a while to complete it. But all it does is maps shell command to project type. And builds you project via shell. It does the same to execute command. I may need help completing this project. It's not ready for use, but if you know a bit of elisp you can go through the code.
That aside, it's always best to use the emacs compile command.
For version control, I haven't yet seen any other package which can match the power of magit. It's specific to git. Also for git there is another package git-timemachine, which i find very useful.
Object lookup and class lookup is provided by language server protocol.
A project tree can be used for ide like interface with treemacs.
There is also a project Interaction Library called projectile.
For auto completion, I find company-mode very useful.
Truly emacs can be made to do anything.
In the recent years, Clang became an important part of the Emacs C++ support. Atila Neves had a talk on CppCon 2015: "Emacs as a C++ IDE"
It is a 16 minute talk, where he shows solutions for the following topics:
- Jump to definition
- Auto-completion
- On-the-fly syntax highlighting
- Find file in project
Slides can be found here.
In the Unix or X windows style, I don't know that there is an integrated IDE that works for everything.
IDE의 한 구성 요소 인 디버거와 상호 작용하려면 realgud를 고려 하십시오 . 다른 유용한 점은 위치 메시지에 대한 파서이므로 호출 스택 추적이 있고 호출 스택의 특정 위치에서 편집하려는 경우이 프런트 엔드 인터페이스가이를 수행 할 수 있습니다.
지금까지이 프로그램은 개선을 사용할 수있었습니다. 그러나이를 개선하기 위해 노력하는 사람들을 사용할 수도 있습니다.
면책 조항 : 나는 realgud에서 일합니다.
참고 URL : https://stackoverflow.com/questions/63421/using-emacs-as-an-ide
'IT story' 카테고리의 다른 글
mysql 확장은 더 이상 사용되지 않으며 향후 제거 될 예정입니다. 대신 mysqli 또는 PDO를 사용하십시오. [duplicate] (0) | 2020.05.29 |
---|---|
모범 사례 다국어 웹 사이트 (0) | 2020.05.29 |
얼굴 인식 라이브러리 [닫힘] (0) | 2020.05.29 |
널 오브젝트와 함께 명령문 사용 (0) | 2020.05.29 |
로컬 자식 분기가 있는지 확인하는 더 좋은 방법이 있습니까? (0) | 2020.05.29 |