답변:
수행 할 수있는 단계는 다음과 같습니다.
매크로 기록을 시작하십시오.
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
.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 세션에서 할 수 있습니다 .
insert-kbd-macro
사용하여 이름을 지정했는지 여부에 따라 어느 것이 나타납니다 . kmacro-name-last-macro
name-last-kbd-macro
name-last-kbd-macro
위의 @phils에서 언급 한 것처럼 형식 을 사용하면 함수가 아닌 문자열로 끝납니다. fset
이 기호를 심볼로 지정하면 Mx를 사용하여 매크로를 실행할 수 있지만 lisp ( -> , -> ) 에서는 매크로를 호출 할 수 없습니다 . 이상하게도 전화를 걸어도 작동하지 않습니다 ( 실행하는 데 사용할 수는 있지만 ). commandp
t
functionp
nil
call-interactively
execute-kbd-macro
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))
insert-kbd-macro
. 이것이 질문에 대한 답변입니다 (이 답변의 나머지 부분은 추가 도움을 제공합니다).