저도 이맥스 팔이 하려고
개발자당에 올린다는게 리눅서당에 올려버렸네요 ㅠㅠㅠㅠ
아무튼 복붙해서
저도 이맥스 관련글 올려봅니다. ㅎㅎ
다른 환경과 비교.
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으로 사용 중)을 맞추는등등의 자기가 원하는 수준의 커스텀이 가능합니다.
결론
노가다나 설정놀음에 소질이 있다는분은 이맥스 써보싶셔
rtags 쓰기전에
bear make 하면 tag 인덱싱 해줄겁니당!!
helm도 쓸만하쥬
저도 요넘 덕분에 vim 쓰다가 이맥스에 정착 성공했습니다. 만약 없었으면 적응 못했을거에요,
spacemacs나 doom emacs 같은 배포판?을 쓰면 입문하기 쉬울겁니다.
https://github.com/syl20bnr/spacemacs
https://github.com/hlissner/doom-emacs
vim에서 typescript로 개발할 때, syntax highlighting의 function 부분 강조가 vscode만큼 나와주질 않더라구요. 이맥스는 괜찮게 뽑아주는지 질문해도 될까요?
컬러는 테마들의 옵션에서 수정 가능 할거에요.
bash에서 zsh로 넘어갈때 했던 노가다가 스며들어가있는 플젝 소개합니다 ㅎ
https://github.com/black7375/BlaCk-Void-Zsh
이맥스도 리팩토링 후 공개하고는 싶은데 코드양이 만만치 않아서 ㅠㅠ
느낌있어 보이네요^_^
\(ㅇㅁㅇ)/
이맥스가 이렇게 좋습니다.
넘나 좋은 \(ㅇㅁㅇ)/ 이맥스 꼭 써보세요!