2011년 3월 3일 목요일

[Emacs] Auto Indentation, 자동 들여쓰기

Emacs는 흔히 이야기 하는 자동 들여쓰기 기능이 없다. (헉!) 코딩 시 자동으로 들여쓰기가 안되면 최악이다! 하지만, Emacs는 편집기를 가장한 환경(Environment)이라는 주장이 여기서 통하는데, 프로그래밍을 통해 자동 들여쓰기를 할 수 있다.

이 글을 적게 된 계기는, 트위터에서 누군가 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)시 들여쓰기를 해서 붙이는 방법 등 다양한 코드가 위 링크에 있으니 참고.

댓글 없음 :