Emacs에 (반복 명령)이 있습니까?


143

자주, 나는 다음과 같은 것을 찾고있는 제안과 문서를 파헤 쳤다.

(반복 명령)

방금 실행 한 마지막 C 또는 M 명령을 수행하십시오 (fn 키로 리바운드)

또는 때로는 관련 :

(마지막 기능 설명)

내가 실수로 어떤 키를 눌렀는지, 그 효과가 내 트릭에 추가하고 싶습니다. describe-key는 가까이 있지만 입력 한 내용을 알아야합니다.

신뢰하는 조수에게 너무 많은 질문을하고 있습니까?


1
Cx z (repeat)및 Cx Mz (repeat-complex-command). 도 참조하십시오 (repeat-matching-complex-command).
하트셉수트

답변:


62

' describe-last-function ' 과 관련하여 :

last-command마지막으로 한 일을 나타내는 기호로 설정된 변수 가 있습니다. 따라서이 생략 스 니펫은- (describe-function last-command)즉시 일어난 일에 대한 문서를 가져와야합니다.

그래서 당신은 describe-last-function그렇게 사소한 일을 할 수 있습니다

(defun describe-last-function() 
  (interactive) 
  (describe-function last-command))

그 elisp를 .emacs넣거나 동등한 것을 넣으면 Mx describe-last-function이 있습니다.

관심이있는 이후 몇 개의 키를 누르거나 마지막 명령을 수정 한 작업을 수행 한 경우 해당 command-history기능이 유용 할 수 있습니다. Mx command-history로 얻을 수 있습니다.


168

repeat.el표준 Emacs 배포판에 포함 된 Emacs Lisp 패키지 가 반복 기능을 제공합니다 . 에서 repeat.el의 설명서 :

이 패키지는 인수를 포함하여 모든 명령이 무엇이든 이전 명령을 반복하는 명령을 정의합니다. 이 명령은 키 Cx z에 연결됩니다. 이전 명령을 한 번 반복하려면 Cx z를 입력하십시오. 바로 다음에 두 번째 반복하려면 z 만 입력하십시오. z를 반복해서 입력하면 명령을 반복해서 반복 할 수 있습니다.

반복 명령에 대한 추가 정보를 보려면 C-h F repeat RETEmacs에서 입력하십시오 .



81

예, 반복 명령이 있습니다. 라는 repeat:

  • 으로 명령을 반복 하고 계속 반복하여 C-x z누르십시오 z.

repeat-complex-command키 바인딩에서 구할 수 있는 약간의 충격적인 사람 C-x ESC ESC.


2
repeat-complex-command가 이전 인수를 반복한다는 점을 제외하고 Mx Mp와 유사합니다.
Yoo

5
또한 C-x M-:(니모닉 : 유사 M-:하지만 elisp 표현이 이미 채워져 있습니다).
phils

6
네, 참으로 충격 . 수락 된 답변은 여기서 최고의 답변이 아닙니다 . IMO (하지만 OP는 자신의 질문에 가장 적합하다고 생각합니다). 나 에게이 대답은 서면 질문에 대한 요청과 가장 가깝습니다 (마지막 명령 반복). 그리고 repeat.el( 제공되는) 가능성 C-x z z z...이 두 번째로 가장 가깝습니다. 두 번째 질문에서 마지막으로 어떤 키를 눌렀는지에 대한 질문은 C-h l( view-lossage)입니다. describe-last-command명령에 IMHO는 거의 사용되지 않습니다 .
Drew

C-x M-:키보드 매크로의 일부로 사용할 수도 있습니다. 편리합니다. 기본 repeat-complex-command바인딩은 반복해서 입력하기에 약간 번거 롭습니다.
remcycles

24

또한 M-x view-lossage마지막으로 입력 한 백 키 (?)를 표시합니다. 따라서 명령이 어디에 있는지 볼 수 있습니다. 내가 지금 M-x command-history사용하고 있다고 생각하는 것을 알기 전까지는 내가 사용한 것입니다 C-h w.


18

나는 확실하지 않지만 아마도 이것을 찾고 있습니까?

명령 C-xz( repeat)은 Emacs 명령을 여러 번 반복하는 다른 방법을 제공합니다. 이 명령은 이전 Emacs 명령을 반복합니다. 명령을 반복하면 이전에 사용한 것과 동일한 인수가 사용됩니다. 매번 새로운 인수를 읽지 않습니다.

이맥스 매뉴얼, 8.11 명령 반복


2
Johannes Schaub에 의해 언급 된 바와 같이, 그 이후 z의 독자적인 프레스 는 반복을 계속할 것입니다.
phils

9

이것도 도움이 될 것입니다 ... emacs 도움말에서 그대로 :

C-x M-ESC runs the command repeat-complex-command
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to <again>, <redo>, C-x M-:, C-x M-ESC.
(repeat-complex-command ARG)

Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
The command is placed in the minibuffer as a Lisp form for editing.
The result is executed, repeating the command as changed.
If the command has been changed or is not the most recent previous command
it is added to the front of the command history.
You can use the minibuffer history commands M-n and M-p
to get different commands to edit and resubmit.

4

개인적으로 나는 Sebastian의 아이디어가 유용하다는 것을 알았습니다. 작동하는 버전은 다음과 같습니다.

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))

2
그것을 고려 isearch하고 isearch-backward중요한 탐색 명령이고, 후자는 기본적으로 <KBD> CR </ KBD> 바인딩되는, 하나는 아마 반복-명령 바인딩 더 나은 찾을 수 있습니다. Mac에서는 Command (super) -Y를 제안합니다. 일부 앱에는 이미 'undo'의 반대 개념으로 사용하는 규칙이 있기 때문입니다.
Brighid McDonnell

0

이것은 오래되었지만 Google 팝업은 Emacs 프롬프트에서 입력 한 마지막 명령을 검색하려고 할 때 이것을 먼저 게시합니다. 이 답변들 중 어느 것도 나를 위해 일하지 않았으므로 나중에 내가 그랬던 것처럼 넘어 질지도 모르는 사람들을 위해 2 센트를 넣기로 결정했습니다. Portacle을 사용하고 있지만 여기서 찾고있는 것을 발견 했으므로 다른 설정으로 작업하기에 충분히 일반적이기를 바랍니다. 어쨌든, 나를 위해 일한 것은 역사를 사용 C-↑하고 C-↓순환하는 것입니다. 사용 M-p하고 M-n잘 작동했지만 Bash를 사용하기 때문에 화살표를 사용하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.