1. 커스텀
이맥스는 원래 너드나 잉여들이 쓰는 물건이 맞습니다.
VS코드도 충분히 좋지만, 커스텀의 자유도, JSON보다 나은 ELISP, 예전부터 만들어왔던 레거시 설정들 때문에 이맥스 쓰는거고요.
이맥스가 최고다라고 강요하진 않습니다..

ELISP 이야기가 나와서인데..
제 정신이 박힌 사람이면 init.el 하나에 몇천라인에서 만라인단위의 설정을 다 박아놓지 않고, 모듈별로 나누어놓은 후 로드합니다.

순정에서 수많은 커스텀 후 쓰는게 불편한 사람은 Spacemacs, Doom Emacs, Prelude 같은게 있습니다..


2. RSI와 키맵
우선 이맥스 기본키들은 쓰레기 맞습니다 ㅋㅋ(개인적인 생각)
수많은 기본키 중 M-x(명령찾기), C-h(도움말), C-s(검색), C-x s(저장), C-x f(파일탐색), C-x b(버퍼탐색), C-x 0,1,2,3(창 스플릿) 7개 빼고는 거의 안쓰고요.
그래서 Vim 키맵(Evil-Mode), God-Mode, Hydra, Modalka등 키바인딩관련 패키지가 수없이 많습니다.

저같은 경우는 Vim 키맵 + 표준 단축키(복사, 잘라내기, 붙여넣기, 복원, 탭순환, 범위지정. 그냥 컨트롤만 누르는 대신 터미널처럼 시프트도 같이 누르도록 설정) 조합으로 씁니다.



3. 패키지 설치
- 기능 찾기
이것저것 뒤저볼 필요도 없습니다.
https://github.com/emacs-tw/awesome-emacs
에서 찾아서 깔면되고, 필요한 기능이 더 있어서 검색하면 대부분 Emacs 위키에 있습니다.
초반에 귀찮게 찾아야하는 문제는 VS Code, Vim같은 다른 에디터도 똑같이 공유하는 문제고요.

- 패키지 리스트
elpa, melpa, org, emacswiki 추가해서 쓰면 거의 다 해결됩니다.
(add-to-list 'package-archives '("melpa" . "https://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t)
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("emacswiki" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/emacswiki/") t)

이외에 github에 있는게 필요하다 싶으면
https://github.com/raxod502/straight.el
를 추가적으로 설치해서 쓰면 해결됩니다.

- 패키지 관리
https://github.com/jwiegley/use-package
쓰면 엄청 편합니다..
이것보다 나은 패키지 관리 방법은 거의 없다고 봐도 무방.
위에서 소개한 straight를 use-package와 통합시켜서 쓸수도.


4. Diff
UI상 별로인것은 맞습니다.
그래서 전 Meld란 프로그램 애용.


5. 개발 및 디버깅
이건 할 이야기가 많은데...

- 개발
요즘 CEDIT 안씁니다.
LSP라는 훌륭한 물건이 있거든요.
https://github.com/emacs-lsp/lsp-mode
VS Code도 위 기술을 사용해서 자동완성이나 리팩터를 제공하고 있고, 이맥스도 동일합니다.


몇가지 예시를 보자면

문서를 보여주고


자동완성 및 에러 표시


타입같은 정보 표시

등등 IDE에서 가능한 기능이 모두 가능~~


이맥스에서 C++ 한정 rtags라고 있는데
https://github.com/Andersbakken/rtags
ctags, ycmd보다 훨씬 낫습니다.
LSP랑 같이 사용해도 상관없고요.


(LSP랑 같이 사용한 모습, 왼쪽에 Functions, Classes/Structs, Vars/Fields/Params 등이 보이고 각 요소들을 누르면 이동)


단, 파일 인덱싱을 위해 빌드가 필요합니다만..
cmake같은 것을 이용하든, 순수하게 짜든, make파일을 만든 후 bear make를 실행시켜주는게 가장 간단합니다.
https://github.com/rizsotto/Bear


타입스크립트 같은 경우도 tide란 것을 쓰면 상당히 편합니다.

https://github.com/ananthakumaran/tide


요놈은 메세지 창에 정보들을 잘 표시해주는 ㅎㅎ


- 디버깅
LSP를 이용한 DAP-Mode라는 게 존재.

https://github.com/emacs-lsp/dap-mode

Java, Python, Ruby, LLDB, Elixir, PHP, GDB/LLDB, Rust, Swift, Go, Javascript, Powershell등을 지원하니 주요언어 대부분은 지원하도 봐도 무방합니다.


이야기가 나왔던 이맥스에 있는 GDB도 커스텀하면 나름 쓸만하게 생겼습니다.

gdb-many-windows를 쓰면 대략 비슷하게 나오는 걸로 알고있네요.

- 컴파일
https://www.emacswiki.org/emacs/SmartCompile
패키지 설치후 smart-compile을 실행시키면 각언어별로 기본적인 컴파일 명령어를 띄워주고, Makefile 같은게 있는 경우 Makefile을 실행시킬거냐고 물어봅니다.
VS Code의 Code Runner처럼요.


6. 기타.

대부분의 에디터처럼

깃과 연동해 코드의 추가, 수정, 제거 표시등을 볼 수 있고 ( https://github.com/syohex/emacs-git-gutter-fringe )

키맵을 외우기 힘들면 키맵을 보여주는 패키지를 깔면 됩니다. ( https://github.com/justbur/emacs-which-key )



Swiper( https://github.com/abo-abo/swiper )란 검색 기능인데
검색하면 라인번호와 라인을 다보여주는 UI가 정말 끝내주고요 정규식까지 지원합니다.

또 설정을 통해 80라인에 세로 줄이 그어져 있는것, 라인의 마지막에 존재하는 스페이스 강조, tab문자 보여주기는 시각적으로 불-편하게 만들어 코드수정을 하게 만드는 효과가
이 파일은 Makefile이라 탭문자를 쓰지만, 일반 코딩용 파일이라면 'untabify'함수로 없애버리면 됩니다.



버퍼 전환같은 것도 굉장히 편해보이지 않나요??


음.. 그리고
커서를 ReadOnly->스네이크, Normal, Overwrite->상자, Insert->바모양으로 보이게 한다든가,

fallback폰트와 비율(전 hack을 메인, d2coding을 fallback으로 사용 중)을 맞추는등등의 자기가 원하는 수준의 커스텀이 가능합니다.


7. 3줄요약
자기가 편한 도구를 쓰는건데 도배까지 해가며 왈가왈부 필요가 없음.
최고다며 강요하지도 않음.
도구에 목숨걸지 말자.

P.S

이맥스는 터미널로 쓰는 것보다 GUI로 쓰는편.

이외 궁금한거 있으면 새글 대신 댓글로 달아주면, 제가 아는 한도내에서는 답해드립니다.