GNUEmacsManual:14

From 흡혈양파의 번역工房
Jump to: navigation, search
키보드 매크로

키보드 매크로

이번 장에서는 편집 명령어 시퀀스를 어떻게 기록하여야 후에 편리하게 반복할 수 있는지 설명하고자 한다.


키보드 매크로는 키의 또 다른 시퀀스를 나타내기 위해 Emacs 사용자가 정의하는 명령어이다. 예를 들어, 사용자가 C-n M-d C-d 를 40번 입력할 것이라고 예상되면 C-n M-d C-d 를 실행하도록 키보드 매크로를 정의하여 작업 속도를 높인 후 39회를 더 실행하면 된다.


키보드 매크로는 명령어를 실행하고 기억함으로써, 즉 정의를 통해 정의된다. 다시 말하자면, 키보드 매크로를 정의할 때 정의가 처음으로 실행되는 것이다. 이 방식을 통해 사용자는 명령어의 효과를 확인하여 머릿속으로 굳이 알아내지 않아도 된다. 정의를 닫으면 키보드 매크로가 정의되어 한 번 실행이 끝난 상태일 것이다. 그리고 나면 매크로를 호출하여 모든 것을 다시 실행할 수 있다.


키보드 매크로는 Lisp보다는 Emacs 명령어 언어로 작성된다는 점에서 일반 Emacs 명령어와는 다르다. 따라서 초보자도 쉽게 작성할 수 있고, 임시 핵(hack)으로서 더 편리해진다. 하지만 Emacs 명령어 언어는 지능적이거나 일반적인 것을 작성하기에 유용할 정도로 강력한 프로그래밍 언어는 되지 못한다. 그러한 용도에는 Lisp를 사용해야 한다.


기본 용도

F3 키보드 매크로의 정의를 시작한다(
kmacro-start-macro-or-insert-counter
).


F4 키보드 매크로가 정의되고 있다면 정의를 끝내고, 그렇지 않다면 가장 최근 키보드 매크로를 실행한다(
kmacro-end-or-call-macro
).


C-u F3 마지막 키보드 매크로를 재실행하고 그 정의 뒤에 키를 추가한다.


C-u C-u F3 마지막 키보드 매크로를 재실행하지 않고 그 뒤에 키를 추가한다.


C-x C-k r 영역에서 시작하는 행마다 마지막 키보드 매크로를 실행한다(
apply-macro-to-region-lines
).


키보드 매크로의 정의를 시작하기 위해선 F3 을 입력한다. 그리고 나면 키는 계속해서 실행되지만 매크로 정의의 일부가 되기도 한다. '
Def
' 가 모드 행에 나타나면서 무슨 일이 일어나고 있는지 상기해준다. 끝마치고 나면 F4 를 입력하여 (
kmacro-end-or-call-macro
) 정의를 종료한다. 아래를 예로 들면,


F3 M-f foo F4


한 단어를 앞으로 이동시킨 후 '
foo
'를 삽입하는 매크로를 정의한다. F3F4 는 매크로의 일부가 되지 않음을 주목한다.


매크로를 정의하고 나면 F4 를 이용해 호출할 수 있다. 위의 예제에서 F4 를 이용하면 M-f foo 를 다시 입력하는 것과 동일한 효과를 갖는다. (F4 명령어의 두 가지 역할, 즉 사용자가 매크로를 정의하는 과정에 있을 때는 매크로를 종료하고, 그 외의 경우는 마지막 매크로를 호출하는 역할을 수행함을 주목한다.) 수치적 접두 인자 '
n
' 과 함께 F4 를 제공할 수도 있는데, 매크로를 '
n
' 회만큼 호출함을 의미한다. 인자가 0이면 오류가 나거나 사용자가 C-g (MS-DOS에서는 C-BREAK)를 입력할 때까지 무기한으로 매크로를 반복한다.


위의 예제는 키보드 매크로를 손쉽게 이용하는 방법을 보여주는데, 텍스트에 주기적으로 빈(spaced) 위치에 연산을 반복하고 싶다면 움직임 명령어를 매크로의 일부로 포함한다. 이런 경우 매크로를 반복하면 잇따른 단어마다 '
foo
'라는 문자열을 삽입할 것이다.


키보드 매크로 정의를 종료하고 나면 C-u F3 을 입력하여 그 정의 뒤에 더 많은 키 누름을 추가할 수 있다. 이는 일반적인 F3 을 사용한 다음 지금까지의 전체 정의를 다시 입력하는 것과 동일하다. 그러면 이전에 정의된 매크로를 재실행되는 결과가 발생한다.
kmacro-execute-before-append
변수를
nil
로 변경하면 기존 매크로는 그 뒤에 추가되기 전에 재실행되지 않을 것이다(기본값
t
). C-u C-u F3 을 입력하면 마지막 키보드 매크로를 재실행하지 않고 그 정의의 끝으로 추가가 가능하다.


명령어가 미니버퍼를 이용해 인자를 읽으면 미니버퍼 입력이 명령어와 함께 매크로의 일부가 된다. 따라서 매크로를 재실행하면 명령어는 사용자가 매크로를 입력할 때와 동일한 인자를 얻게 된다.


F3 C-a C-k C-x b foo RET C-y C-x b RET F4


가령 위는 현재 행을 제거하여 버퍼 '
foo
'로 덧붙인 후 본래 버퍼로 돌아가는 매크로를 정의한다.


대부분의 키보드 명령어는 키보드 매크로 정의에서와 마찬가지로 작동하는데 몇 가지 예외가 있다. C-g (
keyboard-quit
)를 입력하면 키보드 매크로 정의를 그만둔다. C-M-c (
exit-recursive-edit
)라고 입력하면 신뢰할 수가 없는 것이, 예상대로 매크로 내에서 시작된 재귀적 편집을 종료하는 것처럼 작동하지만 만일 사용자가 키보드 매크로를 호출하기 전에 시작된 재귀적 편집을 종료한다면 키보드 매크로 역시 종료시켜야 하기 때문이다. 마우스 이벤트도 키보드 매크로에서 사용할 수 있다 하더라도 신뢰할 수는 없는데, 매크로가 마우스 이벤트를 재실행할 때는 해당 이벤트의 원래 마우스 위치, 즉 사용자가 매크로를 정의할 때 마우스가 갖고 있던 위치를 사용하기 때문이다. 그 효과는 예측하기가 힘들 것이다.


C-x C-k r (
apply-macro-to-region-lines
) 명령어는 영역에서 시작하는 각 행에서 마지막으로 정의된 키보드 매크로를 반복한다. 행마다 행의 시작에서 마우스를 이동시켜 매크로를 실행한다.


위에서 설명한 F3F4 명령어 외에도 Emacs는 키보드 매크로를 정의하고 실행하는 오래된 키 바인딩 집합을 지원한다. 매크로 정의를 시작하려면 C-x ( (
kmacro-start-macro
)를 입력하는데, F3 과 마찬가지로 접두 인자는 이 정의를 마지막 키보드 매크로 뒤에 추가한다. 매크로 정의를 끝마치려면 C-x ) (
kmacro-end-macro
)를 입력한다. 가장 최근 매크로를 실행하려면 C-x e (
kmacro-end-and-call-macro
)를 입력한다. 매크로를 정의하는 동안 C-x e 를 입력하면 매크로가 종료되고 즉시 실행된다. C-x e 를 입력한 직후에 반복하여 입력하면 매크로를 한 번 또는 그 이상 반복할 수 있다. F4 와 마찬가지로 C-x e 에도 반복 인자를 부여할 수 있다.


C-x ) 에는 반복 계수를 인자로 제공할 수 있다. 이는 매크로를 정의한 직후에 반복할 수 있음을 의미한다. 사용자가 매크로를 정의하는 동안 실행되기 때문에 매크로 정의 자체를 첫 번째 반복으로 취급하므로 C-u 4 C-x ) 는 매크로를 즉시 3회 더 실행한다.


키보드 매크로 링

정의된 모든 키보드 매크로는 키보드 매크로 링에 기록된다. 키보드 매크로 링은 하나만 존재하며, 모든 버퍼가 공유한다.


C-x C-k C-k 링의 헤드에서 키보드 매크로를 실행한다(
kmacro-end-or-call-macro-repeat
).


C-x C-k C-n 키보드 매크로 링을 다음 매크로(이전에 정의된)로 회전한다(
kmacro-cycle-ring-next
).


C-x C-k C-p 키보드 매크로 링을 이전 매크로(이후에 정의된)로 회전한다(
kmacro-cycle-ring-previous
).


키보드 매크로 링에서 작용하는 모든 명령어는 동일한 C-x C-k 접두어를 사용한다. 이러한 명령어 대부분은 C-x C-k 접두어를 반복하지 않고 각자가 실행된 직후에 반복된다. 가령,


C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d


위는 키보드 매크로 링을 "두 번째 이전" 매크로로 회전하고, 결과 헤드 매크로를 3회 실행하며, 원래 헤드 매크로로 다시 회전하여 한 번 실행하고, "이전" 매크로로 회전하여 실행한 후 매크로 링으로부터 삭제한다.


C-x C-k C-k (
kmacro-end-or-call-macro-repeat
) 명령어는 매크로 링의 헤드에서 키보드 매크로를 실행한다. 사용자가 다른 C-k 를 입력한 직후에 매크로를 반복할 수도 있고, C-n 또는 C-p 를 입력한 직후에 매크로 링을 회전할 수 있다.


키보드 매크로가 정의될 때 C-x C-k C-kF4 와 같이 행동하는데, 실행 직후에 사용자가 C-x C-k 접두어 없이 이 절(section)에 실린 대부분 키 바인딩을 사용할 수 있다는 점을 제외된다. 예를 들어 C-k 를 다시 호출하면 매크로를 재실행할 것이다.


C-x C-k C-n (
kmacro-cycle-ring-next
)와 C-x C-k C-p (
kmacro-cycle-ring-previous
) 명령어는 매크로 링을 회전시켜 다음 또는 이전 키보드 매크로를 매크로 링의 헤드로 가져온다. 새로운 헤드 매크로 정의가 에코 영역에 표시된다. 원하는 매크로가 링의 헤드에 위치할 때까지 C-nC-p 만 반복하여 매크로 링을 즉시 계속해서 회전시킬 수 있다. 새로운 매크로 링 헤드를 즉시 실행하려면 C-k 라고 입력한다.


Emacs는 매크로 링의 헤드를 "마지막으로 정의된 키보드 매크로"로 취급함을 주목한다. 예를 들어 F4 는 해당 매크로를 실행하고, C-x C-k n 은 그에 이름을 부여할 것이다.


키보드 매크로 링에 보관되는 최대 매크로 수는 맞춤화 가능한 변수
kmacro-ring-max
로 결정된다.


키보드 매크로 카운터

키보드 매크로마다 그와 관련된 카운터를 갖고 있는데, 사용자가 매크로 정의를 시작하면 0으로 초기화된다. 이 카운터는 매크로가 호출되는 횟수에 따라 버퍼로 숫자를 삽입하도록 해준다. 값이 버퍼로 삽입될 때마다 카운터는 증가한다.


F3 키보드 매크로 정의에서 키보드 매크로 카운터 값을 버퍼로 삽입한다(
kmacro-start-macro-or-insert-counter
). C-x C-k C-I 키보드 매크로 카운터 값을 버퍼에 삽입한다(
kmacro-insert-counter
). C-x C-k C-c 키보드 매크로 카운터를 설정한다(
kmacro-set-counter
). C-x C-k C-a 접두어 arg를 키보드 매크로 카운터에 추가한다(
kmacro-add-counter
). C-x C-k C-f 키보드 매크로 카운터를 삽입하기 위한 포맷을 명시한다(
kmacro-set-format
).


키보드 매크로를 정의할 때 명령어 F3 은 (
kmacro-start-macro-or-insert-counter
) 키보드 매크로의 카운터의 현재 값을 버퍼로 삽입하고, 카운터를 1씩 증가시킨다. (매크로를 정의하고 있지 않다면 F3 은 매크로 정의를 대신 시작한다. 114 페이지의 14.1절 [기본 키보드 매크로]를 참고한다.) 수치적 접두 인자를 이용하면 증가 수를 따로 명시할 수 있다. C-u 접두어를 명시하면 0씩 증가함을 의미하며 현재 카운터 값을 변경하지 않고 삽입한다.


숫자가 매겨진 목록을 빌드 시 키보드 매크로 카운터를 사용하는 법을 예로 들어보겠다. 다음 키 시퀀스를 고려해보자:


F3 C-a F3 . SPC F4


키보드 매크로 정의의 일부로 '
0.
' 문자열이 현재 행의 시작에 삽입되었다. 이제 버퍼의 다른 곳으로 이동하여 F4 를 입력해 매크로를 호출하면 '
1.
' 문자열이 해당 행의 시작에 삽입된다. 잇따라 호출하면 '
2.
', '
3.
' 식으로 삽입된다.


C-x C-k C-i (
kmacro-insert-counter
) 명령어도 F3과 동일한 일을 수행하지만 키보드 매크로 정의 외부에서 사용될 수도 있다. 정의되거나 실행되는 키보드 매크로가 없다면 키보드 매크로 링의 헤드에 삽입하여 매크로 카운터를 증가시킨다.


C-x C-k C-c (
kmacro-set-counter
) 명령어는 현재 매크로 카운터를 수치적 인자의 값으로 설정한다. 이것을 매크로 내부에서 사용할 경우 매크로의 반복마다 작동한다. 매크로를 실행하면서 C-u 만 접두어로 명시하면 매크로의 현재 반복이 시작될 때 값으로 카운터를 리셋한다(이번 반복에서 지금까지 증가된 값은 실행 취소된다).


C-x C-k C-a (
kmacro-add-counter
) 명령어는 현재 매크로 카운터로 접두 인자를 추가한다. C-u 만 인자로 이용하면 키보드 매크로가 삽입한 마지막 값으로 카운터를 리셋한다. (보통 이를 사용하면 마지막 삽입이 동일한 매크로에 위치하고 동일한 카운터가 될 것이다.)


C-x C-k C-f (
kmacro-set-format
) 명령어는 매크로 카운터를 삽입 시 사용할 포맷의 입력을 요구한다. 기본 포맷은 '
%d
'로, padding 없이 숫자를 십진수로 삽입함을 의미한다. 빈 미니비퍼를 이용해 종료하여 포맷을 이 기본값으로 리셋하면 된다.
format
함수가 허용하면서 단일 정수로 된 추가 인자가 허용되는 포맷 문자열이라면 무엇이든 명시할 수 있다(The Emacs Lisp Reference Manual의 "Formatting Strings" 절 참고). 미니버퍼에 포맷 문자열을 삽입할 때는 큰따옴표에 문자열을 넣지 않도록 한다.


정의되거나 실행되는 키보드 매크로가 없을 때 이 명령어를 사용하면 새로운 포맷이 이후 모든 매크로 정의에 영향을 미친다. 기존 매크로는 그것이 정의될 때 실행 중이던 포맷을 계속해서 사용한다. 키보드 매크로를 정의하는 동안 포맷을 설정하면 이는 그 시점부터 정의되는 매크로에 영향을 미치지만 이후 매크로에는 영향을 미치지 않는다. 이 단계에서 매크로를 실행하면 해당 매크로가 정의되는 동안 그 단계에서 시행 중이던 포맷을 사용한다. 매크로의 실행 중에 매크로 포맷에 일어나는 변경 사항은 그것을 정의하는 동안 일어나는 변경 사항과 마찬가지로 이후 매크로에 어떠한 영향도 미치지 않는다.


C-x C-k C-f 로 설정된 포맷은 레지스터에 보관된 번호 삽입에 영향을 미치지 않는다.


레지스터를 카운터로 사용하여 매크로의 반복마다 카운터를 증가시키면 키보드 매크로 카운터와 동일한 결과를 얻는다. 66 페이지의 10.5절 [숫자 레지스터]를 참고한다. 대부분의 경우 키보드 매크로 카운터를 사용하는 편이 더 간단하다.


변형체를 이용해 매크로 실행하기

키보드 매크로에서 사용자는
query-replace
의 것과 비슷한 효과를 만들어 내기 때문에 매크로는 사용자에게 매번 변경내용을 적용할 것인지 물을 것이다.


C-x q 매크로 실행 중에 이 포인트에 접근하면 승인을 요청한다(
kbd-macro-query
).


매크로를 정의하는 도중에 쿼리의 발생을 원하는 포인트에서 C-x q 를 입력한다. 매크로를 정의하는 도중에 C-x q 를 실행하면 아무 일도 발생하지 않지만 매크로를 후에 실행할 때 C-x q 를 실행하면 계속하길 원하는지 대화형 질문을 할 것이다.


C-x q 가 질문할 때 유효한 응답은 다음과 같다:


SPC (또는 y) 키보드 매크로 실행을 계속한다.


DEL (또는 n) 이번 매크로 반복의 나머지를 건너뛰고 다음 반복을 즉시 시작한다.


RET (또는 q) 이번 매크로 반복의 나머지를 건너뛰고 이후 반복을 모두 취소한다.


C-r 매크로에 속하지 않는 편집을 실행할 수 있는 재귀적 편집 수준으로 들어간다. C-M-c 를 이용해 재귀적 편집의 종료를 시도하면 키보드 매크로를 어떻게 계속할 것인지 질문할 것이다. 이 때 SPC 를 입력하면 매크로 정의의 나머지가 실행된다. 나머지 매크로가 사용자가 원하는 대로 수행할 수 있도록 포인트와 텍스트를 남겨두는 것은 전적으로 사용자의 선택에 달려 있다.


수치적 인자가 있는 C-x q 에 해당하는 C-u C-x q 는 완전히 다른 함수를 실행한다. 이는 사용자가 매크로를 정의할 때나 매크로에서 실행할 때 모두 키보드에서 입력값을 읽는 재귀적 편집에 들어간다. 정의 중에 사용자가 재귀적 편집에서 수행하는 편집은 매크로에 속하지 않는다. 매크로가 실행되는 동안 재귀적 편집은 각 반복마다 특수화된 편집을 실행할 기회를 제공한다. 404 페이지의 31.10절 [재귀적 편집]을 참고한다.


키보드 매크로 명명하기와 저장하기

C-x C-k n (Emacs 세션 기간 동안) 명령어 이름을 가장 최근에 정의된 키보드 매크로로 제공한다(
kmacro-name-last-macro
).


C-x C-k b 가장 최근에 정의된 키보드 매크로를 키 시퀀스로 바인딩한다(세션 기간 동안)(
kmacro-bind-to-key
).


M-x insert-kbd-macro 키보드 매크로 정의를 Lisp 코드로서 버퍼에 삽입한다.


추후 사용을 위해 키보드 매크로를 저장하고자 하는 경우 C-x C-k n (
kmacro-name-last-macro
)를 이용해 이름을 부여할 수 있다. 이는 미니버퍼를 이용해 인자로서 이름을 읽고, 해당 이름을 정의하여 마지막 키보드 매크로를 현재 폼으로 실행한다. (추후 이 매크로의 정의에 추가하더라도 매크로로서 이름의 정의를 수정하지 않을 것이다.) 매크로 이름은 Lisp 심볼(symbol)로, 이러한 방식으로 이름을 정의하면 M-x 를 이용해 호출하거나
global-set-key
를 이용해 키를 바인딩 시 유효한 명령어 이름으로 만들 수 있다(429 페이지의 33.3.1절 [키맵] 참고). 키보드 매크로가 아닌 사전 정의를 가진 이름을 명시할 경우 오류 메시지가 표시되고 아무 것도 변경되지 않는다.


C-x C-k b (
kmacro-bind-to-key
)를 이용한 다음 바인딩하고자 하는 키 시퀀스를 이용하면 마지막 키보드 매크로를 (현재 형태로) 키에 바인딩할 수 있다. 전역적 키맵에서 어떠한 키 시퀀스로든 바인딩이 가능하지만 대부분의 키 시퀀스는 이미 다른 바인딩을 갖고 있으므로 키 시퀀스를 주의 깊게 선택해야 한다. 이미 존재하는 바인딩(어느 키맵에서든)을 이용해 키 시퀀스에 바인딩을 시도할 경우 이 명령어는 기존 바인딩을 대체하기 전에 승인을 요청한다.


기존 바인딩의 오버라이드로 인한 문제를 피하기 위해 C-x C-k 0 부터 C-x C-k 9 까지, C-x C-k A 부터 C-x C-k Z 까지 키 시퀀스는 자체 키보드 매크로 바인딩용으로 예약된다. 사실 이러한 키 시퀀스 중 하나로 바인딩을 하기 위해서는 전체 키 바인딩보다는 숫자나 문자만 입력하여도 된다.


C-x C-k b 4


가령 위의 경우 마지막 키보드 매크로를 C-x C-k 4 키 시퀀스로 바인딩할 것이다.


매크로가 명령어 이름을 갖게 되면 사용자는 그 정의를 파일로 저장할 수 있다. 그리고 나면 다른 편집 세션에서 사용 가능하다. 먼저 정의를 저장하고자 하는 파일로 방문하라. 그리고 다음 명령어를 사용하라:


M-x insert-kbd-macro RET macroname RET


이것을 향후에 실행하면 지금과 동일한 정의를 가진 동일한 매크로를 정의할 Lisp 코드를 삽입한다. (
insert-kbd-macro
가 사용자를 위해 Lisp 코드를 작성하므로 굳이 이 작업을 위해 Lisp 코드를 이해할 필요는 없다.) 그리고 나서 파일을 저장한다. 나중에는
load-file
을 이용해 파일을 로딩할 수 있다(276 페이지의 24.8절 [Lisp 라이브러리] 참고). 저장한 파일이 init 파일
~/.emacs
라면 (437 페이지의 33.4절 [Init 파일] 참고) 매크로는 사용자가 Emacs 를 실행할 때마다 정의될 것이다.


insert-kbd-macro
에 수치적 인자를 제공하면 추가 Lisp 코드에서 사용자가 macroname으로 바인딩하는 키를 기록하도록 만들어 사용자가 파일을 로딩하면 매크로에 동일한 키가 재할당될 것이다.


키보드 매크로 편집하기

C-x C-k C-e 마지막으로 정의된 키보드 매크로를 편집한다(
kmacro-edit-macro
).


C-x C-k e name RET 이전에 정의된 키보드 매크로 name을 편집한다(
edit-kbd-macro
).


C-x C-k l 마지막 300개의 키 누름을 키보드 매크로로 편집한다(
kmacro-edit-lossage
).


마지막 키보드 매크로는 C-x C-k C-e 또는 C-x C-k RET (
kmacro-edit-macro
)를 입력하여 편집할 수 있다. 이는 버퍼에 매크로 정의를 포맷팅하고 그것을 편집하기 위한 특수화된 주 모드를 입력한다. C-h m 을 해당 버퍼에서 한 번 입력하면 매크로 편집 방법의 세부적인 내용을 표시한다. 편집이 완료되면 C-c C-c 를 입력한다.


C-x C-k e (
edit-kbd-macro
)를 입력하면 명명된 키보드 매크로 또는 키에 바인딩된 매크로를 편집할 수 있다. 매크로를 호출할 때 사용할 법한 키보드 입력에서도 마찬가지로 C-x e 또는 M-x name 이나 다른 키 시퀀스를 이용하면 된다.


C-x C-k l(
kmacro-edit-lossage
)을 입력함으로써 마지막 300개의 키 누름을 매크로로서 편집한다.


키보드 매크로의 순차적 편집

마지막 키보드 매크로를 한 번에 하나씩 대화형으로 재생하거나 편집하려면 C-x C-k SPC (
kmacro-step-edit-macro
)를 입력한다. q 또는 C-g 를 이용해 매크로를 중단하지 않는 이상 편집된 매크로가 매크로 링의 마지막 매크로를 대체한다.


이러한 매크로 편집 기능은 실행시킬 첫 (또는 그 다음) 명령어와 함께 미니버퍼 내 마지막 명령어를 표시하고, 어떤 행동을 취할 것인지 입력을 요구한다. 사용자가 ? 를 입력하면 옵션의 개요를 얻을 수 있다. 취할 수 있는 행동은 다음과 같다:


  • SPCy 는 현재 명령어를 실행하고, 키보드 매크로의 다음 명령어로 나아간다.
  • n, d, DEL 은 현재 명령어를 건너뛰고 삭제한다.
  • f 는 키보드 매크로의 이번 실행에서 현재 명령어를 건너뛰지만 매크로에서 삭제하지는 않는다.
  • TAB 은 현재 명령어와 함께 그 직후에 따르는 유사 명령어를 실행한다. 가령 TAB 을 이용해 문자 시퀀스(
    self-insert-command
    명령어의 시퀀스에 상응하는)를 삽입할 수 있다.
  • c 는 키보드 매크로 끝까지 실행을 계속한다(추가 편집 없이). 실행이 정상적으로 종료되면 편집된 매크로는 기존 키보드 매크로를 대체한다.
  • C-k 는 나머지 키보드 매크로를 건너뛰고 삭제하며, 단계 편집을 종료하고, 기존 키보드 매크로를 편집된 매크로로 대체한다.
  • qC-g 는 키보드 매크로의 단계 편집을 취소하고, 키보드 매크로에 적용된 변경 사항을 모두 버린다.
  • i key... C-j 는 일련의 키 시퀀스를 읽고 실행한 후 (마지막 C-j 는 포함하지 않음) 키보드 매크로에서 현재 명령어를 앞서지(advancing over) 않고 현재 명령어 앞에 삽입한다.
  • I key... 는 하나의 키 시퀀스를 읽고 실행하여 키보드 매크로에서 현재 명령어를 앞서지(advancing over) 않고 현재 명령어 앞에 삽입한다.
  • r key... C-j 는 일련의 키 시퀀스를 읽고 실행하여 (마지막 C-j 는 포함하지 않음) 키보드 매크로에서 현재 명령어를 해당 키 시퀀스로 대체하면서 삽입된 키 시퀀스를 앞선다.
  • R key... 는 하나의 키 시퀀스를 읽고 실행하여 키보드 매크로에서 현재 명령어를 해당 키 시퀀스로 대체하면서 삽입된 키 시퀀스를 앞선다.
  • a key... C-j 는 현재 명령어를 읽은 후 일련의 키 시퀀스를 읽고 실행하여 (마지막 C-j 는 포함하지 않음) 키보드 매크로에서 현재 명령어 다음에 삽입하며, 현재 명령어와 삽입된 키 시퀀스를 앞선다.
  • A key... C-j 는 키보드 매크로에서 나머지 명령어를 실행한 후 일련의 키 시퀀스를 읽고 실행하여 (마지막 C-j 는 포함하지 않음) 키보드 매크로 끝에 추가하며, 이후 단계 편집을 종료하고 기존 키보드 매크로를 편집된 매크로로 대체한다.


Notes