처음으로 돌아 가지 않고 Emacs에서 전체 버퍼의 문자열을 검색 / 바꾸는 방법은 무엇입니까?


9

먼저 버퍼 상단으로 돌아간 다음 검색 / 쿼리를 수행하는 것이 불편합니다. 검색의 경우 C-s한 번 더 누르면 둘러 쌀 수 있지만 쿼리 / 바꾸기 작업은 지루합니다.

두 작업 모두에 버퍼 상단으로 돌아 가지 않고 간단한 해킹이 있습니까?

답변:


6

허, 당신이 할 수없는 것처럼 보입니다 ( 여기 에서 찍은 , 내 것을 강조합니다).

점 다음에 'foo'의 모든 인스턴스를 'bar'로 바꾸려면 Mx replace-string 명령을 두 개의 인수 foo와 와 함께 사용하십시오 bar. 교체는 지점 이후에만 이루어 지므로 전체 버퍼를 덮으려면 먼저 시작해야합니다 .

개인적으로 버퍼를 두 개 ( C-x 2)로 나누고 맨 위 ( C-Home) 로 이동 한 다음 replace 명령을 실행하고 원래 창 ( C-x o)으로 다시 전환 한 다음 두 번째 ( C-x 0)를 종료하십시오. 더 간단하게 만드는 트릭이 있는지 모릅니다.


4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))

잘 작동하지만 영역 / 선택에서 쿼리 대체를 방해합니다 (항상 전체 버퍼에서 수행).
Alex

1

나는 이것을 위해 iedit 를 사용 합니다. 매우 유용한.


0

Emacs 24 이상에서 작업하기 위해 아래를 사용했습니다.

;; query replace all from buffer start
(fset 'my-query-replace-all 'query-replace)
(advice-add 'my-query-replace-all
            :around
            #'(lambda(oldfun &rest args)
               "Query replace the whole buffer."
               ;; set start pos
               (unless (nth 3 args)
                 (setf (nth 3 args)
                       (if (region-active-p)
                           (region-beginning)
                         (point-min))))
               (unless (nth 4 args)
                 (setf (nth 4 args)
                       (if (region-active-p)
                           (region-end)
                         (point-max))))
               (apply oldfun args)))
(global-set-key "\C-cr" 'my-query-replace-all)

지역 교체 사례와 모든 START 및 END 인수가 전달되었습니다.

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