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로 쓰는편.
이외 궁금한거 있으면 새글 대신 댓글로 달아주면, 제가 아는 한도내에서는 답해드립니다.
이 정도면 반박글이 아니라 거의 튜토리얼 글이네. 정보 고맙다
그래서 정보글 카테고리로 올렸슴다
설정파일 공유좀
아무것도 모를때부터 쓴거라 조금 드러움, snippet 때문에 라이센스에서 걸리는게 몇개 있어서 공개하려면 시간이 조금 걸릴수도..
나중에 시간되면 정리는 해볼께요.
ㅋㅋㅋ 아마 emacs 열라 까신 분.. 예전이 GNU 광신도가 아니였을까... 뭔가를 사랑하다가 환상이 깨졌을 때, 그 후 겪는 후유증은 말할 필요도 없죠 ㅋㅋ
말하는거 보면 90년대나 2000년대 초반에 많이 써본 듯. 아니면 최근에 접하고 실망했거나.
swiper는 C-s에 직접 바인딩 해야 하는건가요?
저는 이맥스 순정 키맵 중 마음에 드는 몇개 안되는 거라 C-s에 바인딩해서 쓰는데, 자기 마음이죠 ㅋㅋㅋ이맥스는 원래 그러라고 있는거.
저장은 ESC:w가 국룰이지
ESC까지 가기 싫고 팜레스트에서 깔짝대고 싶을때나 다른 입력을 지속적으로 해야할 상황은 순정이 편리해서 잘 써먹는중
근데 evil-collection 같은건 쓰심?
전 안썼던 걸로 기억 - dc App
아. evil-escape랑 evil-magit은 설치해져 있네요.
이거 마따. rtags 종종 깨지는데 고치기 너무 귀찮음 ㅠ - return 0;
그래도 ctags, etags같은 태그류나 스코프류에서는 아직까진 rtags가 가장 나은듯한 느낌적인 느낌.
이맥스 광신도면 vscode vim 이딴거 다 찢어버릴수있다고해야지...초장부터 패기가없네
셋 다 쓰는입장에서 장단점이 조금씩 존재해서 ㅎㅎ
c-c++는 ccls가 제일 쓸만한듯.
rtags 랑 irony 는 써봄? - return 0;
찾아보니 cquery랑 관계가 있는거 같은데 제가 lsp로 cquery 써본 경험으론 나름 괜찮을거 같기도
rtags+irony, clangd cquery 다 써봣는데 ccls가 가장 편함
그렇군요. c++은 아주 가끔 쓰는 정도이긴한데, 쓰게된다면 깔아보겠습니다.
담에 이맥스 써볼때 참고하겠습니다. 감사합니다
처음에 적응하기 좀 힘들수도 있어요. 그 고비만 잘 넘기면 됩니다.
해당 댓글은 삭제되었습니다.
1. 어떻게 하면 관절염을 해결할수 있는지 궁금합니다. 2. 진지한 cpp플젝하면 cmake같은것을 원래 사용하지 않나요? lsp는 인덱싱 없이도 작동하기 때문에 간단한 플젝은 요걸로 커버. 3,4. diff는 별루. 5. rtags같은거 사용하면 다 됩니다. 6. cmake build하고 bear make 실행시키는게 어려운 일은 아니라 생각합니다.
7. 맞아요. 그래도 다른 에디터에 비하면 검색도 편하고 UI도 좋습니다. 최근 열었던 파일도 검색가능하고요.
해당 댓글은 삭제되었습니다.
1. 뒤쳐지긴했는데 json 설정보다 elisp가 낫다고 생각하고 배포판을 쓰면 해결. 2. 어떤게 불편하신지 구체적으로ㅠㅠ 3. 키맵은 그냥 빔 쓰면 되는데 어떤게 더 필요할지. 4. 역시 어떤걸 포기하는지. 5. 재미와 자기만족로 하는거니까요. 여가시간에 게임 대신 설정놀이하는건 나쁘지 않다고 생각합니다.
해당 댓글은 삭제되었습니다.
요건 인정할수밖에 ㅋㅋㅋ 이맥스의 한계죠.
해당 댓글은 삭제되었습니다.
이맥스 기본 키바인딩 시스템은 구려서 싫어요. 진짜 관절염 걸릴것 같은.. 아직까지 여러개 써봤지만 빔 에뮬레이션으로는 이맥스가 쵝오라. 요즘은 lsp때문에 vscode같은 에디터로 다 쓰는 경우가 되게 많더군요. 이맥스도 역시 가능하고요.
해당 댓글은 삭제되었습니다.
sicp면 충분히 뽕뽑는거 아닐까 생각하네요 ㅇㅅㅇ
해당 댓글은 삭제되었습니다.
전 일단 도배가 가장 큰 문제라고 생각해서.. 답이 정해져있긴하지만 긴 댓글 감사합니다.
약간 취미의 영역?에 가깝긴합니다.
ㅂㅁㄱ
이 글을 읽고 VSCode를 지웠습니다