Egloos | Log-in
F/OSS study
F/OSS study
[emacs] 파일 내에 설정 저장하기
emacs: 23.1.1


emacs는 시작 시 .emacs 파일에서 사용자가 지정한 기본 설정을 읽어오지만
때때로 특정 파일에만 적용되는 설정을 추가하고 싶을 때가 있다.
(프로그래머라면 indentation 설정 혹은 컴파일 명령 등이 해당할 것이다.)

emacs는 이를 위해서 (file) local variable을 제공한다.
local variable은 해당 파일 내에 저장되며
파일 로드 시 이 값을 읽어 해당 설정을 바로 적용해 준다.

여기에는 두 가지 방법이 있는데
첫 번째는 파일의 제일 윗 줄에 다음과 같은 내용을 기록하는 것이다.
(물론 이 내용은 파일 자체의 내용과 무관하므로 주석으로 처리해야 한다.)

-*- mode: MODENAME; VAR: VALUE; ... -*-

여기서 "-*-" 기호로 둘러싸인 내용들이 적용된다.
위에서 대문자로 쓰인 부분을 원하는 대로 바꾸면 되는데
mode는 emacs의 주 동작 모드이며, 그에 따른 변수들과 값을 뒤에 나열하면 된다.
하지만 emacs의 변수들은 대부분 이름이 길기 때문에 여러 설정을 지정하기에는 그리 적당하지 않다.

두 번째 방법은 파일의 제일 마지막 (주석) 부분에 다음과 같이 기록하는 것이다.

/* Local Variables: */
/* mode: MODENAME   */
/* VAR: VALUE       */
/* ...              */
/* End:             */

여기서는 "Local Variables:"부터 "End:" 사이의 내용이 적용되며
각 변수 별로 한 줄씩 차지하므로, 변수 이름이나 저장할 값이 긴 경우에도 가독성을 해치지 않는다.
또한 multi-line 주석을 사용하는 경우에는 위와 같이 할 필요 없이
시작과 끝에만 주석 처리를 해도 무방하다.
(단 아래처럼 반드시 첫 줄과 마지막 줄이 비어있어야만 정상적으로 인식하는 것 같다..)

아래는 리눅스 커널 소스 내의 한 파일에 포함된 내용이다.

/*--- Inform (X)Emacs about preferred coding style ---------------------*/
/*
 * Local Variables:
 * mode: c
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * fill-column: 78
 * ispell-local-dictionary: "american"
 * End:
 */

만약 특정 디렉터리 내의 모든 (혹은 일정한 형식의) 파일에 동일한 설정이 적용된다면
이를 모든 파일에 기록해주는 것도 또한 번거로운 일이 된다.
이때는 .emacs 파일에서 이러한 작업을 수행하는 함수를 만들고 (물론 lisp이다..;;)
auto-mode-alist를 이용하여 이를 특정 패턴의 파일에만 적용되도록 할 수도 있다.

(defun my-c-mode()
  (interactive)
  (c-mode)
  (setq c-basic-offset 4)
  (setq indent-tabs-mode nil))

(add-to-list 'auto-mode-alist '("/path/to/src/\*\\.[ch]\\'" . my-c-mode))

my-c-mode() 함수는 C 언어 편집 모드를 설정하면서
기본 들여쓰기 크기를 4로 하고, 자동 들여쓰기 시 탭을 이용하지 않도록 하였다.

emacs는 파일을 열 때 auto-mode-alist를 조사하여
정규식에 매칭되는 경우 이와 연관된 ('.' 뒤에 있는) 함수를 호출해서 모드를 설정한다.
정규식이 (특수 문자 처리 때문에) 복잡해 보이지만 특정 경로 (/path/to/src/) 이하의
모든 C 소스 (.c) 혹은 헤더 (.h) 파일을 가리키도록 한 것이다.


=== 참조 문서 ===

by namhyung | 2010/07/04 14:17 | Tips | 트랙백(1) | 덧글(2)
트랙백 주소 : http://studyfoss.egloos.com/tb/5350643
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 개똥이야기 at 2013/08/07 11:31

제목 : 이맥스의 파일 변수 사용하기
이맥스에서 컴파일은 보통 'M-x compile'을 사용한다. 이 명령을 치면, 미니 버퍼에 "make -f"라는 문자열이 보인다. 대다수의 C/C++ 프로젝트는 Makefile을 사용함으로 그냥 엔터를 누르자. 컴파일 과정과 결과는 '*compilation*' 버퍼에서 보여준다. 그 뿐만이 아니라 컴파일 오류 메시지를 선택하면 그 위치의 코드로 손쉽게 이동할 수 있다. 이맥스에서 간단한 실험용으로 코드를 작성하여 'test.c'라는 파일에 저......more

Commented by harbin at 2010/07/05 03:46
그 동안 '간지러웠던' 문제였는데 쉽게 알게 되었습니다. TNX.
Commented by namhyung at 2010/07/05 10:16
도움이 되었다니 다행입니다. ^^

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
General
Application
System
Kernel
Book
Tips
태그
git build script documentation computer-architecture emacs perf memory block-layer binutils CARM bash algorithm patch linux kernel CAaQA3 elf C synchronization gcc x86 SMP glibc compiler vcs awk blktrace sed scm
전체보기
이글루 파인더

최근 등록된 덧글
informsi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
최근 등록된 트랙백
Tod's Ferrari Homme
by Tods Pas Cher,Kodak did ..
Mocassin Femme
by Mocassins Homme, I got so..
natural garcinia cambogia
by
rss

skin by jiinny


X