GNUEmacsManual:21

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
들여쓰기

들여쓰기

들여쓰기(indentation)는 텍스트 행의 시작에 공백 문자(whitespace character; 스페이스 또는 탭 문자)를 삽입하거나 조정하는 것을 나타낸다. 본 장에서는 Text 모드 및 관련 모드와 프로그래밍 언어 모드에서 공통으로 사용하는 들여쓰기 명령어 및 옵션을 문서화한다. 프로그래밍 모드에서 들여쓰기에 관한 추가 문서는 243 페이지의 23.3절 [프로그램 들여쓰기]를 참고한다.


들여쓰기를 가장 간단하게 실행하는 방법은 TAB 키를 이용하는 것이다. 대부분의 주 모드에서 이는

indent-for-tab-command

명령어를 실행한다. (C 및 그와 관련된 모드에서는 TAB 을 이용하면 그와 비슷하게 행동하는

c-indent-line-or-region

명령어를 실행시킨다.)


TAB

모드에 적절한 방식으로 공백을 삽입하거나 현재 행을 들여 쓴다(

indent-for-tab-command

). 영역이 활성화되어 있으면 영역 내 모든 행을 들여 쓴다.


TAB 의 정확한 행동은 주 모드에 따라 좌우된다. Text 모드 및 그와 관련된 주 모드에서 TAB 은 보통 스페이스와 탭 문자를 조합하여 삽입하여 포인트를 다음 탭 중지 위치로 앞세운다(206 페이지의 21.2절 [탭 중지] 참고). 이를 목적으로 하여 선행하는 행에서 처음으로 공백이 아닌 문자의 위치는 추가 탭 중지로 취급되므로 사용자는 TAB 을 이용해 포인트와 선행하는 행을 "일직선으로" 조정할 수 있다. 영역이 활성화되어 있으면 (47 페이지의 8.3절 [영역 사용하기] 참고) TAB 은 특별하게 행동하는데, 영역 내 각 행마다 들여쓰기를 실행하여 공백이 아닌 첫 번째 문자가 선행하는 행과 일직선에 위치하도록 한다.


프로그래밍 모드에서 TAB 은 선행하는 행의 코드를 감안해 알맞은 방식으로 코드의 현재 행을 들여 쓴다. 영역이 활성화되어 있다면 영역 내 모든 행이 이와 같은 방식으로 들여쓰기 된다. 포인트가 현재 행의 들여 쓴 범위(indentation) 내에서 초기에 위치해 있었다면 행에서 공백이 아닌 첫 번째 문자로 위치가 조정된다.


버퍼에 탭 문자를 삽입하길 원한다면 C-q TAB 을 입력한다(16 페이지의 4.1절 [텍스트 삽입하기] 참고).


들여쓰기 명령어

Emacs 는 TAB (

indent-for-tab-command

) 외에도 다른 방식으로 들여쓰기를 실행하는 명령어를 다양하게 제공한다.


C-M-o 포인트에 있는 현재 행을 분할한다(

split-line

). 포인트 이후 행에 있는 텍스트가 새 행이 되고, 포인트가 위치한 열과 동일한 열로 들여쓰기 된다. 이 명령어는 먼저 포인트를 어떠한 공백이나 탭이든 그 위로 순방향으로 이동시킨다. 이후 포인트는 삽입된 새 행 앞에 위치된다.


M-m 현재 행에 처음으로 공백이 아닌 문자로 (순방향 또는 역방향으로) 이동한다(

back-to-indentation

). 행에 공백이 아닌 문자가 없을 경우 행 끝으로 이동한다.


M-i 포인트에 있는 공백을 다음 탭 중지까지 들여 쓴다(

tab-to-tab-stop

). 206 페이지의 21.2절 [탭 중지]를 참고한다.

M-x indent-relative 포인트가 선행하는 행(사실 공백이 아닌 마지막 행)에서 처음으로 공백이 아닌 문자와 일직선이 될 때까지 포인트에 공백을 삽입한다. 포인트가 이미 그보다 훨씬 오른쪽에 위치한다면 대신 tab-to-tab-stop 을 실행하는데, 단 수치적 인자를 이용하면 어떤 일도 하지 않으므로 이 경우는 제외된다.


M-^ 이전 행과 현재 행을 합친다(

delete-indentation

). 이는 행 경계와 함께 현재 행의 앞에 위치한 들여쓰기를 하나의 공백으로 대체함으로써 두 행을 깔끔하게 "합친다."

특별한 경우로 (Lisp 코드에 유용), 합할 문자들이 연속된 열린 괄호와 닫힌 괄호이거나 연결점 다음에 또 다른 새 행이 따라올 경우 하나의 공백이 생략된다.
fill 접두어가 있을 경우 M-^ 는 삭제되는 새 행 다음에 나타나면 fill 접두어를 삭제한다. 관련 내용은 214 페이지의 22.5.3절 [Fill 접두어]를 참고한다.


C-M-\각 행의 시작에서 사용자가 마치 TAB을 입력한 것처럼 영역 내 모든 행을 들여 쓴다(

indent-region

).

수치적 인자가 제공되면 해당 열 번호로 영역 내 모든 행을 들여 쓴다.


C-x TAB 이 명령어는 영역 내에서 시작하는 모든 행의 들여쓰기를 변경하는 데에 사용되어 영향을 받는 행을 "rigid" 단위로 이동시킨다.

수치적 인자 없이 이 명령어를 호출할 경우 영향을 받는 행의 들여쓰기를 대화형으로 조정하기 위해 transient 모드를 활성화한다. 이러한 transient 모드가 활성화되었을 때 LEFT 또는 RIGHT 를 입력하면 각각 왼쪽과 오른쪽으로 하나의 공백만큼 들여 쓴다. 다음 탭 중지까지 왼쪽 또는 오른쪽으로 들여 쓰기 위해서는 S-LEFT 또는 S-RIGHT 를 입력한다(206 페이지의 21.2절 [탭 중지] 참고). 그 외 다른 키를 입력하면 transient 모드를 비활성화하고 일반 편집을 재개한다.
수치적 인자 n을 이용해 이 명령어를 호출할 경우 n개의 공백만큼 행을 순방향으로 들여 쓴다(transient 모드를 활성화하지 않고). n의 음수 값은 역방향으로 들여 쓰기 때문에 아래와 같이 큰 수의 음의 인자를 이용해 영역 내 행에서 이루어진 들여쓰기를 모두 제거할 수 있다:
C-u -999 C-x TAB


탭 중지

Emacs는 특정 열 번호를 탭 스톱(tab stops)이 되도록 정의한다. 이는 Text 모드 및 관련 모드에서 공백을 삽입할 때 TAB 에 의해 (205 페이지의 21장 [들여쓰기] 참고) 그리고 M-i 와 같은 명령어에 의해 (205 페이지의 21.1절 [들여쓰기 명령어] 참고) 중지점으로 사용된다.

tab-stop-lis

t 변수는 이러한 위치들을 제어한다. 기본값은 nil로, 탭이 8개 열마다 중지됨을 의미한다. 값은 탭 스톱을 위치시킬 0부터 시작하는 열 번호(증가순)로 된 목록이 가능하다. Emacs는 마지막 요소와 마지막 이전 요소의 차이만큼 반복하여 이 목록을 영원히 확장시킬 수 있다.


tab-stop-list

를 직접 맞춤화하는 대신 M-x edit-tab-stops 명령어를 통해 탭 스톱을 간편하게 확인하고 설정할 수 있다. 이는 아래와 같이 탭 스톱 설정의 설명을 포함하는 버퍼로 전환한다:

        :       :       :       :       :       :
0         1         2         3         4
0123456789012345678901234567890123456789012345678 
To install changes, type C-c C-c


첫 행은 탭 스톱마다 콜론을 포함한다. 다음 두 행에 포함된 숫자들은 콜론이 위치한 곳을 나타내기 위해 존재할 뿐이다.

tab-stop-list

의 값이 기본값

nil

일 경우 처음에 콜론이 전혀 표시되지 않는다. 원하는 열에 콜론을 위치시킴으로써 여러 탭 스톱을 명시하도록 버퍼를 편집할 수 있다. 버퍼는 Overwrite 모드를 사용한다(200 페이지의 20.2절 [부 모드] 참고). Emacs는 사용자가 위치시킨 마지막 두 개의 명시된 중지점의 차이를 반복함으로써 탭 중지 목록을 무제한으로 확장시킬 것이다. 사용이 끝나면 C-c C-c 를 입력하여 새로운 탭 스톱의 효과가 발생하도록 만든다. 보통은 새로운 탭 스톱 설정이 모든 버퍼에 적용된다. 하지만

tab-stop-list

변수를 사용자가 M-x edit-tab-stops 를 호출한 버퍼로 국한되게 만들고 싶다면 (423 페이지의 33.2.3절 [로컬] 참고) 새로운 탭 스톱 설정은 해당 버퍼로만 적용될 것이다. 향후 Emacs 세션에서 사용하도록 탭 스톱 설정을 저장하려면 Customize 인터페이스를 사용해

tab-stop-list

의 값을 저장한다(412 페이지의 33.1절 [간편한 맞춤화] 참고).


이번 절에서 논한 탭 스톱은 탭 문자가 버퍼에서 어떻게 표시되는지와는 아무 상관이 없음을 주목한다. 탭 문자는 언제나 다음 디스플레이 탭 스톱까지 확장된 빈 공백으로 표시된다. 관련 내용은 85 페이지의 11.19절 [텍스트 표시]를 참고한다.


탭 vs. 스페이스

보통 들여쓰기 명령어는 원하는 열에 일직선을 만들도록 스페이스 문자와 탭 문자의 최적의 조합을 삽입하거나 삭제한다. 탭 문자는 다음 디스플레이 탭 스톱까지 확장되는 빈 공백의 연장(stretch)으로 표시된다.

tab-width

열마다 하나의 디스플레이 탭 스톱이 존재하는 것이 기본값이다(기본값 8). 85 페이지의 11.19절 [텍스트 표시]를 참고한다.


원한다면 스페이스로만 들여쓰기를 만들 수도 있다. 이를 요청하려면 버퍼 로컬 변수

indent-tabs-mode

nil

로 설정한다. 버퍼 로컬 변수의 설정에 관한 정보는 423 페이지의 33.2.3절 [로컬]을 참고한다. 하지만 C-q TAB 을 이용하면 indent-tabs-mode의 값과 상관없이 항상 탭 문자를 삽입함을 주목한다.


indent-tabs-mode

nil

로 설정하는 한 가지 이유는 모든 에디터들이 탭 문자를 동일한 방식으로 표시하는 것은 아니기 때문이다. Emacs 사용자들 역시

tab-width

에 대해 다른 값을 맞춤화하였을지도 모른다. 스페이스만 사용할 경우 파일이 항상 동일하게 보이도록 만들 수 있다. Emacs 내에서의 모양만 중요하다면 파일 로컬 변수에서

tab-width

변수를 설정하여 이 문제를 해결하는 방법도 있다(424 페이지의 33.2.4절 [파일 변수] 참고).


공백이 아닌 모든 텍스트의 열을 항상 유지하면서 탭을 스페이스로 혹은 반대로 변환하는 명령어들도 있다. M-x tabify 는 영역에서 스페이스의 시퀀스를 스캔하고, 들여쓰기를 변경하지 않고도 가능하다면 최소 두 개의 스페이스 시퀀스를 탭으로 변환한다. M-x untabify 는 영역 내 모든 탭을 적절한 수의 스페이스로 변경한다.


들여쓰기를 위한 편리한 기능

tab-always-indent

변수는 TAB (

indent-for-tab-command

) 명령어의 행위를 약간 수정한다. 기본값

t

는 205 페이지의 21장 [들여쓰기]에 설명된 행위를 제공한다. 그 값을

complete

심볼로 변경할 경우 TAB 은 먼저 현재 행의 들여쓰기를 시도하고, 이미 들여쓰기가 적용된 행일 경우 포인트에 있는 텍스트를 완성하려 할 것이다(254 페이지의 23.8절 [심볼 완성] 참고). 값이

nil

일 경우 TAB 은 포인트가 왼쪽 여백이나 행의 들여쓰기에 위치할 때에만 현재 행을 들여 쓰고, 그 외의 값의 경우 탭 문자를 삽입한다.


Electric Indent 모드는 사용자가 RET 을 입력할 때마다 행을 자동으로 들여 쓰는 전역적 부 모드이다. 이 모드는 기본적으로 활성화된다. 부 모드를 토글하기 위해서는 M-x electric-indent-mode 를 입력한다. 단일 버퍼에서 모드를 토글하기 위해서는 M-x electric-indent-local-mode 를 사용한다.


Notes