CPK 1.2 emacs 설정

gurugio의 이미지

이번 장에서는 emacs 설정에 대해 간략하게 알아보겠습니다. emacs의 설정파일은 사용자의 홈 디렉토리에 .emacs 파일로 저장됩니다. emacs는 그자체가 LISP언어의 인터프리터이기 때문에 일반적인 프로그램과는 설정 방법이 조금 다릅니다.

1. 설정 파일을 Emacs Lisp이라는 언어로 작성해야 합니다.
2. 설정 파일을 작성하는 것 자체가 프로그래밍입니다.
3. 설정 자체가 프로그래밍이므로 무한한 자유도를 가집니다. 내가 어떠한 기능이라도 프로그래밍만 하면 추가할 수 있습니다.
4. 하지만 잘 알지 못한다면 어떻게 시작해야할지 조차 감을 잡기 어렵습니다.

어떤 설정관련 변수들이 있는지, 어떤 함수들이 있는지 등은 emacs 메뉴얼을 보면서 알아내야합니다. 하지만 저는 여기저기에서 많은 분들의 설정 파일을 보면서 조금씩 이해한다음 저에게 필요할만한 기능들을 모았습니다. 어느정도 사용하다보니 LISP언어를 몰라도 간단한 설정은 직접 할 수 있게 되었습니다.

코딩에 가장 필요한 몇가지 설정에 대해 먼저 소개하겠습니다.

- global-font-lock-mode: 문법에 따라 색깔 강조 기능
- set-face-font: 글꼴 설정
- show-paren-mode: 괄호 등에 커서를 가져가면 매칭되는 괄호를 보여줘서 괄호가 제대로 열고 닫혔는지 확인하게 해줌
- c-default-style: 들여쓰기 설정 (bsd, gnu, linux 등 여러가지 중 택일할 수 있음)
- c-basic-offset: 들여쓰기의 디폴트 값
- indent-tabs-mode: 탭 대신에 빈칸으로 들여쓰기를 함
- auto-mode-alist: 파일 확장자에 따라 편집 모드를 자동으로 선택함
- inhibit-startup-screen: emacs를 시행하면 나타나는 시작 화면을 없앰
- tool-bar-mode: 메뉴 밑에있는 툴바를 없애거나 나타냄
- global-set-key: 단축키 지정

대부분의 설정은 특정 변수의 값을 t나 nil로 설정하는 것입니다. t는 이름대로 참값을 나타내고, nil은 거짓값을 나타냅니다. 예를 들어 (show-paren-mode t)라고 설정하면 show-paren-mode라는 함수에 참값을 전달하는 것입니다. emacs를 실행하면 emacs의 인터프리터가 (show-paren-mode t)를 실행하게 됩니다. 그리고 setq는 변수의 값을 설정하는 것입니다. (setq c-basic-offset 4)라는 코드는 c-basic-offset이라는 변수의 값을 4로 설정하는 것입니다. c-basic-offset은 emacs 내부에 있는 변수입니다. 이와같이 설정 함수를 호출하거나 변수의 값을 설정해주는 것이 .emacs 파일의 역할입니다.

몇가지 꼭 필요한 설정에 대해 설명을 하겠습니다.

(global-font-lock-mode t)
- 문법 강조에 꼭 필요한 설정입니다.

(set-face-font 'default "-*-terminus-medium-r-normal-*-16-*-*-*-*-*-*-*")
- 글꼴을 설정합니다. 설정하는 값이 복잡해보이지만 xfontsel 프로그램을 실행해서 원하는 글꼴과 크기를 선택하고 출력되는 값을 그대로 복사해서 사용하면 간단합니다. 좋은 폰트는 숫자 0과 알파벳 대문자 O가 구분되야 하고, 숫자 1과 알파벳 소문자 l이 구분되야 한다고 생각합니다. 그런면에서 많은 좋은 폰트가 있지만, 저는 terminus를 주로 사용합니다.

(show-paren-mode t)
- 괄호를 빼먹어서 생기는 컴파일 에러나 버그를 방지해줍니다. 복잡한 포인터를 만들어쓰거나 다차원 배열을 만들어쓸때 꼭 필요한 설정입니다.

(setq c-default-style '((c-mode . "bsd")))
- bsd 커널에서 사용하는 들여쓰기 형식을 사용합니다. gnu, k&r, bsd, stroustrup, linux, python, java 등의 스타일이 있으니 직접 확인해보고 자신에게 맞는 것을 선택하면 됩니다. 물론 이 설정을 없애고 다양한 들여쓰기 설정들을 하나씩 지정할 수도 있습니다. 하지만 널리 사용되는 스타일을 따르는 것이 내가 다른 사람의 소스를 볼때나, 다른 이들이 저의 소스를 볼때 알아보기 쉽습니다.

(load "cc-mode")
- emacs에게 현재 파일이 C 언어의 파일이라는 것을 알려주는 것이 cc-mode입니다. 문법 강조나 자동 들여쓰기 등의 편의를 위해서 반드시 필요합니다. cc-mode는 C 외에도 C++이나 JAVA 등 다양한 언어를 지원합니다.

(add-hook 'find-file-hook (lambda () (linum-mode t)))
- 편집창 왼편에 줄 번호를 출력합니다.

(setq load-path (cons "<디렉토리>" load-path))
- color-theme같은 .el확장자를 가지는 라이브러리를 <디렉토리>에 저장한 후, 이 경로에 라이브러리가 저장되어있다는 것을 알리는 코드입니다. 기본적으로 설치된 라이브러리외에 추가로 라이브러리를 설치할 경우 반드시 필요합니다.

(require 'color-theme)

- color-theme이라는 라이브러리를 읽어들입니다.

(color-theme-charcoal-black)

- color-theme 라이브러리가 제공하는 색상 설정입니다. emacs를 실행 후 M-x color-theme-select를 실행하면 선택 가능한 설정의 리스트가 출력됩니다.

(add-hook 'c-mode-common-hook (lambda () (gtags-mode t)))

- 확장자가 .c인 파일을 열면, emacs가 c-mode로 설정됩니다. c-mode가 진입될 때 gtags-mode도 같이 설정되라는 의미입니다. cscope와 유사한 global을 사용하기 위해서 필요합니다.

(global-set-key [C-f1] 'man)
- 컨트롤+F1 키를 누르면 온라인 메뉴얼 페이지를 열 수 있습니다. global-set-key은 단축키를 등록하는 함수입니다.

제가 사용하는 설정 파일을 보여드리겠습니다. C로 프로그래밍할때에 가장 기본적으로 필요한 들여쓰기나 인코딩설정, 하이라이팅 등은 참고하실 수 있을 것입니다. LISP언어를 모르시는 분들도 숫자나 플래그 정도만 수정하면 사용하실 수 있습니다. 만약 이 파일에서 어떤 일을 하는지 모호한 설정이 있다면 그 설정을 지우고 emacs를 실행해보시면 알 수 있을 것입니다.

사람마다 코딩 습관이 다르니 아마 이 설정이 불편하신 분들이 계실 것입니다. 사용하시다가 불편한 것이 있을때마다 emacs 메뉴얼을 읽다보면 점점 더 편리한 환경을 만드실 수 있습니다.

http://code.google.com/p/caoskernel/source/browse/branches/env/emacs_example
(예제가 수정될 수 있으므로 링크로 대체합니다.)

댓글

oppor의 이미지

꺅~~~~

제가 원하던게 이런거였어요~~
책으로도 나올수 있었으면 좋겠네요.
감사합니다~~

gurugio의 이미지

저도 .emacs 설명을 위해 제 .emacs 파일을 처음부터 다시 분석해보았습니다.
저도 많은 공부가 되었습니다.

지금은 emacs의 개발관련 라이브러리들에 대한 설명을 쓰고 있습니다.
그냥 간단하게만 쓰던 것들을 좀더 자세히 알아보니 제가 모르던 편리한 것들이 많네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.