emacs에서 tab 과 space

rainmon의 이미지

emacs에서는 각 언어모드에서 들여쓰기를 자동으로 맞춰주는데 보통 탭을 사용하는것 같습니다.
그런데 저희 프로젝트에선 탭으로 들여쓰기를 하지않고 어떤 언어이든간에 스페이스로 들여쓰기를 합니다.

주류 툴이 visual studio인데 거기선 탭을 공백으로 바꿔서 입력되도록 하는 옵션이 있습니다.
emacs에서는 모든 탭을 공백으로 치환하는 명령이 없습니까?

물론 untabify 명령은 알고있습니다만 제가 원하는 것은 탭을 스페이스로 처리해서 입력되도록 하는 방법을 알고싶습니다.
그리고 emacs설정에서 tab-width가 2이면 실제 칸수는 8칸이지만 메모장으로 열어보면 16칸이 되더군요.
emacs의 tab처리가 혼란스러운데 일반 에디터를 써왔던 사람들은 이런점이 벽으로 다가오는것 같습니다.

rainmon의 이미지

요즘 emacs 답변을 얻기가 어렵네요.
알만한건 알게되어 이젠 질문의 난이도가 높아져서 인지 -_-

제가 원하는 것은 들여쓰기를 하기위해 탭키를 누르면
탭크기만큼 스페이스가 생겨서 들여쓰기가 되도록 하는것인데요.
이것이 어렵다면 탭은 스페이스로 4칸만 이동하게끔 했으면 하는데
탭을 한번 누르면 8칸이 되었다가 어쩔땐 16칸이 되었다가 -_-;

이거말고도 vi에서 o 키에 대응되는 단축키는 없는지..
지금은 코드 작성하다가 줄과 줄 사이에 추가작성하려면
C-n 누르고 C-a 누르고 Enter 누르고서야 실제 코드를 입력합니다.
이건 좀 아닌듯 싶어서 혹시 vi의 o에 해당하는 간단한 방법없을까요?

cinsk의 이미지

먼저 Tabs versus Spaces:An Eternal Holy War를 읽어 보기 바랍니다. 웬만한 tab/space 문제를 해결해 줄 수 있는 좋은 글입니다.

Quote:
emacs의 tab처리가 혼란스러운데 일반 에디터를 써왔던 사람들은 이런점이 벽으로 다가오는것 같습니다.

혼란이라기 보다는 smart하다고 하는 게 맞겠지요. :wink:

vi의 o 명령에 일대일 매핑되는 명령은 없습니다. 그리고 o 명령을 흉내내기 위해 C-n C-a <RET>을 쓴다고 하셨는데 C-e <RET>이 더 편하지 않나요?

대신 vi의 O 명령은 C-o로 수행할 수 있습니다. 또한 C-M-o는 현재 커서 위치에서 줄을 나눠 줍니다.

verve의 이미지

Quote:
emacs에서는 모든 탭을 공백으로 치환하는 명령이 없습니까?

설정파일에 이렇게 해주시면 될거같은데요.
(setq-default indent-tabs-mode nil)
아니면 매번
M-x set-variable<RET> indent-tabs-mode<RET> nil

하시던가요.
Quote:
이거말고도 vi에서 o 키에 대응되는 단축키는 없는지..

이런 함수를 정의해서 사용하시면 어떨까요?
(defun my-insert-line ()
  "Insert blank line below the cursor."
  (interactive)
  (end-of-line)
  (newline-and-indent))

위와 같은 함수에 적당한 단축키를 매핑하시면 되겠죠.

--
The best way to be happy is to make other people happy! - Larry Wall

only2sea의 이미지

역시나 이맥스는 이런 점이 좋은 것 같네요. 함수 만들어서 키에 바인딩 해 버리면 되니까요.

이맥스에 몇 번 적응을 실패하다가 HHK Pro2를 구입하고나서 이맥스가 손에 붙게 되면서 즐겁게 쓰고 있습니다. 이젠 예전에 즐겨 쓰던 vim이 조금 불편하다는 느낌이 들고 있네요. 아직 이맥스에 많이 적응된 것도 아니어서 조금씩 익혀나가고 있어요.

아마록에서 가사와 앨범 표지를... http://kldp.net/projects/amarok-script/ 블로그: http://turtleforward.blogspot.com

익명 사용자의 이미지

답변들 감사합니다. 아직까진 emacs의 tab은 알쏭달쏭 합니다.
상황에따라 어떻게 tab이 동작되는지.. 휴가때 연습좀 하겠습니다. ^^

missu의 이미지

(setq-default indent-tabs-mode nil)

가 현재 버퍼에서는 잘 동작하지만,

가령 새로 hello.c 파일을 열었을 경우에
.c 파일 오픈시에 자동으로 c-mode 가 실행되도록 해놨다면,
위 설정이 무시되더군요.

그럴경우에는 아래 방법으로 사용하시면 편합니다.

(add-hook 'c-mode-hook '
(lambda ()
(c-set-style "bsd")
(setq default-tab-width 2)
(setq c-basic-offset 2) ;; indent use only 2 blank
(setq indent-tabs-mode nil) ;; no tab
))

이렇게 하면 M-x untabify 하지 않아도 tab 이 지정한 수많큼의 blank 로 변환된 상태로 버퍼에 저장됩니다.

=====
공부허자

=====
공부허자

esrevinu의 이미지

C-q Tab 을 누르면 진짜 탭문자를 넣을 수 있다네요. (setq-default indent-tabs-mode nil) 이게 설정되어 있으면 스페이스로 들어가지만... 코딩할 때 Tab을 누르면 알아서 들여쓰기 해 주니까 그건 vi보다 편하더군요.
--
foldl (flip (:)) [] "universe"

댓글 달기

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