[emacs] Emacs로 ‘실행 취소’후 변경 사항을 어떻게 ‘다시 실행’합니까?

이 기사에서는 “실행 취소하는 동안 방향을 되돌릴 수 있으므로 실행 취소를 취소 할 수 있기 때문에 이맥스가 재실행했다”고한다.

이것은 무엇을 의미 하는가? 사용자가 Emacs로 어떻게 ‘재실행’할 수 있습니까?



답변

짧은 버전 : 실행 취소를 취소합니다. 실행 취소 한 다음과 같은 편집하지 않는 명령 C-f을 수행하면 다음 실행 취소가 실행 취소를 실행하여 다시 실행됩니다.

더 긴 버전 :

실행 취소는 작업 스택에서 작동하는 것으로 생각할 수 있습니다. C-f일련의 실행 취소 작업 후에 일부 명령 (예 :와 같은 탐색 명령 )을 수행하면 모든 실행 취소가 작업 스택으로 푸시됩니다. 따라서 다음 실행 취소는 마지막 명령을 실행 취소합니다. 다음과 같은 조작 순서가 있다고 가정하십시오.

  1. “foo”삽입
  2. “바”삽입
  3. “스팸 사랑”삽입

자, 당신은 취소합니다. 마지막 작업을 취소하여 다음 목록을 만듭니다.

  1. “foo”삽입
  2. “바”삽입

이 시점에서 실행 취소 이외 C-f의 작업을 수행하는 경우 작업 스택은 다음과 같습니다.

  1. “foo”삽입
  2. “바”삽입
  3. “스팸 사랑”삽입
  4. “스팸을 좋아합니다”를 삽입 취소

이제 취소 할 때 가장 먼저 취소해야 할 것은 실행 취소입니다. 원래 스택 결과 및 문서 상태 :

  1. “foo”삽입
  2. “바”삽입
  3. “스팸 사랑”삽입

실행 취소 시퀀스를 해제하기 위해 수정 명령을 수행하는 경우 해당 명령은 실행 취소 후에 추가되므로 이후에 실행 취소 할 첫 번째 명령입니다. 때리는 대신 “바”위로 백 스페이스 간격을두고 있다고 가정합니다 C-f. 그럼 당신은했을 것

  1. “foo”삽입
  2. “바”삽입
  3. “스팸 사랑”삽입
  4. “스팸을 좋아합니다”를 삽입 취소
  5. “바”삭제

이 추가 / 다시 추가는 무한정 발생합니다. 익숙해지는 데 약간의 시간이 걸리지 만 실제로는 Emacs에 매우 유연하고 강력한 실행 취소 / 다시 실행 메커니즘을 제공합니다.


답변

실행 취소 : C-_

실행 취소 후 다시 실행하려면 : C-g C-_

여러 번 입력 C-_ 에 의해 취소 된 것을 다시 실행하려면 C-_
, 이맥스는 여러 번 명령을 다시 실행 명령 후 입력 실행하려면 C-xz다음에 여러 번 입력 z(여러 번 매크로를 실행하고자 할 때 흥미) 명령을 반복 키를


답변

  • 한 번 실행 취소 하려면C-/
  • 두 번 실행 취소하려면 : C-/ C-/
  • 실행 취소 직후에 한 번 다시 실행 하려면 :C-g C-/
  • 실행 취소 후 즉시 두 번 다시 실행하려면 : C-g C-/ C-/. 주 C-g반복하지 않는다.
  • 즉시 다시 실행 취소 하려면 다음을 수행 하십시오 .C-g C-/
  • 즉시 다시 두 번 실행 취소하려면 다음을 수행하십시오. C-g C-/ C-/
  • 하려면 다시 다시 , 같은 …

마지막 실행 취소 명령 이후에 아무 키나 (문자 입력 또는 커서 이동) 눌렀다면 C-g다음 실행 취소 / 다시 실행 전에 입력 할 필요가 없습니다 . C-g자체적으로 아무 것도 수행하지 않는 안전한 키이지만 실행 취소 시퀀스의 끝을 알리기 위해 실행 취소 키가 아닌 키로 계산됩니다. 다른 명령을 누르면 C-f작동합니다. 커서가 있던 곳에서 커서를 움직일 수 있습니다.

당신이 충돌하는 경우 C-g또는 다른 명령을 할 때 당신이 의미하지 않았다, 당신은 지금 잘못된 방향으로 취소되어, 단순히 히트 C-g다시 방향을 전환 할 수 있습니다. 원하는 실행 취소에 도달하기 전에 실수로 다시 실행하고 실행 취소를 통해 실행 취소해야하지만, 계속해서 충돌 C-/하면 원하는 상태에 도달하게됩니다. 실제로 C-g한 번 누른 다음 C-/충분한 시간 을 누르면 버퍼가 있었던 모든 상태에 도달 할 수 있습니다 .

에 대한 대안 바로 가기 undo이외는, C-/이다 C-_, C-x u하고 M-x undo.

참조 취소 이맥스의 실행 취소 시스템에 대한 자세한 내용은 매뉴얼 이맥스한다.


답변

보다 일반적인 실행 취소 / 다시 실행 기능을 원하는 사용자를 위해 누군가가 작성했습니다 undo-tree.el. Emacs가 아닌 실행 취소의 모양과 느낌을 제공하지만 실행 취소 기록의 전체 ‘트리’에 액세스 할 수 있습니다.

나는 이맥스의 내장 된 실행 취소 시스템을 좋아하지만이 패키지는 매우 직관적이다.

파일 자체의 주석은 다음과 같습니다.

이맥스는 강력한 실행 취소 시스템을 가지고 있습니다. 대부분의 소프트웨어의 표준 실행 취소 / 재실행 시스템과는 달리, 당신이 복구 할 수 있는 (표준 실행 취소 / 재실행 시스템이 다시 자마자 과거의 상태를 잃을 수있는 반면) 버퍼의 과거 상태. 그러나이 힘은 가격이 책정됩니다. 많은 사람들이 Emacs의 실행 취소 시스템을 혼란스럽고 사용하기 어려워서 덜 강력하지만 직관적 인 실행 취소 / 재실행 시스템으로 대체하는 여러 패키지를 생성합니다.

표준 실행 취소 / 다시 실행으로 인한 데이터 손실과 Emacs의 실행 취소 혼동은 실행 취소 히스토리를 선형 변경 순서로 처리하려고 시도한 결과입니다. 그렇지 않습니다. 이 패키지가 제공하는`undo-tree-mode ‘는 Emacs의 실행 취소 시스템을 실행 취소 이력을 그대로 처리하는 시스템 인 분기 트리 변경으로 대체합니다. 이 간단한 아이디어를 통해 표준 실행 취소 / 다시 실행 시스템의보다 직관적 인 동작을 기록을 잃지 않는 힘과 결합 할 수 있습니다. 부가적인 부가 보너스는 경우에 따라 실행 취소 이력을보다 효율적으로 저장하여 Emacs가 이력을 폐기하기 전에 더 많은 변경 사항이 누적 될 수 있다는 것입니다.


답변

재실행 에 대한 실행 취소 트리 기발한 조심 !

많은 인기있는 “스타터 키트”(전주곡, 퍼셀, 스페이스 맥)는 실행 취소 트리와 함께 제공됩니다. 대부분 (모두?)도 자동으로 활성화합니다. 언급했듯이 실행 취소 트리는 실행 취소 / 재실행 트리를 시각화하고 탐색 할 수있는 편리한 방법입니다. Prelude는 키 코드 ( uu)를 제공합니다 C-x u.

문제는 undo-tree가 redo에 대한 Emacs의 기본 바인딩과 잘 알려진 바인딩을 손상시키는 것 같습니다C-g C-/ .

대신, 이러한 대칭 키를 사용하여 실행 취소 / 다시 실행할 수 있습니다 .

C-/     undo
C-S-/   redo

이 기능은 때때로 비주얼 라이저를 열지 않고 빠르게 다시 실행 하려는 경우에 유용합니다 .


답변

나는 찾을 redo.el이며 매우 편리한 “정상”실행 취소 / 재실행을 수행하기위한, 그리고 일반적으로 바인딩이 CSZ과 같이, Cz를 실행 취소 :

(when (require 'redo nil 'noerror)
    (global-set-key (kbd "C-S-z") 'redo))

(global-set-key (kbd "C-z") 'undo)

파일을 다운로드하여 lisp-path에 넣고 위의 파일을에 붙여 넣으십시오 .emacs.


답변

Emacs 28 은 redo 명령 ( undo-redo)을 추가합니다 .

보다 일반적인 실행 취소 / 다시 실행을 원하면 다음 명령을 사용할 수 있습니다.

(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)