저도 이맥스 관련글 올려봅니다. ㅎㅎ
다른 환경과 비교.
IDE나 VS 코드등에 덕지덕지 붙어있는 화면들 없이 간결합니다.
코드추천은 요즘에 https://github.com/emacs-lsp/lsp-mode 라는 아아주 훌륭한 프로젝트가 있어서
보다시피 문서, 에러, 파라미터등등을 알아서 보여줍니다.
추천도 마찬가지로 IDE급으로 해주고요.
C++의 경우
https://github.com/Andersbakken/rtags 을 추가로 붙여쓰면 끝내줍니다.
완전한 AST를 만들어 다른 tags들보다 낫습니다.
예전에 찍어놓은 스샷인데
- 태그 리스트
rtags 관련 내용은 아래 링크 참조하시면 됩니다.
https://black7375.tumblr.com/post/17180382182
키맵
Emacs 유저와 Vim 유저들이 막 싸우잖아요 ㅋㅋ
Vim 유저들을 위한 Evil Mode를 깔아쓰면 Emacs 키맵 + Vim 키맵이 되서 평화로워집니다.
거기에 추가로 저는 OS 표준키들(Ctrl+cv, Ctrl+z 같은거)는 터미널에 입력하는 것처럼 Ctrl+Shift조합으로 키매핑해서 쓰고요.
대략 이런 느낌으로.
(defun mac-switch-meta nil "switch meta between Option and Command" (interactive) (if (eq mac-option-modifier nil) (progn (setq mac-option-modifier 'meta) (setq mac-command-modifier 'hyper)) (progn (setq mac-option-modifier nil) (setq mac-command-modifier 'meta)))) (global-set-key (kbd "C-S-") '(lambda () (interactive) (when (not (region-active-p)) (push-mark (point) t t)) (previous-line))) (global-set-key (kbd "C-S-") '(lambda () (interactive) (when (not (region-active-p)) (push-mark (point) t t)) (next-line))) (global-set-key (kbd "C-S-") '(lambda () (interactive) (when (not (region-active-p)) (push-mark (point) t t)) (backward-char))) (global-set-key (kbd "C-S-") '(lambda () (interactive) (when (not (region-active-p)) (push-mark (point) t t)) (forward-char))) (defun change-buffer-until-normal (change-fn) (let (current (buffer-name)) (funcall change-fn) (while (and (string-prefix-p "*" (buffer-name)) (not (eq current (buffer-name)))) (funcall change-fn)))) (defun tab-next-buffer () "Trans next buffer." (interactive) (change-buffer-until-normal 'next-buffer)) (defun tab-prev-buffer () "Trans previous buffer." (interactive) (change-buffer-until-normal 'previous-buffer)) (global-set-key [C-tab] 'tab-next-buffer) (global-set-key [C-S-iso-lefttab] 'tab-prev-buffer) (global-set-key (kbd "C-S-a") 'mark-whole-buffer) (global-set-key (kbd "C-S-x") 'kill-region) (global-set-key (kbd "C-S-c") 'kill-ring-save) (global-set-key (kbd "C-S-v") 'yank-and-indent) (global-set-key (kbd "C-S-s") 'save-buffer) (global-set-key (kbd "C-M-s") '(lambda () (interactive) (save-some-buffers t))) (global-set-key (kbd "C-S-f") 'swiper) (global-set-key (kbd "C-S-z") 'undo-tree-undo) (global-set-key (kbd "C-M-z") 'undo-tree-redo) (global-set-key (kbd "S-") 'kmacro-start-macro-or-insert-counter) (global-set-key (kbd "") 'kmacro-end-or-call-macro) (setq-default indent-tabs-mode nil) (setq initial-major-mode 'text-mode)
단축키가 헷갈리면 rtags에 있는 스샷의 하단에 있는 것처럼 단축키 도움말이 '자동'으로 표시되는 https://github.com/justbur/emacs-which-key 를 깔면 됩니다.
그 외에 같은 글자는 ctrl+j와 ctrl+k로 움직일 수 있게 설정했습니다.(스샷을 보면 310개중 82번째네요)
Vim의 j, k, 표준키의 Ctrl+방향키의 연장선이라 생각하니 정말 좋더군요.
그 외.. UI?
Swiper( https://github.com/abo-abo/swiper )란 검색 기능인데요, 검색하면 라인번호와 라인을 다보여주는 UI가 정말 끝내주고요 정규식까지 지원합니다.
또 설정을 통해 80라인에 세로 줄이 그어져 있는것, 라인의 마지막에 존재하는 스페이스 강조, tab문자 보여주기는 시각적으로 불-편하게 만들어 코드수정을 하게 만드는 효과가 ㅎㅎ
이 파일은 Makefile이라 탭문자를 쓰지만, 일반 코딩용 파일이라면 'untabify'함수로 없애버리면 됩니다.
음.. 그리고
커서를 ReadOnly->스네이크, Normal, Overwrite->상자, Insert->바모양으로 보이게 한다든가, fallback폰트와 비율(전 hack을 메인, d2coding을 fallback으로 사용 중)을 맞추는등등의 자기가 원하는 수준의 커스텀이 가능합니다.
결론
노가다나 설정놀음에 소질이 있다는분은 이맥스 써보싶셔
나중에 이맥스도 한번 도전!!
나중에 심심하면 한번 써보세요.ㅎㅎ
주력으로 한...5년 정도 intelliJ를 쓰고 있는데, DB관리 툴인 dataGrip이 내장되어 있어서
VS CODE나 vim쪽으로 도통 넘어가질 못하겠더라구요 ㅠ.ㅠ
찾다찾다 보니 결국은 저도 emacs 연습중 입니다. ㅎ.ㅎ
혹시 Spacemacs 는 사용 해보셨나요?
제가 코알못때 이맥스 접하고 쓴거라..
스페이스맥스 커스텀해서 쓰기는 너무 복잡하고 어려워서 순정 버전을 고쳐서 썼네요.
감사합니다 :)
처음에는 emacs가 좋아보였는데 손가락도 아프고 ㅠㅠ
그래서 빔과 표준 단축키 섞어써야 합니다. ㅎㅎ
spacemacs나 doom emacs 같은 배포판?을 쓰면 입문하기 쉬울거에요!!
https://github.com/syl20bnr/spacemacs
https://github.com/hlissner/doom-emacs
패키지는 개인적으로 use-package도 추천드립니다. 엄청 깔끔해요!!
위에 말씀해주신 → ctrl+j와 ctrl+k로 움직일 수 있게 설정 → 이 부분은 어떤 패키지인지 알수 있을까요?