GNUEmacsManual:10

From 흡혈양파의 번역工房
Revision as of 09:04, 26 March 2016 by Onionmixer (talk | contribs) (GNU Emacs 10장 내용 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
레지스터

레지스터

Emacs 레지스터는 텍스트, 직사각형, 그 외 다른 것들을 향후에 사용할 수 있도록 저장하는 장소다. 텍스트 또는 직사각형을 레지스터에 저장하고 나면 버퍼로 한 번 또는 여러 번 복사가 가능하고, 위치를 레지스터에 저장하면 해당 위치로 한 번 또는 여러 번 점프할 수 있다.


모든 레지스터는 단일 문자로 구성된 이름을 가지며 본문에서는 r 로 표기할 것인데, r은 문자(예: '

a'

) 또는 숫자('

1

')가 될 수 있고, 대, 소문자를 구별하기 때문에 레지스터 '

a

'는 레지스터 '

A

'와 다르다.


레지스터는 위치, 텍스트 조각, 직사각형, 숫자, 창 설정, 파일명을 저장할 수 있지만 주어진 시간에 하나만 저장 가능하다. 레지스터에 저장하는 내용은 해당 레지스터에 다른 내용을 저장하기 전까지 유지된다. 레지스터 r이 포함하는 내용을 확인하려면 M-x view-register를 사용한다:


M-x view-register RET r 레지스터 r 이 포함하는 내용에 대한 설명을 표시한다.


레지스터의 입력을 요하는 모든 명령어는 약간의 지연 시간 후에 이미 존재하는 레지스터를 열거하는 "미리보기" 창을 표시할 것이다. 지연 시간을 변경하고 싶다면

register-preview-delay

를 설정한다. 이 표시를 막기 위해서는 옵션을

nil

로 설정한다. C-h 또는 F1 을 누르면 미리보기 창을 직접 요청할 수 있다.


북마크는 파일과 위치를 그 안에 기록하므로 추후 파일을 다시 볼 때 위치로 돌아갈 수 있다. 북마크는 레지스터와 기본이 비슷하여 이번 장에서 다루도록 하겠다.


레지스터에 위치 저장하기

C-x r SPC r 현재 버퍼와 포인트의 위치를 레지스터 r 에 기록한다(

point-to-register

).


C-x r j r 레지스터 r 에 저장된 버퍼와 위치로 점프한다(

jump-to-register

).


C-x r SPC (

point-to-register

)를 입력한 다음

r

문자를 입력하면 현재 버퍼와 포인트의 위치를 레지스터 r 에 저장한다. 사용자가 레지스터에 다른 내용을 저장할 때까지 그 정보를 유지한다.


C-x r j r 명령어는 레지스터 r 에 기록된 버퍼로 전환하고, 포인트를 기록된 위치로 이동시킨다. 레지스터의 내용은 변경되지 않으니 저장된 위치로 원하는 횟수만큼 점프할 수 있다.


C-x r j 를 이용해 저장된 위치로 이동하되 위치를 저장시킨 버퍼가 제거된 경우 C-x r j 는 동일한 파일을 방문하여 버퍼를 다시 생성하려고 시도한다. 물론 파일에 방문한 버퍼에만 해당하는 일이다.


레지스터에 텍스트 저장하기

텍스트의 동일한 부분의 복사본을 여러 번 삽입하고자 할 때는 킬 링으로부터 붙여넣는 것이 편리한데, 잇따른 킬 명령어는 링에서 엔트리를 아래방향으로 이동시키기 때문이다. 이 방법 외에 텍스트를 레지스터에 저장하여 후에 인출하는 방법이 있다.


C-x r s r 영역을 레지스터 r 에 복사한다(

copy-to-register

).


C-x r i r 레지스터 r 로부터 텍스트를 삽입한다(

insert-register

).


M-x append-to-register RET r 레지스터 r 뒤에 영역을 덧붙인다.


레지스터 r 이 텍스트를 포함한 경우 C-x r + (increment-register)를 이용해 해당 레지스터 뒤에 추가할 수 있다. r 이 숫자를 포함한 경우 C-x r + 명령어는 다르게 행동할 수 있다. 66 페이지의 10.5절 [숫자 레지스터]를 참고한다.


M-x prepend-to-register RET r 영역을 레지스터 r 내 텍스트 앞에 덧붙인다.


C-x r s r 은 영역의 텍스트의 사본을 r 이라는 레지스터에 보관한다. 마크가 비활성화된 경우 Emacs는 먼저 마지막으로 설정된 위치의 마크를 재활성화한다. 마크는 이 명령어 끝에서 비활성화된다. 상세한 내용은 45 페이지의 8장 [마크]를 참고한다. 접두 인자가 있는 동일한 명령어인 C-u C-x r s r 은 텍스트를 레지스터 r 로 복사하고 버퍼에서도 텍스트를 삭제하기 때문에 영역을 레지스터로 "이동"시키는 과정으로 생각하면 되겠다.


M-x append-to-register RET r 은 영역 내 텍스트의 복사본을 r 로 명명된 레지스터에 이미 저장된 텍스트 뒤에 추가한다. 접두 인자와 함께 호출할 경우 레지스터 뒤에 덧붙인 후에 영역을 삭제한다.

prepend-to-register

명령어도 유사하지만 영역 텍스트를 레지스터 안의 텍스트 뒤에 덧붙이는(append) 대신 텍스트 앞에 덧붙인다(prepend).


append-to-register

prepend-to-register

를 이용해 텍스트를 수집할 때는 구분자(separator)를 이용해 수집된 조각을 각각 구분하고자 할 것이다. 이런 경우

register-separator

를 구성하여 구분자 문자를 해당 레지스터에 저장한다. 예를 들어 수집 과정에서 이중 새 행을 텍스트 구분자로 얻기 위해서는 다음과 같은 설정을 사용할 수 있다.


(setq register-separator ?+) 
(set-register register-separator "\n\n")


C-x r i r 은 레지스터 r 로부터 텍스트를 버퍼에서 삽입한다. 주로 텍스트 앞에 포인트를 남겨두며, 마크를 활성화하지 않고 마크를 텍스트 뒤로 설정한다. 수치적 인자를 이용하면 포인트는 텍스트 뒤에, 마크는 텍스트 앞에 둔다.


레지스터에 직사각형 저장하기

레지스터는 선형 텍스트 대신 직사각형을 포함할 수 있다. 버퍼에서 직사각형을 명시하는 방법에 관한 기본 정보는 60 페이지의 9.5절 [직사각형]을 참고한다.


C-x r r r 직사각형 영역을 레지스터 r 에 복사한다(

copy-rectangle-to-register

). 수치적 인자를 이용해 삭제 역시 가능하다.


C-x r i r 레지스터 r 에 저장(직사각형을 포함할 경우)된 직사각형을 삽입한다(

insert-register

).


64 페이지의 10.2절 [텍스트 레지스터]에서 이미 논한 바 있는 C-x r i r (

insert-register

) 명령어는 레지스터가 직사각형을 포함할 경우 텍스트 문자열 대신 직사각형을 삽입한다.


레지스터에 창 설정 저장하기

선택된 프레임의 창 설정은 물론이고 모든 프레임의 모든 창 설정까지 레지스터에 저장하여 이후에 설정을 복구시킬 수 있다. 창 설정에 관한 정보는 156 페이지의 17장 [창]을 참고한다.


C-x r w r 선택된 프레임의 창 상태를 레지스터 r 에 저장한다(

window-configuration-to-register

).


C-x r f r 모든 프레임의 상태와 프레임의 창의 상태를 레지스터 r 에 저장한다(

frameset-to-register

).


창 또는 프레임 설정을 복구하기 위해서는 C-x r j r 을 사용한다. 이는 커서 위치를 복구시키는 데에 사용되는 것과 동일한 명령어다. 프레임 설정을 복구할 때는 설정에 포함되지 않은 기존 프레임들은 표시되지 않을 것이다. 이러한 프레임을 삭제하려면 C-u C-x r j r 을 사용한다.


레지스터에 숫자 보관하기

레지스터에 숫자를 보관하고 버퍼 내에 숫자를 십진수로 삽입하며 숫자를 증가시키는 명령어들이 존재한다. 이러한 명령어들은 키보드 매크로에서 유용하게 사용할 수 있다(114 페이지의 14장 [키보드 매크로] 참고).


C-u number C-x r n r 숫자를 레지스터 r 에 보관한다(

number-to-register

).


C-u number C-x r + r r 이 숫자를 포함하는 경우 해당 레지스터에서 숫자를 number만큼 증가시킨다. r 이 텍스트를 포함할 경우 C-x r + (

increment-register

) 명령어는 다르게 행동함을 주목한다. 64 페이지의 10.2절 [텍스트 레지스터]를 참고한다.


C-x r i r 레지스터 r 로부터 숫자를 버퍼에 삽입한다.


C-x r i 는 다른 유형의 레지스터 내용을 버퍼로 삽입할 때 사용하는 명령어와 동일한 명령어다. 수치적 인자 없이 C-x r + 를 사용하면 레지스터 값을 1씩 증가시키고, 수치적 인자 없이 C-x r n 을 사용하면 레지스터에 0을 저장한다.


레지스터에 파일명 보관하기

특정 파일명을 자주 방문할 경우 그 이름을 레지스터에 넣어두면 더 편리하게 방문할 수 있다. 파일 이름을 레지스터 r에 넣는 데에 사용할 수 있는 Lisp 코드는 다음과 같다:


(set-register r '(file . name))


가령 다음과 같이 사용하면


(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))


표시된 파일명을 레지스터 'z'에 넣는다.


레지스터 r에 이름이 보관된 파일을 방문하려면 C-x r j r 를 입력한다. (이는 위치로 점프하거나 프레임 설정을 복구하는 데에 사용되는 것과 동일한 명령어다.)


키보드 매크로 레지스터

키보드 매크로를 자주 실행해야 한다면 (114 페이지의 14장 [키보드 매크로] 참고) 레지스터에 넣거나 저장하는 것이 편리하다(118 페이지의 14.5절 [키보드 매크로 저장하기] 참고). C-x C-k x r (

kmacro-to-register

)는 마지막 키보드 매크로를 레지스터 r 에 보관한다.


레지스터 r 에서 키보드 매크로를 실행하려면 C-x r j r 라고 입력한다. (이는 위치로 점프하거나 프레임세트를 복구하는 데에 사용되는 것과 동일한 명령어다.)


북마크

북마크는 사용자가 점프할 수 있는 위치를 기록한다는 점에서 레지스터와 다소 비슷하다. 하지만 레지스터와 다르게 이름이 길고 하나의 Emacs 세션에서 다음 세션으로 자동으로 계속된다는 점에서 차이가 있다. 북마크는 일반적으로 다양한 파일에서 "사용자가 어디를 읽고 있는지" 기록하는 데에 사용된다.


C-x r m RET 방문한 파일에 대한 북마크를 포인트에 설정한다.


C-x r m bookmark RET Bookmark로 명명된 북마크를 포인트에 설정한다(

bookmark-set

).


C-x r b bookmark RET Bookmark로 명명된 북마크로 점프한다(

bookmark-jump

).


C-x r l 모든 북마크를 열거한다(

list-bookmarks

).


M-x bookmark-save 최근 북마크 값을 모두 기본 북마크 파일에 저장한다.


북마크는 주로 여러 개의 파일 각각에 현재 하나의 위치를 기록하는 데에 사용되는 것이 보통이다. 따라서 북마크를 설정하는 명령어 C-x r m 은 방문한 파일명을 북마크 이름의 기본값으로 사용한다. 북마크가 가리키는 파일의 이름을 따서 북마크를 명명하면 C-x r b 를 이용해 파일로 편리하게 재방문하는 동시 북마크의 위치로 이동할 수 있다.


모든 북마크 목록을 각 버퍼에 따로 표시하기 위해서는 C-x r l (

list-bookmarks

)라고 입력한다. 해당 버퍼로 전환할 경우 북마크 정의를 편집하거나 북마크의 주석을 다는 데에 사용할 수 있다. 특수 편집 명령어에 관한 정보는 북마크 버퍼에서 C-h m 이라고 입력하면 확인 가능하다.


북마크 값을 변경했다면 Emacs를 종료 시 Emacs가 북마크를 저장한다. M-x bookmark-save 명령어를 이용하면 언제든지 북마크를 저장할 수도 있다. 북마크는

~/.emacs.d/bookmarks

란 파일에 저장된다(기존 Emacs 버전들과 호환성을 위해

~/.emacs.bmk

라는 파일이 있을 경우 이 파일이 대신 사용된다). 북마크 명령어는 사용자의 기본 북마크 파일을 자동으로 로딩한다. 이러한 저장 및 로딩이 바로 북마크가 하나의 Emacs 세션에서 다음 세션으로 연속하는 방법이다.


bookmark-save-flag

변수를

1

로 설정하면 북마크를 설정하는 각 명령어는 사용자의 북마크 역시 저장할 것인데, 그래야만 Emacs가 충돌하더라도 사용자의 북마크 값이 손실되지 않는다. 값이 숫자일 경우 북마크의 마지막 저장부터 북마크에 얼마나 많은 수정이 이루어졌는지 의미한다. 이 변수를

nil

로 설정할 경우 사용자가 M-x bookmark-save 를 직접 사용해야만 Emacs가 북마크를 저장할 것이다.


bookmark-default-file

변수는 기본적으로 북마크를 저장할 파일을 명시한다.


북마크 위치 값은 주위 컨텍스트를 이용해 저장되어

bookmark-jump

를 이용하면 파일이 약간 수정되더라도 적절한 위치를 찾을 수 있다.

bookmark-search-size

변수는 북마크 위치의 각 측면마다 얼마나 많은 컨텍스트의 문자를 기록할 것인지를 알려준다.


아래는 북마크를 작업할 때 사용되는 몇 가지 추가 명령어들이다.


M-x bookmark-load RET filename RET 북마크 값의 목록을 포함하는 filename 이란 파일을 실행한다. 이 명령어와

bookmark-write

를 사용하면 사용자의 기본 북마크 파일뿐만 아니라 북마크 값의 다른 파일에 작업할 수 있다.


M-x bookmark-write RET filename RET 현재 북마크 값을 모두 filename 이란 파일에 저장한다.


M-x bookmark-delete RET bookmark RET bookmark 로 명명된 북마크를 삭제한다.


M-x bookmark-insert-location RET bookmark RET bookmark 로 명명된 북마크가 가리키는 파일명을 버퍼에 삽입한다.


M-x bookmark-insert RET bookmark RET bookmark 로 명명된 북마크가 가리키는 파일의 내용을 버퍼에 삽입한다.


Notes