vi를 사용하다가 emacs로 넘어왔다. 그동안 vi를 터미널의 기본 에디터로 오랜 세월을 사용하고 있었는데, 사용하면서 크게 불편한것 없었으나 vi의 visual mode / edit mode 등의 mode 전환에 대해서 당연하게 생각하고 써왔던 것에 대해 한두번쯤은 왜 이런게 있어서 커스텀 키매핑할때 더 불편하게 만드나,.. 이런 생각을 가끔식 하곤 했다.
대안에 대해서 따고 고민하지는 않았는데, Emacs를 알고 나서 부터 Mode 에 대한 해방이 일단 너무 좋았다. Vi를 사용하고 있다가 갑자기 GUI IDE 에디터로 옮겨왔을때 갑작스레 편집의 혼란이 많았는데, 오랜시간 Emacs를 사용하면 이런것들에 대한 Editor Cross 적응 충격으로부터 자유로워질것이라 믿는다.
Ctrl – C (C-c) 에 대한 생각, Control + C, Control + a, b, c, d, e, f 등의 자유로운 단축키 매핑이 가능한데, “C-c의 단축키 + 이어지는 단축키” 는 사용자들이 맞춤 단축키로 사용하라고 놔둔것 같은 느낌이 난다.
만약 Emacs를 제대로 사용해야 한다면 Control + C, Control + V 등의 조합으로 ‘단축키’를 만들어 내가 원하는 커맨드로 묶기를 바란다.
~/.zprofile에 LANG 환경 변수 설정
LANG 변수 세팅 관련 에러가 날수 있기 때문에 정확히 locale를 잡아준다.
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
brew를 통한 emacs 설치
emacs를 brew를 통해 설치하게 되면 기본적으로 emacs의 커맨드는 GUI를 띄우는게 default로 된다.
# brew install emacs
설치후, 터미널에서 emacs를 실행 시키고자 한다면, emacs -nw라고 실행해야 함.
Emacs를 터미널에서 실행시키기
# emacs -nw
Emacs 관련 단축키 정리
C 는 Control를 의미하며, M 는 메타키(Alt, Option등)를 의미한다. MacOS의 Terminal등에서 Meta키를 제대로 사용하려면 아래의 터미널 옵션을 켜줘야 한다.
Use Option as Meta key를 체크해준다.
폰트 관련
C-x + / – : 폰트 크기 조절
기본 dired 작업시 단축키
* 기본 파일 및 디렉토리 조작
RET (dired-find-file): 현재 파일 또는 디렉토리를 엽니다.
o (dired-find-file-other-window): 파일을 다른 창에서 엽니다.
^ (dired-up-directory): 상위 디렉토리로 이동합니다.
* 파일 표시 및 선택
m (dired-mark): 현재 파일을 마크합니다.
u (dired-unmark): 현재 파일의 마크를 해제합니다.
U (dired-unmark-all-marks): 모든 마크를 해제합니다.
* t (dired-do-toggle): 마크 상태를 토글합니다.
* % (dired-mark-files-regexp): 정규 표현식에 맞는 파일들을 마크합니다.
* 파일 조작
C (dired-do-copy): 마크된 파일들을 복사합니다.
D (dired-do-delete): 마크된 파일들을 삭제합니다.
R (dired-do-rename): 마크된 파일들을 이동 또는 이름 변경합니다.
M (dired-do-chmod): 마크된 파일들의 권한을 변경합니다.
G (dired-do-chgrp): 마크된 파일들의 그룹을 변경합니다.
O (dired-do-chown): 마크된 파일들의 소유자를 변경합니다.
* 파일 검색 및 필터링
C-s (isearch-forward): 디렉토리에서 파일 이름 검색 (순방향).
C-M-s (isearch-forward-regexp): 정규 표현식을 사용하여 파일 이름 검색 (순방향).
C-x C-q (dired-toggle-read-only): wdired 모드로 전환하여 파일 이름을 편집할 수 있습니다.
* 파일 압축 및 압축 해제
Z (dired-do-compress): 마크된 파일들을 압축합니다.
dired-do-compress-to (dired-do-compress-to): 마크된 파일들을 지정된 파일로 압축합니다.
* 서브디렉토리 관리
i (dired-maybe-insert-subdir): 서브디렉토리를 삽입 또는 삭제합니다.
$ (dired-hide-subdir): 서브디렉토리를 숨기거나 표시합니다.
* 기타 유용한 명령어
+ (dired-create-directory): 새로운 디렉토리를 생성합니다.
g (revert-buffer): 디렉토리 버퍼를 새로 고칩니다. (새로고침)
s (dired-sort-toggle-or-edit): 정렬 순서를 변경합니다.
( (dired-hide-details-mode): 파일의 자세한 정보를 숨기거나 표시합니다.
기본 매핑 없는 단축키
M-n : 매핑 원하는대로 (나는 Redo로 세팅) M-p : 매핑 원하는대로 (나는 Undo로 세팅) M-] : 매핑 원하는대로
매크로 사용
F3: 매크로 시작
F4: 매크로 종료
반복처리 : C-u 5 F4 (5번 매크로 실행)
버퍼관련
C-x <left> / <right> : 버퍼 이동
편집관련
[기본 이동]
C-p: Up
C-n: Down
C-b: Left
C-f: Right
C-e: End (현재라인의 맨뒤)
C-a: Home (현재라인의 맨앞)
위의 기본이동은 IntelliJ 같은 일단 Editor에서도 동일하다. 또한 우리가 실제로 자주 맞이하게 되는 Terminal 등도 뒤의 키는 동일하게 먹힌다. 우리가 매일 맞이하는 Terminal은 Emacs 상태와 같은 것이라고 인지하고 있으니 위의 단축키는 Vi의 이동키 'hjkl' 키의 익숙함에서 2-3일이 지나니 금방 해방되었다.
C-v : PageDown
M-v : PageUp
C-x C-b : 버퍼 선택
M-x term : 터미널 열기
C-x C-f : dired 열기
M-x set-mark-command : 블럭 선택
M-S-e : 블럭 선택
C-x SPC : 사각 블럭 선택
C-g : 현재 커맨드 취소 (Vi의 Esc의 역할이라고 봄)
>> M-x 후 "execute:" 메시지가 나타났을 때, C-g 키를 누르면 현재 실행 중인 명령 실행을 취소
C-x d : dired도 디렉토리 리스트 바로보기
C-x { / } : 파일 맨 앞으로 커서 이동
M-e : 문단 별 아래로 이동
C-M-n / p : 코드 블럭 단위 커서 이동 (, {, [ 등..
M-d : 단어별 delete
M-h : 문단별 블럭선택
M-` : Emacs 메뉴 열기
C-x 4 f : 새로운 창에서 파일 열기 (4: 새로운 윈도우를 의미함)
M-m: 첫 번째 비공백 문자로 커서 이동
C-k : 라인 삭제
C-x C-o: 빈라인 삭제
M-^ : 라인 join
M-x load-file : 설정파일 다시 읽기 (load-file 이후 ~/.emacs라고 치면 다시 reload 시켜줌)
>> M-x load-file RET ~/.emacs RET
M-/ : 자동 완성
M-g g: 라인 이동
C-M-\ : 들여쓰기
C-u 30 C-x { / } : 윈도우 가로폭을 30만큼 줄이기 / 넓히기
C-x k RET : 현재 버퍼 삭제 (kill-this-buffer)
C-x C-b : 버퍼 리스트 보기 (d: 삭제선택, x: 실행)
C-x < / > : 버퍼 이동 (이거 아주 강력한 기능이다)
C-x 2: 현재 창을 수평으로 분할하여 새로운 창을 생성합니다.
C-x 3: 현재 창을 수직으로 분할하여 새로운 창을 생성합니다.
C-x 4 f (find-file-other-window): 다른 창(윈도우)에 파일을 열기 위한 명령을 실행합니
C-x ESC ESC (or C-x M-: repeat-complex-command) : 실행 반복
M-x : undo
M-_ : redo
C-M-h : code 함수 선택
M-< / > : 파일을 처음 끝 이동
검색
C-s / r: 텍스트 검색
M-= : 전체 텍스트 글자수 등의 카운트를 알려줌
Shell 내 단축키
M-p / n : 히스토리 찾기
프레임
C-x 5 2: 새로운 프레임 생성
C-x 5 o: other-frame: 다른 프레임으로 이동하는것
C-x 5 0: 프레임 닫기
C-x 4 f: 분할된 창에서 파일 이동
단축키의 명령에 파라미터 던지기
M-x shell 이라고 치면, Emacs에서 Shell이 하나 열리게 된다. 이후에 다른 윈도우를 하나 생성하고 동일하게 M-x shell 이라고 치게 되면 역시나 아까 열었던 Shell이 그대로 보이게 되는데, Shell은 이전에 열려있던 버퍼가 있으면 그걸 그대로 열기 때문에 새로운 Shell을 열려면 아래와 같이 치면 새로운 Shell이 열리게 될것이다.
C-u M-x shell
좀더 쉬운 이해로, C-u는 파라미터를 보낼때 쓰는 단축키 인데 C-f 단축키로 커서를 오른쪽으로 1자 옮길때 만약 20자를 옮기고 싶다면 "C-u 20 C-f"라고 치면 된다.