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