emacs에서 두 개의 다른 버퍼에서 하나의 파일 편집


28

파일 foo.bar을 emacs에서 두 번 (또는 그 이상) 열려면 두 파일 을 동시에 편집 할 수 있습니다. 가능합니까? 아마도 더 좋은 질문은 어떻게해야합니까? 자체 버퍼 / 프레임에서 각 인스턴스를 여는 방법이 있습니까?


다른 창에 동일한 버퍼를 표시 할 수 있습니다. 이 문제에 대한 해결책이 아닙니까?
Tom

답변:


35

하나 이상의 창에서 동일한 버퍼를 열 수 있지만 (다른 프레임에 분산 될 수 있음) 그리 편리하지는 않습니다. 각 창에는 고유 한 점이 있지만 점과 별개로 거의 모든 특성이 버퍼와 연결되어 있기 때문에 모두 마크, 파일 모드, 축소 및 기타 특성을 공유합니다. 또한 한 창에서 다른 버퍼를 방문하면 파일에서 자리를 잃게됩니다.

자체 포인트, 마크, 모드 등이 있지만 원래 버퍼와 동일한 내용을 갖는 간접 버퍼 를 만들 수 있습니다 (두 버퍼 쓰기를 동일한 파일에 저장). 현재 버퍼의 복제 인 두 번째 버퍼를 만들려면을 실행하십시오 M-x clone-indirect-buffer RET. 두 번째 버퍼를 다른 창에서 열려면을 입력하십시오 C-x 4 c.


3
명확히하기 위해 : C-x 4 cruns clone-indirect-buffer-other-window이므로 clone-indirect-buffer명령 대신 , 대신에 사용됩니다 . 그러나 내 시스템 에서이 두 명령은 모두 동일한 것으로 보입니다.
SabreWolfy

/ - : 나는이 기억하는 방법을 알아낼 수 있으면 좋겠다
pedz

@pedz C-x 4는 windows의 접두사 c이고 clone 의 접두사입니다 . 원하는 경우 다른 바인딩을 정의 할 수 있습니다. C-x c기본 구성에 사용되지 않습니다 C-x C-c. 대신 실수로 치는 것을 두려워하지 않는 경우 사용할 수 있습니다 . C-x 5 cinit 파일의 새 프레임에서 복제하도록 정의 합니다.
Gilles 'SO- 악마 그만해'

8

화면 분할 모드 : 여기서 ctrl+ x는 Ctrl 키를 누른 상태에서 x를 입력 함을 의미합니다. 그런 다음 숫자를 입력하십시오.

ctrl+ x2 (수평 분할)

또는

ctrl+ x3 (세로 분할)

그런 다음 동일한 파일에서 독립적으로 스크롤하거나 원하는 경우 다른 버퍼를 열 수 있습니다.

단일 뷰 유형으로 돌아가려면

ctrl+ x1

원하는 경우 각 화면 (섹션)을 필요한만큼 분할 할 수 있습니다. 먼저 분할하려는 화면을 선택한 다음 수평 또는 수직 분할을 수행하십시오.


이케! 프레임 간 키보드 탐색을 포함하지 않아야합니까? 각 "프레임"에서 보이는 "창"을 C-x o실행 other-window하고 순환합니다. (윈도우 관리자 창을 프레임이라고하는 emacs 구성을 사용하고, 그 안에있는 별도의 패널을 창이라고합니다 (알고 있습니다 만 책임은 없습니다))
dmckee

마우스를 사용하는 경향이 있습니다.
Matt H

1

이맥스는 프레임이 아닌 창 (창)에 편향되어 있습니다. 동일한 프레임의 다른 창뿐만 아니라 다른 프레임에서 동일한 버퍼를 여는 것이 종종 바람직합니다. 그러나 C-x 5 c기본적으로 바인딩되지 않습니다. 이 코드는 누락 된 clone-indirect-buffer-other-frame함수를 정의합니다 .

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.