GNUEmacsManual:4

From 흡혈양파의 번역工房
Jump to: navigation, search
기본 편집 명령어

기본 편집 명령어

여기서는 텍스트를 어떻게 입력하고, 수정하며, 파일로 저장하는지에 대한 기본 내용을 설명한다. 해당 내용을 처음 접한다면 C-h t (
help-with-tutorial
)를 타이핑하여 Emacs 실전 지침 프로그램을 먼저 실행하길 권한다.

텍스트 삽입하기

연관된 키를 타이핑하면 일반 그래픽 문자(예: '
a
', '
B
', '
3
', '
=
')를 삽입할 수 있다. 이는 포인트에 있는 버퍼로 문자를 추가한다. 삽입은 포인트를 앞으로 이동시키므로 포인트는 삽입된 텍스트 바로 뒤에 남는다. 6 페이지의 1.1절 [포인트]를 참고한다.


행을 끝내고 새로운 행을 시작하기 위해서는 RET (
newline
)를 타이핑한다. (RET 키는 키보드에
Return
또는
Enter
로 표기되지만 본 매뉴얼에선 RET 라고 부르겠다.) 이 명령어는 새행 문자를 버퍼로 삽입한 후 주 모드에 따라 들여 쓴다(205 페이지의 21장 [들여쓰기]를 참고). 포인트가 행의 끝에 있을 경우 그 뒤에 새로운 빈 행을 생성하고 새로운 행을 들여 쓰는 효과가 일어나는데, 포인트가 행의 중간에 있을 경우 행은 그 위치에서 나뉜다. 자동 들여쓰기를 끄기 위해서는 Electric Indent 모드를 비활성화시키거나 (207 페이지의 21.4절 [편리한 들여쓰기] 참고) C-j를 타이핑하여 자동 들여쓰기 없이 새 행만 삽입하는 기능을 사용하도록 한다.


이후에 설명하겠지만, 사용자는 부 모드를 켬으로써 Emacs가 텍스트 삽입을 처리하는 방법을 변경할 수도 있다. 가령 Auto Fill 모드라고 불리는 부 모드는 행이 너무 길어지면 자동으로 행을 나눈다(212 페이지의 22.5절 [채우기] 참고). Overwrite 모드라고 불리는 부 모드는 삽입된 문자가 기존 텍스트를 오른쪽으로 미는 대신 기존 텍스트를 대체하도록 (덮어쓰도록) 한다. 200 페이지의 20.2절 [부 모드]를 참고한다.


상관된 키를 타이핑함으로써 삽입할 수 있는 것은 그래픽 문자만 해당하며, 다른 키는 편집 명령어의 역할을 할 뿐 스스로 삽입하지 못한다. 가령 DEL은 기본값으로
delete-backward-char
명령어를 (일부 모드는 이것을 다른 명령어로 바인딩하기도 한다) 실행할 뿐, 'DEL' 리터럴 문자를 삽입하지는 않는다(ASCII character code
127
).


비그래픽 문자 또는 키보드가 지원하지 않는 문자를 삽입하기 위해서는 C-q (quoted-insert)를 타이핑하여 먼저 인용하라. C-q 의 사용 방법에는 두 가지가 있다:

  • C-q 뒤에 비그래픽 문자(심지어 C-g까지)가 올 경우 해당 문자를 삽입한다. 예를 들어, C-q DEL은 리터럴 'DEL' 문자를 삽입한다.
  • C-q 뒤에 8진수가 올 경우 명시된 8진 문자 코드와 함께 문자를 삽입한다. 8진수는 무엇이든 사용할 수 있으며, 숫자가 아닌 입력값은 시퀀스를 종료시킨다. 끝나는 문자가 RET이라면 RET은 시퀀스를 종료시키는 역할만 수행한다. 그 외 숫자가 아닌 입력값은 시퀀스를 종료시킨 후 일반 입력값의 역할을 하므로 C-q 1 0 1 B 는 '
    AB
    '를 삽입한다.
    8진 시퀀스의 사용은 일반 non-binary Overwrite 모드에서 비활성화되어 그것으로 덮어쓰는 대신 숫자를 편리하게 삽입하는 방법을 제공한다.


8진수 대신 10진이나 16진을 사용할 경우
read-quoted-char-radix
변수를 10 또는 16으로 설정하라. 기수가 16이면 문자 a부터 f까지는 숫자와 마찬가지로 문자 코드의 일부 역할을 한다. 대소문자는 무시된다.


아니면 C-x 8 RET (
insert-char
) 명령어를 사용하는 수도 있다. 이는 미니버퍼를 이용해 문자의 코드 포인트나 Unicode 이름을 입력하도록 요구한다. 사용자가 이름을 입력하면 명령어는 완성을 제공한다(28 페이지의 5.4절 [완성] 참고). 코드 포인트를 입력하면 16진수 (Unicode 규칙) 또는 명시된 기수를 가진 숫자(예:
#023072
(8진수))여야 하는데, 관련 내용은 The Emacs Lisp Reference Manual의 "Integer Basics" 절을 참고한다. 이후 명령어는 해당 문자를 버퍼로 삽입한다. 가령 아래 둘은 무한대 기호를 삽입한다(Unicode 코드 포인트 U+221E):


C-x 8 RET infinity RET
C-x 8 RET 221e RET


C-q 또는 C-x 8 RET 에 대한 수치적 인자는 문자의 복사본을 몇 개나 삽입할 것인지 명시한다(23 페이지의 4.10절 [인자] 참고).


포인트 위치 변경하기

문자 삽입 이상을 수행하려면 포인트를 어떻게 이동하는지 알아야 한다(6 페이지의 1.1절 [포인트] 참고). 키보드 명령어 C-f, C-b, C-n, C-p 는 포인트를 각각 우, 좌, 하, 상으로 움직인다. 대부분 키보드의 화살표 키를 이용해 포인트를 이동시킬 수도 있지만 (, , , ), 많은 Emacs 사용자들은 제어 키보다 화살표 키가 느리다는 사실을 발견하는데, 키보드의 키가 위치한 영역까지 손을 이동시켜야 하기 때문이다.


왼쪽 마우스 버튼을 클릭하여 클릭한 위치로 포인트를 이동시킬 수도 있다. Emacs 는 포인트를 좀 더 정교하게 이동시키는 다양한 추가 키보드 명령어도 제공한다.


C-f 한 문자를 앞으로 이동시킨다(
forward-char
).


이 명령어(
right-char
)는 C-f 와 같이 행동하지만 Aratic과 같은 right-to-left 스크립트를 편집할 때는 현재 문단이 right-to-left 문단일 경우 뒤로(backward) 이동한다는 점은 제외다. 197 페이지의 19.19절 [양방향 편집]을 참고한다.
visual-order-cursor-movement
nil
이 아닐 경우 이 명령어는 현재 화면 위치의 우측에 있는 문자로 이동하고, 다음 또는 이전 화면으로 적절하게 이동한다. 이는 주변의 양방향 컨텍스트에 따라 많은 버퍼 위치를 잠재적으로 이동시킬 수도 있음을 주목한다.


C-b 한 문자를 뒤로 이동시킨다(
backward-char
).


이 명령어(
left-char
)는 C-f 와 같이 행동하지만 현재 문단이 right-to-left 문단일 경우 앞으로(
forward
) 이동한다는 점은 제외다. 197 페이지의 19.19절 [양방향 편집]을 참고한다.
visual-order-cursor-movement
nil
이 아닐 경우 이 명령어는 현재 화면 위치의 좌측에 있는 문자로 이동하고, 다음 또는 이전 화면으로 적절하게 이동한다.


C-n 하나의 화면 행만큼 아래로 이동시킨다(
next-line
). 이 명령어는 가로 위치를 변경되지 않은 채 유지하도록 시도하므로, 한 행의 중간에서 시작하면 다음 행의 중간으로 이동된다.


C-p 하나의 화면 행만큼 위로 이동시킨다(
previous-line
). 이 명령어는 C-n 과 마찬가지로 행 안에 위치를 유지한다.


C-a Home 행의 시작으로 이동시킨다(
move-beginning-of-line
).


C-e End 행의 끝으로 이동시킨다(
move-end-of-line
).


M-f 하나의 워드를 앞으로 이동시킨다(
forward-word
).


C→ M-RIGHT 이 명령어는 (
right-word
)처럼 행동하는데, 현재 단락이 right-to-left일 경우 하나의 워드만큼 뒤로 이동한다는 점은 제외다. 197 페이지의 19.19절 [양방향 편집]을 참고한다.


M-b 하나의 워드를 뒤로 이동시킨다(
backward-word
).


C← M-LEFT 이 명령어는 (left-word) M-b 처럼 행동하는데, 현재 단락이 right-to-left일 경우 하나의 워드만큼 앞으로 이동한다는 점은 제외다. 197 페이지의 19.19절 [양방향 편집]을 참고한다.


M-r 화면 상에서 텍스트를 이동시키지 않고 창의 가장 중앙 텍스트 행의 왼쪽 가장자리에 포인트를 재위치시키고, 잇따른 연속 호출 시에는 가장 위쪽, 가장 아래쪽 등의 순서로 그 왼쪽 가장자리로 포인트를 이동시킨다(
move-to-window-line-top-bottom
).
수치적 인자는 창의 상단부터 내려오면서 (최상단 행이 0을 의미) 포인트를 위치시킬 화면 행을 알려준다. 음의 인자는 하단부터 위로 행을 센다(-1이 하단 행을 의미). 수치적 인자에 관한 정보는 23 페이지의 4.10절 [인자]를 참고한다.


M-< 버퍼의 끝으로 이동시킨다(
beginning-of-buffer
). 수치적 인자 n은 상단부터 시작해 n/10로 이동시킨다.


M-> 버퍼의 끝으로 이동시킨다(
end-of-buffer
).


C-v PageDown next 디스플레이를 하나의 화면만큼 앞으로 스크롤하고, 필요 시 화면에 포인트를 이동시킨다(scroll-up-command). 69 페이지의 11.1절 [스크롤하기]를 참고한다.


M-v PageUp prior 하나의 화면을 뒤로 이동시키고, 필요 시 화면에 포인트를 이동시킨다(scroll-down-command). 69 페이지의 11.1절 [스크롤하기]를 참고한다.


M-g c 숫자 n을 읽고 포인터를 버퍼 위치 n으로 이동시킨다. 위치 1은 버퍼의 시작이다.


M-g M-g M-g g 숫자 n을 읽고 포인트를 행 번호 n의 시작으로 이동시킨다(
goto-line
). 행 1은 버퍼의 시작이다. 포인트가 버퍼 내 숫자 또는 그 바로 뒤에 있는 경우 n의 기본값이 된다. 이를 사용하기 위해서는 미니버퍼에서 RET이라고 입력하면 된다. M-g M-g에 수치적 접두 인자를 제공하면 n을 명시할 수 있다. M-g M-g에 일반 접두 인자를 부여 시 그 행위에 대한 정보는 147 페이지의 16.1절 [버퍼를 선택하라]를 참고한다.


M-g TAB 숫자 n을 읽고 열 n을 현재 행으로 이동시킨다. 열 0은 가장 왼쪽의 열이다. 접두 인자로 호출 시 인자의 수치 값에 명시된 열 번호로 이동시킨다.


C-x C-n 포인트의 현재 열을 C-nC-p 에 대한 반영구적 목표 열로 사용한다({{RoundTitleNavy|set-goal-column). 반영구적 목표 열이 실행 중인 경우 그러한 명령어들은 수직으로 이동한 후 항상 이 열 또는 이 열과 가능한 가깝게 이동하려고 시도한다. 목표 열은 취소될 때까지 실행 상태로 유지된다.


C-u C-x C-n 목표 열을 취소한다. 이후 C-nC-p 는 언제나처럼 수평 위치를 유지하려고 시도한다.


버퍼 내에 텍스트의 행이 창의 너비보다 긴 경우 Emacs는 주로 그것을 두 개 또는 그 이상의 화면 행에 표시한다. 규칙상 C-nC-p 는 down과 up의 키와 마찬가지로 화면 행만큼 포인트를 이동시킨다.
line-move-visual
변수를
nil
로 설정하면 사용자는 이러한 명령어들을 논리적 행(예: 버퍼 내 텍스트 행에 따라)에 따라 강제로 이동시킬 수 있고, 논리 행이 여러 화면 행을 차지할 경우 커서는 추가 화면 행을 건너뛴다. 자세한 내용은 22 페이지의 4.8절 [계속 행]을 참고한다.
line-move-visual
와 같은 변수를 설정하는 방법은 420 페이지의 33.2절 [변수]를 참고한다.


C-nC-p 와 달리 행에 작업하는 Emacs 명령어 대부분은 논리 행에 작업한다. 가령 C-a (
move-beginning-of-line
)과 C-e (
move-end-of-line
)는 각각 논리 행의 시작과 끝으로 이동한다. C-n 이나 C-p 와 같은 화면 행에 작업하는 명령어를 만날 때마다 이를 언급할 것이다.


line-move-visual
nil
인 경우,
track-eol
변수를
nil
이 아닌 값으로 설정할 수도 있다. C-nC-p 는 논리 행의 끝에서 시작 시 다음 논리 행의 끝으로 이동한다. 보통
track-eol
nil
이다.


C-n 을 버퍼의 마지막 행에서 사용할 경우 보통 버퍼의 끝에서 멈춘다. 하지만
next-line-add-newlines
변수를 nil이 아닌 값으로 설정할 경우 버퍼의 마지막 행에 있는 C-n 은 마지막에 추가 행을 생성하고 그 안으로 하향 이동한다.


텍스트 제거하기

DEL ← Backspace 포인트 앞의 문제를 삭제하고, 활성화된 경우에는 영역을 삭제한다(
delete-backward-char
).


Delete 포인트 뒤의 문자를 삭제하고, 활성화된 경우에는 영역을 삭제한다(
delete-forward-char
).


C-d 포인트 뒤의 문자를 삭제한다(
delete-char
).


C-k 행의 끝까지 제거한다(
kill-line
).


M-d 다음 워드의 끝까지 앞으로(forward) 제거한다(
kill-word
).


M-DEL 이전 워드의 시작까지 뒤로(back) 제거한다(
backward-kill-word
).


DEL (
delete-backward-char
) 명령어는 포인트 앞의 문자를 제거하여, 뒤로 (backwards) 이동한 후에 문자와 커서를 이동시킨다. 포인트가 행의 시작에 위치할 경우 이는 앞선 새 행을 제거하여 이 행을 기존 행과 합친다.


하지만 영역이 활성화된 경우 DEL 은 대신 영역 내 텍스트를 삭제한다. 영역의 설명은 45 페이지의 8장 [마크]를 참고한다.


대부분 키보드에서
DEL
BACKSPACE
로 불리지만 본 매뉴얼에서는
DEL
이라고 부르겠다. (DEL을 Delete 키와 혼동하지 않길 바라며, Delete 를 잠시 논하도록 하겠다.) 일부 텍스트 터미널에서는 Emacs가 DEL 키를 적절하게 인식하지 못할지도 모른다. 이런 문제에 직면할 경우 444 페이지의 34.2.1절 [DEL 은 Delete 가 아니다]를 참고한다.


Delete (
delete-forward-char
) 명령어는 "반대 방향"으로 삭제를 진행하는데, 가령 포인트 다음 문자라던가 커서 아래의 문자를 삭제한다. 포인트가 행 끝에 위치한 경우 이 명령어는 잇따른 행을 이 행 위에서 합친다. DEL과 마찬가지로 영역이 활성화된 경우 영역 내 텍스트를 삭제한다(45 페이지의 8장 [마크]를 참고).


C-d (
delete-char
)는 Delete와 유사하게 포인트 다음의 문자를 삭제하지만 영역의 활성화 유무와는 무관하다. 위의 삭제 명령어에 관한 상세한 정보는 52 페이지의 9.1.1절 [삭제]를 참고한다.


C-k (
kill-line
) 은 한 번에 하나의 행을 삭제(제거)한다. 행의 시작이나 중간에 C-k 라고 입력하면 행의 끝까지 모든 텍스트를 삭제한다. 행의 끝에서 C-k 라고 입력하면 해당 행을 다음 행과 합친다.


C-k 와 관련된 명령어에 관한 상세한 정보는 52 페이지의 9장 [제거하기]를 참고한다.


변경내용 취소하기

C-/ 실행취소 기록의 엔트리 하나를 실행취소한다 - 보통 하나의 명령어로 충분하다(undo).


C-x u C-_ 동일하다.


Emacs는 버퍼 텍스트에서 이루어지는 변경사항의 목록을 기록하므로 최근 변경내용을 실행 취소할 수 있다. 이는 C-/ (C-x uC-_ 도 마찬가지)에 바인딩된 undo 명령어를 이용해 이루어진다. 보통 이 명령어는 마지막 변경내용을 실행취소하여 포인트를 변경이 일어나기 이전 위치로 이동한다. 실행취소 명령어는 버퍼 내 변경내용에만 적용되며, 커서 움직임의 실행취소에는 사용할 수 없다.


각 편집 명령어는 실행취소 기록에 구분된 엔트리를 만드는 것이 보통이지만 매우 간단한 명령어를 함께 그룹화해도 좋다. 때때로 엔트리는 복잡한 명령어의 일부만 적용할 수도 있다.


C-/ (또는 이와 동일한 명령어)를 반복하면 각 반복이 서로의 실행을 취소하고 기존 변경내용을 취소하여, 이용할 수 있는 실행취소 정보의 한계까지 돌아간다. 모든 기록된 변경내용을 이미 실행취소한 경우, 실행취소 명령어는 오류 메시지를 표시하여 아무 것도 실행하지 않는다.


undo
명령어에 관해 더 학습하기 위해서는 109 페이지의 13.1절 [실행취소]를 참고한다.


파일

Emacs 버퍼에서 사용자가 삽입하는 텍스트는 Emacs 세션 길이만큼만 지속된다. 텍스트를 영구적으로 유지하기 위해서는 이것을 파일에 넣어야 한다.


자신의 홈 디렉터리에
test.emacs
라는 파일이 있다고 가정하자. 이 파일을 Emacs에서 편집하려면 다음을 타이핑하라.


C-x C-f test.emacs RET


여기서 파일명은 C-x C-f (
find-file
)이란 명령어에 인자로서 주어진다. 해당 명령어는 미니버퍼를 이용해 인자를 읽고, 인자를 종료하려면 RET 이라고 입력한다(26 페이지의 5장 [미니버퍼]를 참고).


Emacs는 파일을 방문함으로써 이 명령어를 따르는데, 버퍼를 생성하고 파일의 내용을 버퍼로 복사한 후 편집을 위해 버퍼를 표시한다. 사용자가 텍스트를 수정할 경우, C-x C-s (
save-buffer
)라고 타이핑하면 새로운 텍스트를 파일에 저장할 수 있다. 이는 수정된 버퍼 내용을 다시
test.emacs
파일로 복사하여 영구적으로 만든다. 변경된 텍스트는 저장하기 전까지는 Emacs 안에만 존재하며,
test.emacs
파일은 수정되지 않은 상태다.


파일을 생성하기 위해서는 파일이 이미 존재하는 것처럼 C-x C-f 를 이용해 방문한다. 이는 파일에 넣고 싶은 텍스트를 삽입할 수 있는 빈 버퍼를 생성할 것이다. Emacs는 사실상 C-x C-s 를 이용해 이 버퍼를 처음으로 저장할 때 파일을 생성한다.


Emacs에서 파일의 사용에 관한 추가 정보는 122 페이지의 15장 [파일]을 참고한다.


도움말

키가 무엇을 하는지 잊어버렸다면 C-h k (
describe-key
) 뒤에 관심이 있는 키를 입력하면 알아낼 수 있다. (예: C-h k C-nC-n 이 무엇을 하는지를 알려준다.)


접두 키 C-h 는 "도움말"을 의미한다. F1 키는 C-h 와 동일한 역할을 한다. C-h k 외에도 여러 유형의 도움을 제공하는 도움말 명령어가 많다.


상세한 내용은 37 페이지의 7장 [도움말]을 참고한다.


빈 행

빈 행을 삽입하고 삭제하는 특수 명령어와 기법들을 소개하겠다.


C-o 커서 뒤에 빈 행을 삽입한다(
open-line
).


C-x C-o 여러 연속된 빈 행 중 하나만 제외하고 모두 삭제한다(
delete-blank-lines
).


RET(newline)
이 어떻게 새로운 텍스트 행을 시작하는지 살펴보았다. 하지만 빈 행을 먼저 만든 다음 원하는 텍스트를 그 안에 삽입하면 어떨지를 살펴보는 편이 쉬울지도 모른다. 이는 C-o (
open-line
) 키를 이용해 쉽게 실행할 수 있는데, 이는 포인트 뒤에 새 행을 삽입하지만 포인트를 새 행 앞에 둔다. C-o 뒤에는 새 행에 대한 텍스트를 타이핑한다.


C-o 를 여러 번 타이핑하거나 얼마나 많은 빈 행을 만들 것인지 명시하는 수치적 인자를 부여함으로써 여러 개의 빈 행을 만들 수 있다. 해당 방법은 23 페이지의 4.10절 [인자]를 참고한다. Fill 접두어를 가진 경우 C-o 는 행의 시작에 타이핑하면 새 행에 fill 접두어를 삽입할 것이다. 관련 내용은 214 페이지의 22.5.3절 [Fill 접두어]를 참고한다.


추가 빈 행을 쉽게 제거하는 방법은 C-x C-o (
delete-blank-lines
) 명령어를 이용하는 방법이다. 포인트가 여러 빈 행의 실행 내부에 있다면 C-x C-o 는 그 중 하나만 남기고 모두 삭제할 것이다. 포인트가 하나의 빈 행에 위치한 경우, C-x C-o 는 그것을 삭제할 것이다. 포인트가 비어 있지 않은 행에 위치한 경우 C-x C-o 는 뒤에 빈 행이 존재한다면 빈 행을 모두 삭제한다.


연속 행

때로는 버퍼 내 텍스트 행(논리 행)이 너무 길어 창에 맞지 않아 Emacs가 이것을 두 개 이상의 화면 행으로 표시할 수도 있다. 이를 행 래핑 (line wrapping)또는 연속(continuation)이라고 부르고, 긴 논리 행은 연속된 행(continued line)이라 부른다. 그래픽 디스플레이 상에서 Emacs는 좌측과 우측 창 프린지(fringe)에 작게 굽은 화살표와 함께 행 래핑을 나타낸다. 텍스트 터미널 상에서 EMacs는 오른쪽 가장자리에 '\' 문자를 표시하여 행 래핑을 나타낸다.


행에서 작용하는 대부분의 명령어는 화면 행이 아니라 논리 행에서 실행한다. 예를 들어 C-k 는 논리 행을 제거한다. 앞에서 설명한 바와 같이 C-n (
next-line
)과 C-p (
previous-line
)는 특수 예외로, 한 화면 행만큼 포인트를 각각 아래와 위로 이동시킨다(17 페이지의 4.2절 [포인트 이동하기]를 참고).


Emacs는 긴 논리 행을 연속하는 대신 절단하는 옵션도 가진다. 즉, 모든 논리 행은 하나의 화면 행을 차지하고, 창의 너비보다 길면 나머지 부분은 표시되지 않는다는 의미다. 그래픽 디스플레이에서 절단된 행은 오른쪽 프린지에 작은 직선 화살표로 표시되고, 텍스트 터미널에서는 오른쪽 가장자리에 '
$
' 문자로 표시된다. 87 페이지의 11.21절 [행 절단]을 참고한다.


연속된 행은 기본값으로 오른쪽 창 가장자리에서 래핑된다. 래핑은 워드 중간에서 발생할 수도 있으므로, 연속된 행을 읽기 힘들 수도 있다. 일반적 해결 방법은 행이 너무 길어지기 전에 새 행을 삽입함으로써 행을 나누는 (break) 방법이다. 사용자가 선호한다면 Auto Fill 모드를 이용해 행이 너무 길어지면 Emacs가 자동으로 새 행을 삽입하도록 만들 수도 있다. 이는 212 페이지의 22.5절 [채우기]를 참고한다.


때로는 다수의 긴 논리 행을 포함하는 파일을 편집해야 할 때도 있는데, 이 때 새 행을 추가함으로써 모두 분리시키는 방법은 실용적이지 못하다. 이런 경우, 워드 래핑을 활성화하는 Visual Line 모드를 사용하여, 긴 행을 오른쪽 창 가장자리에서 정확히 래핑하는 대신 Emacs가 오른쪽 창 가장자리에서 가장 가까운 워드 경계에서 (예: 스페이스 또는 탭 문자) 래핑하는 방법이 있다. Visual Line 모드는 C-a, C-n, C-k 와 같은 편집 명령어가 논리 행이 아닌 화면 행에서 작동하도록 재정의하기도 한다. 87 페이지의 11.22절 [Visual Line 모드]를 참고한다.


커서 위치 정보

여기에는 버퍼의 크기 및 위치 부분에 관한 정보를 얻고, 워드와 행을 세는 데에 사용되는 명령어를 소개한다.


M-x what-line 포인트의 행 번호를 표시한다.


M-x line-number-mode M-x column-number-mode 현재 행 번호 또는 열 번호의 자동 디스플레이를 토글한다. 84 페이지의 11.18절 [선택적 모드 행]을 참고한다.


M-= 영역에 존재하는 행, 워드, 문자 개수를 표시한다 (
count-words-region
). 영역(region)에 대한 정보는 45 페이지의 8장 [마크]를 참고한다.


M-x count-words 버퍼에 표시되는 행, 워드, 문자의 개수를 표시한다. 영역이 활성화된 경우 (45 페이지의 8장 [마크] 참고), 영역에 해당하는 개수를 대신 표시한다.


C-x =포인트 다음에 문자의 문자 코드, 포인트의 문자 위치, 포인트의 열을 표시한다 (
what-cursor-position
).


M-x hl-line-mode 현재 행의 강조를 활성화 또는 비활성화한다. 86 페이지의 11.20절 [커서 디스플레이]를 참고한다.


M-x size-indication-mode 버퍼의 크기에 대한 자동 표시를 토글한다. 84 페이지의 11.18절 [선택적 모드 행]을 참고한다.


M-x what-line 은 에코 영역에 현재 행 번호를 표시한다. 현재 행 번호는 모드 행에 표시되기 때문에 이 명령어는 보통 불필요하다(8 페이지의 1.3절 [모드 행] 참고). 하지만 버퍼를 좁히면 모드 행은 접근 가능한 부분을 기준으로 하여 행 번호를 표시한다(73 페이지의 11.5절 [좁히기]). 반면
what-line
은 좁혀진 영역으로 기준으로 하는 행 번호와 전체 버퍼를 기준으로 하는 행 번호를 모두 표시한다.


M-= (count-words-region)은 영역 내 행, 워드, 문자의 개수를 보고하는 메시지를 표시한다(영역에 대한 설명은 45 페이지의 8장 [마크]를 참고). 접두 인자 C-u M-= 를 이용하면 전체 버퍼에 대한 계수를 표시한다.


M-x count-words 명령어도 동일한 일을 수행하지만 호출 규칙은 다르다. 이는 영역이 활성화된 경우 영역에 대한 계수를 표시하고, 활성화되지 않은 경우에는 버퍼에 대한 계수를 표시한다.


명령어 C-x = (
what-cursor-position
)는 현재 커서 위치와 해당 위치에서 버퍼 내용에 대한 정보를 보여준다. 이는 에코 영역에 아래와 같이 생긴 행을 표시한다:
Char: c (99, #o143, #x63) point=28062 of 36168 (78°/.) column=53


'
Char:
' 다음에는 버퍼 내 포인트에 있는 문자를 표시한다. 괄호 안의 텍스트는 해당 10진, 8진, 16진 문자 코드를 표시하는데, C-x= 가 문자 정보를 어떻게 표시하는지에 대한 정보는 177 페이지의 19.1절 [국제 문자]를 참고한다. '
point=
' 다음은 문자 계수로서 포인트의 위치다(버퍼 내 첫 번째 문자는 위치
1
이고, 두 번째 문자는 위치
2
이며, 이와 같은 방식으로 계속된다.) 그 이후 숫자는 버퍼 내 총 문자 개수이며, 괄호 속 숫자는 위치의 총 비율을 나타낸다. '
column=
' 다음은 창의 좌측 가장자리부터 시작되는 열에서 포인트의 가로 위치이다.


버퍼가 좁아져 시작과 끝에 텍스트 일부를 일시적으로 접근할 수 없는 상태라면 C-x = 는 현재 접근할 수 있는 범위를 설명하는 추가 텍스트를 표시한다. 아래를 예로 들 수 있겠다:

Char: C (67, #o103, #x43) point=252 of 889 (28/) <231-599> column=0


두 개의 추가 숫자는 포인트의 추측(assume)이 허용되는 최소 및 최대 문자 위치를 제공한다. 두 위치 사이의 문자는 접근 가능한 문자들이다. 73 페이지의 11.5절 [좁히기]를 참고한다.


수치적 인자

수학과 계산 용어에서 인자란 "연산 또는 함수에 제공된 데이터"를 의미한다. 어떤 Emacs 명령어든 수치적 인자(접두 인자라고도 부름)를 부여할 수 있다. 일부 명령어는 인자를 반복 계수로 해석한다. 예를 들어, C-f 에 10의 인자를 부여하면 1개 문자 대신 10개 문자만큼 포인트를 앞으로 이동시킨다. 이러한 명령어들을 이용하면 어떤 인자도 1의 인자와 동일하지 않고, 음의 인자는 반대 방향으로 이동하거나 행동하도록 야기한다.


수치적 인자를 명시하는 가장 수월한 방법은 META 키를 누르는 동안 숫자와 마이너스 부호를 입력하는 방법이다. 예를 들어,


M-5 C-n


위와 같이 입력하면 5행을 아래로 이동시킨다. M, M-1, M-2 식의 키는 다음 명령어에 대한 인자를 설정하는 명령어에 (
digit-argument
negative-argument
) 바인딩되어 있다. 숫자가 없는 M-- 은 주로 -1 을 의미한다.


하나 이상의 숫자를 입력할 경우 두 번째와 잇따른 숫자에 대해 META 키를 누를 필요가 없다. 따라서 50개 행 아래로 이동할 경우 아래와 같이 타이핑한다.


M-5 0 C-n


이는 '0'의 복사본을 5개 삽입하는 것이 아니라, 예상대로 한 행을 아래로 이동시키는데, '0'은 접두 인자의 일부로 취급된다. ('0'의 5개 복사본을 삽입하길 원할 때는 어떨까? M-5 C-u 0 을 타이핑하라. 여기서 C-u 는 접두 인자를 "종료"하므로, 그 다음에 오는 키 누름은 사용자가 실행하길 원하는 명령어를 시작한다. C-u 의 의미는 이 경우에만 적용됨을 주목한다. 일반적인 C-u 의 역할은 아래를 참고한다.)


M-1, M-2 등을 타이핑하는 대신 수치적 인자를 명시하는 또 다른 방법은 C-u (
universal-argument
) 다음에 몇 개의 숫자 또는 (음의 인자의 경우) 마이너스 부호 다음에 숫자를 타이핑하는 방법이 있다. 숫자 없이 마이너스 부호만 입력할 경우 보통 -1를 의미한다.


C-u 는 "네 번"이라는 특별한 의미를 지니므로 다음(next) 명령어에 대한 인자에 4를 곱한다. C-u C-u 는 그에 16을 곱한다. 따라서 C-u C-u C-f 는 16개의 문자만큼 앞으로 이동시킨다. 그 외 유용한 조합으로는 C-u C-n, C-u C-u C-n (양호한 화면 비율만큼 아래로 이동), C-u C-u C-o ("아주 많은" 빈 행 생성), C-u C-k (4개의 행을 삭제)가 있다.


스스로 삽입되는 문자 앞에 수치적 인자를 이용해 다수의 복사본을 삽입할 수도 있다. 이는 문자가 숫자가 아닌 경우에 매우 간단한데, 가령 C-u 6 4 a 는 'a' 문자의 64개 복사본을 삽입한다. 하지만 숫자의 삽입에는 적용되지 않고, C-u 6 4 1 는 641의 인자를 명시한다. 인자를 숫자와 구분하여 또 다른 C-u 를 이용해 삽입할 수도 있는데, 가령 C-u 6 4 C-u 1 은 '1' 문자의 복사본 64개를 삽입한다.


일부 명령어는 하나의 인자가 있는지만 신경 쓰고 그 값은 무시한다. 예를 들어, M-q (
fill-paragraph
) 명령어는 텍스트를 채우고, 그 인자를 이용해 텍스트 역시 정당화한다(M-q에 관한 추가 정보는 212 페이지의 22.5절 [채우기]를 참고). 이러한 명령어들의 경우, 하나의 C-u 로 인자를 명시하기에 충분하다.


일부 명령어는 인자의 값을 반복 계수로 사용하지만 인자가 없을 경우 특별한 무언가를 실행한다. 예를 들어, 인자가 n인 명령어 C-k (
kill-line
)는 끝나는(terminating) 행을 포함해 n개 행을 삭제(kill)한다. 하지만 인자가 없는 C-k 는 특별한데, 다음 새 행까지 텍스트를 삭제하거나, 포인트가 행의 바로 끝에 있을 경우 새 행 자체를 삭제하기 때문이다. 따라서 인자가 없는 C-k 명령어가 두 개일 경우 1을 인자로 한 C-k 명령어와 같이 비지 않은 행을 삭제한다. (C-k에 관한 추가 정보는 52 페이지의 9장 [제거하기]를 참고).


일부 명령어는 보통 C-u 를 일반 인자와 다르게 취급한다. 또 다른 몇몇 명령어는 마이너스 부호의 인자만 -1의 인자와 다르게 취급할지도 모른다. 이런 드문 사례들은 본문에서 나타날 때 설명할 것인데, 이는 각 명령어를 더 편리하게 만들기 위해 존재하며, 해당 명령어의 문서화 문자열에 문서화된다.


접두 인자라는 용어는 명령어 앞에 그러한 인자를 타이핑한다는 사실을 강조하고, 명령어를 호출한 후에 입력되는 미니버스 인자로부터 이를 구별하기 위해 사용한다(26 페이지의 5장 [미니버퍼] 참고).


명령어 반복하기

단일 키 또는 M-x command-name RET 를 이용해 호출되는 많은 단순 명령어들은 반복 계수 역할을 하는 수치적 인자를 이용해 호출함으로써 반복할 수 있다(23 페이지의 4.10절 [인자] 참고). 하지만 반복하길 원하는 명령어가 입력을 요구하거나 다른 방식으로 수치적 인자를 사용할 경우 이런 방법은 효과가 없을 것이다.


명령어 C-x z (
repeat
)은 Emacs 명령어를 여러 번 반복하는 또 다른 방법을 제공한다. 이 명령어는 이전 Emacs 명령어가 무엇이었든 해당 명령어를 반복한다. 명령어를 반복하면 이전에 사용된 것과 동일한 인자를 사용하지, 매번 새로운 인자를 읽지 않는다.


명령어를 한 번 이상 반복하기 위해서는 z를 추가로 타이핑하는데, 각 z는 명령어를 한 번 이상 반복한다. 반복은 사용자가 z 이외의 문자를 타이핑하거나 마우스 버튼을 누르면 끝이 난다.


예를 들어, C-u 2 0 C-d 라고 타이핑하면 20개의 문자를 삭제한다고 가정하자. 해당 명령어는 (인자 포함) 추가로 세 번 반복할 수 있으며, 그럴 경우 C-x z z z 를 타이핑하면 80개의 문자가 삭제된다. 첫 C-x 는 명령어를 한 번 반복하고, 잇따른
z
는 다시 한 번 반복한다.



Notes