[Q] emacs 사용자와 vi 사용자의 공동작업에 있어서 indent 및

ytt의 이미지

저는 이맥스를 사용하고 있는데요, 사실 제가 바라보는 세상의 중심은 이맥스라 이맥스의 기본 인덴트를 사용하고 있었고 별로 불편한게 없었거든요.

그런데 이맥스는 기본으로 tab + space방식을 사용하고 있고, vi는 tab방식을 사용하고 있어서 (혹시 틀리면 지적해주세요) 같이 공동작업하다보면 트러블이 좀 생기더라구요.

그래두 팀내에 vi사용자가 좀 많으니 제가 맞추려고 하는데, 이것저것 뚝딱거려봐도 잘 안되네요. 제가 한것은..

(global-unset-key [tab])
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 48 56 64 72))
(global-set-key [tab] 'tab-to-tab-stop)

이렇게 했는데, 이렇게 바꾸니 모든 모드에서 tab키가 tab-to-tab-stop으로 먹어서 상당히 불편하구요(특히 minibuffer에서 command completion이 안됨, help에서도 노드 찾아가는거 안됨. -_-;;) c-tabs-always-indent던가를 nil로 해도 원하는게 안되더라구요.

궁극적으로 원하는것은 vi처럼 프로그래밍 모드에서만큼은 항상 일정크기만큼의 tab이 적용되는거거든요 (white space가 아닌).
어떻게 하면 그렇게 할 수 있을까요?

그리고 emacs 사용자와 vi 사용자간에 공동작업을할때 indent말고 또 주의해야하는 부분이 있을까요? (서로 자기 에디터가 더 훌륭하다는 논쟁을 피하는 것 말구. ^^ )

수고하세요

dreamstorm의 이미지

;;;; cc-mode 설정


;; 몇몇 확장자 추가
(add-to-list 'auto-mode-alist '("\\.hpp\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode)) ; 난 주로 c++ 쓰니까.

;; c++ indentation
(defconst my-c-style
  '((c-tab-always-indent          . t)
    (c-comment-only-line-offset   . 4)
    (c-hanging-braces-alist       . ((substatement-open after)
                                     (brace-list-open)))
    (c-hanging-colons-alist       . ((member-init-intro before)
                                     (inher-intro)
                                     (case-label after)
                                     (label after)
                                     (access-label after)))
    (c-cleanup-list               . (scope-operator
                                     empty-defun-braces
                                     defun-close-semi))
    (c-offsets-alist              . ((arglist-close . c-lineup-arglist)
                                     (substatement-open . 0)
                                     (case-label        . 0)
                                     (block-open        . 0)
                                     (knr-argdecl-intro . -)))
    (c-echo-syntactic-information-p . t)
    )
  "My C Programming Style")

;; Customizations for all modes in CC Mode.
(defun my-c-mode-common-hook ()
  (c-add-style "PERSONAL" my-c-style t)
  (setq tab-width 4
        indent-tabs-mode t
        c-basic-offset 4)
  (c-toggle-auto-state -1)              ; disable auto-newline mode
  (c-toggle-hungry-state 1)             ; enable hungry-delete mode

  ;; return 으로 indent 까지 같이 하도록했다
  (define-key c-mode-base-map "\C-m" 'newline-and-indent)

  ;; C-c RET 로 .h .cpp 간의 전환을 하도록 했다.
  (define-key c-mode-base-map [(control c)(return)] 'ff-find-other-file)

  (c-set-offset 'substatement-open 0)
  (c-set-offset 'member-init-intro '++)
  (c-set-offset 'inline-open 0)
  (c-set-offset 'comment-intro 0)
  (c-set-offset 'label 0)
  (c-set-offset 'arglist-intro '++)

  (hs-minor-mode 1)
  )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

제 .emacs 중 일부입니다. 정확히 어느줄인지 뽑아내기가 귀찮아서 죄다 가져왔습니다. :oops:

dreamstorm의 이미지

평소에 space 로 indent 를 하시는것을 선호하신다면, 공유하는 소스 파일들에만 LocalVariables 를 쓰시는 방법도 있습니다. vim 에서도 이와 유사한 기능을 제공합니다.

예제 추가합니다.
첫줄에 이렇게 적으시면 됩니다.

// -*- mode: c++;  tab-width:8; indent-tabs-mode:t; c-basic-offset:8; -*-

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.