마지막 텍스트 삽입 반복 있지만, 종종 같은

Vim에서을 눌러 .텍스트 삽입을 포함하여 최신 변경 사항을 반복 할 수 있습니다 .

Emacs C-x z에서는 마지막 명령 만 반복합니다. 나는 여기서 매크로를 사용할 수 있다는 것을 알고 있지만, 종종 같은 텍스트를 너무 늦게 다시 삽입해야한다는 것을 알고 있습니다. 다시 번만 다시 삽입해야 할 때 매크로를 정의하면 의미가 없습니다.

Q : Emacs 내부에 텍스트 삽입을 반복하는 방법이 있습니까?



답변

dot-mode“입력 또는 명령을 반복하는 부 모드”이며 필요한 작업을 수행 할 수 있습니다. 기본적으로 마지막 삽입 / 삭제를 반복합니다. .Vi (m) 과 비슷합니다 .


답변

그건 내가 매크로 정의를 시작하는 것을 잊었다처럼

이를 위해 kmacro-edit-lossage( C-x C-k l)를 사용할 수 있습니다 . 300 개의 마지막 키 입력 (간단한 삽입 포함)을보고 매크로로 편집 할 수 있습니다.

간단히 사용하려면 반복하려는 삽입의 시작 부분을 찾고 “매크로 :”에서 해당 지점까지의 모든 텍스트를 삭제 한 다음을 누릅니다 C-c C-c. 이제 처음에 기록하는 것을 잊지 않은 것처럼 동일한 작업을 수행하는 데 사용할 수있는 매크로가 있습니다.

슬프게도, 마지막 300 번의 키 입력에 마우스 클릭이 포함되어 있으면 실패합니다.

편집 : 다음 코드는 마지막 마우스 이벤트 이후의 키만 유지되도록 변경합니다.

(defadvice recent-keys (after tv/recent-keys-no-mouse first ())
  "Return only the keys since the last mouse event"
  (let* ((vec ad-return-value)
         (lst (append vec nil))
         (nmax (length vec))
         (i (- nmax 1)))
    (while
        (and
         (>= i 0)
         (not
          (let ((mod (event-modifiers (elt vec i))))
            (or (memq 'click mod)
                (memq 'double mod)
                (memq 'triple mod)
                (memq 'drag mod)
                (memq 'down mod)))))
      (setq i (- i 1)))
    (setq ad-return-value (vconcat (nthcdr (+ i 1) lst) nil))))

(defun tv/kmacro-edit-lossage-no-mouse ()
  "Same as `kmacro-edit-lossage', but fallback if the keys contain mouse events.

Source: http://emacs.stackexchange.com/a/4071/184"
  (interactive)
  (ad-activate-regexp "tv/recent-keys-no-mouse")
  (call-interactively #'kmacro-edit-lossage)
  (ad-deactivate-regexp "tv/recent-keys-no-mouse"))

;; If you want this function to replace the default one, uncomment this line:
; (global-set-key (kbd "C-x C-k l") 'tv/kmacro-edit-lossage-no-mouse)

답변

dabbrev-expand함수가 트릭을 수행 할 수 있다고 생각 합니다. emacs, emotion, emoji 등의 단어를 이미 입력했다고 가정 해 봅시다. 다음에 ’em’으로 시작하는 단어를 입력하면 입력 할 수 M-/있고 emacs는 이미 삽입 된 단어 중 하나를 삽입하도록 제안합니다 ’em’으로 시작합니다. 계속 타격 M-/하면 이맥스에 ‘이모티콘’, ‘이모티콘’, 그리고 …

repeat-complex-command를 살펴볼 수도 있습니다 . 가장 일반적인 예는 query-replace항상 동일한 인수를 사용하여 여러 버퍼에서 명령을 반복하고 “pitt”를 “patt”로 바꾸는 것입니다.

한 번 실행하고 다른 창으로 이동 한 후 C-x ESC ESC다시 입력 하여 입력 하십시오.

그리고 끝내기 위해 반복 삽입을 제안 할 수 있습니까? 이 el 파일은 어떤 종류의 논리를 사용하여 삽입하는 데 도움이됩니다. “마지막 삽입을 반복하지만 각 반복마다 인수가 변경됩니다.

이 예제는 el 파일 에서 찾을 수 있습니다 .

;; You can also iterate over lists:
;;   My desk is cluttered
;;   My desk is a real mess
;;   My desk is very hard to see
;;   My desk is buried
;;
;; from m-x insert-patterned
;;    ";;   My desk is %s"
;;    (cluttered "a real mess" "very hard to see" buried)

도움이 되길 바랍니다.