매우 자주 여러 번의 키 입력이 필요한 일련의 단계를 수행해야합니다. 동일한 세션에서 이러한 단계는 키보드 매크로로 기록 될 수 있습니다.
예를 들어 자주 실행되는 검색 / 바꾸기 작업을 키보드 매크로로 저장하는 것이 있습니다. 그러나 emacs를 종료하면 해당 매크로가 손실됩니다.
자주 사용하는 키보드 매크로를 Lisp 기능으로 저장하려면 어떻게해야합니까?
간단하게하기 위해 emacs 세션에서 재사용 할 수 있도록 “abc”를 “def”로 바꾸는 동작을 함수로 저장하고 싶습니다.
답변
수행 할 수있는 단계는 다음과 같습니다.
- 검색을 수행 할 지역을 선택하십시오.
-
매크로 기록을 시작하십시오.
M-x start-kbd-macro
- 필요한 작업을 수행하고
M-x query-replace-regexp
( “abc”를 “def”!
로 대체) 전체 지역에서 강제로 검색을 대체하는 데 사용하십시오. -
매크로 기록을 중지하십시오.
M-x kmacro-end-or-call-macro
. - 수행
M-x kmacro-name-last-macro
및 매크로에게 같은 설명이 포함 된 이름을 제공replace-abc-with-def
. 그런 다음을 수행하여 해당 매크로를 다시 호출 할 수 있습니다M-x replace-abc-with-def
. - 이제이 매크로를 emacs 초기화 중에로드하는 파일에 함수로 저장하십시오. 예를 들면 다음과 같습니다
init.el
.M-x insert-kbd-macro
- 삽입 할 명명 된 매크로를 선택하십시오.
자동 생성 된 replace-abc-with-def
함수 정의는 다음과 같습니다.
(fset 'replace-abc-with-def
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([59 39 return 97 98 99 return 100 101 102 return 33] 0 "%d")) arg)))
이제 M-x replace-abc-with-def
모든 emacs 세션에서 할 수 있습니다 .
답변
elmacro 는 이미 @lunaryorn 에 의해 언급되었지만이 패키지의 저자로서 예제를 제공하는 것이 좋을 것이라고 생각했습니다.
다음과 같은 매크로를 기록하는 경우 :
F3 C-e M-b M-u C-a C-n F4
그런 다음 다음을 M-x elmacro-show-last-macro upcase-last-word사용하여 버퍼를 생성합니다.
(defun upcase-last-word ()
"Change me!"
(interactive)
(move-end-of-line 1)
(backward-word 1)
(upcase-word 1)
(move-beginning-of-line 1)
(next-line 1 1))