간접 버퍼를 사용하는 이유는 무엇입니까?


답변:


16

동일한 버퍼의 여러 위치를보고 편집합니다. 따라서 긴 버퍼를 스크롤 할 필요없이 창을 보이는 영역으로 전환하면됩니다. 복제 된 각 버퍼에는 다른 마크 링, 좁힘 및 기타 버퍼 속성이 있습니다. 간접 버퍼를 사용하지 않고 동일한 버퍼의 다른 창을 만들면 모든 것이 공유되므로 다른 위치를보고 편집하는 것 외에 다른 고급 기능을 수행 할 수 없습니다. 예를 들어, 간접 버퍼를 사용하면 모든 코드 블록을 접고 원래 버퍼에 영향을주지 않고 효과적으로 "태그 트리"를 만들 수 있습니다. 창을 사용하면 두 버퍼가 동일하므로 두 창의 두 버퍼가 모두 접 힙니다.

요약하면, 간접 버퍼는 원래 버퍼에서 동일한 텍스트와 파일을 공유하는 완전히 다른 버퍼이므로 복제 된 버퍼를 저장하면 원래 파일도 저장됩니다.


3
간접 버퍼에 이점이 있다는 데 동의합니다. 그러나 첫 번째 요점은 버퍼가 간접적 일 필요는 없습니다. 동일한 버퍼가 단순히 두 개의 창에서 열리더라도 동일한 버퍼의 여러 위치를보고 편집 할 수 있습니다. 그러나 예, 독립적 인 축소, 접기 등은 간접 버퍼의 강력한 기능이라고 생각합니다.
Kaushal Modi

5
또한 여러 모드로 동일한 버퍼를 편집하십시오 (좁히기와 간접 버퍼 결합). 마크 다운 모드로 버퍼의 일부를, 파이썬 모드로 또 다른 부분을, json 모드를 가진 다른 부분을 편집 할 수 있습니다
freakhill

여러 창만 사용하여 여러 위치를 볼 수 있지만이 상황에서는 하나의 포인트 값만 있기 때문에 스위칭 버퍼는 두 창 모두에서 위치를 유지하지 않고 하나만 유지합니다.
politza

9

한 사용 사례는 파일의 한 부분에서 다른 주요 모드를 사용하는 것입니다.

예를 들어 특정 요소 내부에 코드가있는 XML 문서로 한 번 작업했습니다. 전체 문서를 XML처럼 편집 할 수 있기를 원했지만 특정 요소에 포함 된 프로그래밍 언어에 대한 모든 주요 모드 기능을 계속 가지고 있기 때문에 실행중인 간접 버퍼에서 해당 요소의 본문으로 좁혔습니다. 적절한 주 모드.

내 구성의 기능은 다음과 같습니다.

(defun indirect-region (start end)
  "Edit the current region in another indirect buffer.
    Prompt for a major mode to activate."
  (interactive "r")
  (let ((buffer-name (generate-new-buffer-name "*indirect*"))
        (mode (intern
               (completing-read
                "Mode: "
                (mapcar (lambda (e)
                          (list (symbol-name e)))
                        (apropos-internal "-mode$" 'commandp))
                nil t))))
    (pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
    (funcall mode)
    (narrow-to-region start end)
    (goto-char (point-min))
    (shrink-window-if-larger-than-buffer)))

참고 : 이것은 완벽하지는 않습니다. font-lock과 같은 것은이 시나리오에서 사용하기 위해 특별한 추가 작업이 필요합니다.


3

간접 버퍼는 동일한 버퍼에 대한 여러 뷰를 제공합니다. 특히 여러 협소화는 각각 여러 가지 측면에서 별도의 버퍼처럼 작동합니다.

도서관 논평 narrow-indirect.el은 다음과 같이 말합니다 :

생각보다 간접 버퍼를 사용할 수 있습니다. 예를 들어 Dired 버퍼의 일부에서 가져온 복제본을 사용하여 디렉토리 목록에 유용한 (활성)보기를 제공 할 수 있습니다. g전체 Dired 버퍼의보기에 의존하기 때문에 작동하지 않는 키 / 명령 (예 : 목록 업데이트)이 몇 개 밖에 없습니다. 실험, 그리고 당신은 의심 할 여지없이 간접 버퍼에 대한 흥미로운 새로운 용도를 찾을 것입니다.

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