[Emacs] Auto Indentation, 자동 들여쓰기
Emacs는 흔히 이야기 하는 자동 들여쓰기 기능이 없다. (헉!) 코딩 시 자동으로 들여쓰기가 안되면 최악이다! 하지만, Emacs는 편집기를 가장한 환경(Environment)이라는 주장이 여기서 통하는데, 프로그래밍을 통해 자동 들여쓰기를 할 수 있다.
이 글을 적게 된 계기는, 트위터에서 누군가 vi의
http://www.emacswiki.org/emacs/AutoIndentation
Emacs는 자동 들여쓰기 기능은 없는 주제에
하지만 '일반적인 자동 들여쓰기'를 원한다면 이건 해답이 아니다. 그렇다면 프로그래머라면 익숙한 '엔터키를 입력하면 자동으로 들여쓰기가 되기'를 하도록 코딩하면 된다.
이렇게 하면
가장 기본적인 자동 들여쓰기를 설정하는 부분에서 Emacs가 왜 그냥 편집기가 아니라 환경 혹은 OS라고 까지 불리는지 이해할 수 있는 작은 예 였다.
ps. 그 밖에 paste(yank)시 들여쓰기를 해서 붙이는 방법 등 다양한 코드가 위 링크에 있으니 참고.
이 글을 적게 된 계기는, 트위터에서 누군가 vi의
':set ai'
기능이 emacs에도 있느냐라는 질문에서 시작되었다. HTML코딩을 하는데 들여쓰기가 자동으로 안되니 화난다는 글이었는데 여기에 멘션이 하나 달렸다. 그것도 다음 링크 하나가 전부.http://www.emacswiki.org/emacs/AutoIndentation
Emacs는 자동 들여쓰기 기능은 없는 주제에
newline-and-indent
라는 함수가 있다. 이름에서 유추 가능하듯이 다음 라인으로 이동해서 들여쓰기를 하는 함수다. 기본적으로 C-j
키로 바인딩 되어 있는 이 함수가 바로 원하는 그것. (정확히는 메이저모드에 따라 결정되지만 일단 생략...)하지만 '일반적인 자동 들여쓰기'를 원한다면 이건 해답이 아니다. 그렇다면 프로그래머라면 익숙한 '엔터키를 입력하면 자동으로 들여쓰기가 되기'를 하도록 코딩하면 된다.
(define-key global-map (kbd 'RET') 'newline-and-indent)
global-map
라는 이름에서 보듯이 위 코드는 모드에 상관없이 엔터키가 자동 들여쓰기를 수행한다. 이 말은 모드에 따라 자동 들여쓰기를 차별적으로 적용할 수 있다는 말이 된다.(define-key emacs-lisp-mode-map (kbd 'RET') 'newline-and-indent)
이렇게 하면
emacs-lisp-mode
일 때만 자동 들여쓰기가 된다는 말이다. 가능성은 모르겠지만 특정 모드에서는 자동 들여쓰기가 방해될 때도 있을지도 모르겠다.가장 기본적인 자동 들여쓰기를 설정하는 부분에서 Emacs가 왜 그냥 편집기가 아니라 환경 혹은 OS라고 까지 불리는지 이해할 수 있는 작은 예 였다.
ps. 그 밖에 paste(yank)시 들여쓰기를 해서 붙이는 방법 등 다양한 코드가 위 링크에 있으니 참고.
댓글