2 개의 Windows emacs에서 버퍼를 교체하는 방법


98

나는 emacs를 사용하고 있는데 때때로 2 개의 파일이 2 개의 창으로 분리되어 있다는 것을 알았습니다.

예 : 다음을 사용하여 1 개의 파일을 엽니 다. C-x C-f file1.c RET

프레임을 두 개의 창으로 분할했습니다. C-x 3

그런 다음 다른 파일을 엽니 다. C-x C-f file2.c RET

그래서 2 개의 파일이 있습니다.

창 1 (왼쪽) file1.c

창 2 (오른쪽) file2.c

파일을 교체 할 키 조합이 있는지 궁금합니다. 보통 저는 2 개의 창이있을 때 왼쪽 창에서 작업하는 것을 좋아합니다. C-x o커서를 오른쪽 창으로 쉽게 이동할 수 있다는 것을 알고 있습니다 .

그러나 file2.c왼쪽 창 file1.c에 있고 오른쪽 창에 있도록 파일을 바꿀 수 있는지 궁금합니다 .


이것은 또한 작동합니다 (emacs24에서 테스트 됨) : 두 개의 버퍼 전치 Bahbar 답변 과 유사 해 보입니다
nephewtom

답변:


88

이를 위해 buffer-move 를 사용합니다. 이제 왼쪽에있는 버퍼에서 작업하는 경우 'buf-move-right'를 호출하면 오른쪽에있는 버퍼와 바뀝니다. 나는 이것이 당신이 원하는 것 같아요.


:) 단지 확인 당신이 그들을 읽고 -이 솔루션은 완벽하고, 의견은 매우 명확하다
마틴 클라크

3
그냥 스왑 창에 (선택된 하나에 독립적 인)하려는 경우 다음 사용할 수 있습니다(defun win-swap () "Swap windows using buffer-move.el" (interactive) (if (null (windmove-find-other-window 'right)) (buf-move-left) (buf-move-right)))
mefiX

buffer-move는 두 개의 창 레이아웃에서는 작동하지 않았지만 잘 작동 win-swap했습니다. 감사합니다!
dolzenko 2012

1
그 버퍼 이동 소스 내부 당신을 위해 모든 중요한 매핑에 대한 설명을 볼 수 있습니다 C-S-upbuf-move-up
미가 엘리엇

34

트랜스 프레임 라이브러리는 틀지 또는 프레임에서 윈도우 준비를 회전 기능의 매우 포괄적 인 세트를 제공합니다.

M-x flop-frame RET 이 특정 질문에 필요한 것을 수행합니다.

다음 다이어그램은 라이브러리 (및 EmacsWiki 페이지)의 주석에서 가져온 것입니다.

transpose-frame  Swap x-direction and y-direction

       +------------+------------+      +----------------+--------+
       |            |     B      |      |        A       |        |
       |     A      +------------+      |                |        |
       |            |     C      |  =>  +--------+-------+   D    |
       +------------+------------+      |   B    |   C   |        |
       |            D            |      |        |       |        |
       +-------------------------+      +--------+-------+--------+

flip-frame  Flip vertically

       +------------+------------+      +------------+------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |            |     C      |
       +------------+------------+      |     A      +------------+
       |            D            |      |            |     B      |
       +-------------------------+      +------------+------------+

flop-frame  Flop horizontally

       +------------+------------+      +------------+------------+
       |            |     B      |      |     B      |            |
       |     A      +------------+      +------------+     A      |
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+------------+
       |            D            |      |            D            |
       +-------------------------+      +-------------------------+

rotate-frame  Rotate 180 degrees

       +------------+------------+      +-------------------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+     A      |
       |            D            |      |     B      |            |
       +-------------------------+      +------------+------------+

rotate-frame-clockwise  Rotate 90 degrees clockwise

       +------------+------------+      +-------+-----------------+
       |            |     B      |      |       |        A        |
       |     A      +------------+      |       |                 |
       |            |     C      |  =>  |   D   +--------+--------+
       +------------+------------+      |       |   B    |   C    |
       |            D            |      |       |        |        |
       +-------------------------+      +-------+--------+--------+

rotate-frame-anti-clockwise  Rotate 90 degrees anti-clockwise

       +------------+------------+      +--------+--------+-------+
       |            |     B      |      |   B    |   C    |       |
       |     A      +------------+      |        |        |       |
       |            |     C      |  =>  +--------+--------+   D   |
       +------------+------------+      |        A        |       |
       |            D            |      |                 |       |
       +-------------------------+      +-----------------+-------+

2
flop-frame창 사이의 분할이 수직 인 경우에만 작동하며 수평 분할에는 flip-frame. 그러나 rotate-frame무관하게 작동합니다. 두 창 사이의 버퍼를 교환하는 하나의 명령, 상관없이 분할 방향 :
legends2k

33

Emacs 26.1 NEWS 파일에는 다음 항목이 있습니다.

+++
*** New command 'window-swap-states' swaps the states of two live
windows.

비슷한 기능을 제공하는 것처럼 crux-transpose-windows보이지만 높이 / 너비 조옮김도 할 수있는 것은 무엇입니까?


예, 작동합니다. Emacs> 26.1이 있습니다. M-x window-swap-states두 창 사이에 버퍼를 바꿨습니다.
Samrat Debroy

15

당신이 사용하는 경우 서곡을 그냥 사용할 수 있습니다 C-c s( prelude-swap-windows). Prelude 문서에서 :

C-c s명령 실행 crux-swap-windows(발견 prelude-mode-map의 별칭) crux-transpose-windowscrux.el을 .


전주곡은 한 입 가득한 것처럼 보이지만 (어디에나 포장되어 있지 않습니다- curl | sh= wtf?), crux는 확실히 멋지게 보이며 처음에 내가 직접 굴려 온 것들이 많이 있습니다.
anarcat

나는 그것이 무엇인지 curl | sh, 내가 말하는 것은 악이다.
anarcat

11

이 작업을 수행하는 내장 기능을 알지 못합니다.

그러나 그것을하기 위해 약간의 elisp를 채찍질하는 것은 그리 어렵지 않은 것 같습니다. 하지만 악마는 세부 사항에 있습니다.

(defun swap-buffers-in-windows ()
  "Put the buffer from the selected window in next window, and vice versa"
  (interactive)
  (let* ((this (selected-window))
     (other (next-window))
     (this-buffer (window-buffer this))
     (other-buffer (window-buffer other)))
    (set-window-buffer other this-buffer)
    (set-window-buffer this other-buffer)
    )
  )

특히, 이것은 캐럿이 끝나는 위치와 관련하여 원하는 것을 수행하지 않을 수 있습니다. 그러나 먼저 원하는 것을 말해야합니다.


이 코드를 복사하여 붙여 넣었는데 아무 일도하지 않는 것 같습니다.

아, 미안합니다. Emacs 창의 상단과 하단을 바꿉니다. 나는 그것이 프레임을 바꿀 것이라고 기대하고 있었다.

확인. 헷갈리네요. Cx 3을 언급하셨습니다. 이것은 2 개의 emacs 프레임이 아닌 2 개의 emacs 창을 만드는 것입니다. 프레임이나 창을 사용하고 있습니까? 창은 무엇이며 프레임은 무엇입니까?
Bahbar

또한 상단과 하단 부분에 대해 이야기하지 않았습니다. 한 번에 2 개 이상의 버퍼가 표시됩니까?
Bahbar

나는 질문을 한 사람이 아니라 단지 침입자 일뿐입니다. 이 질문을보기 전에는 Cx 3을 사용한 적이 없지만 새 프레임을 만드는 대신 Emacs 창을 분할합니다.

1

전주곡이있는 경우에서 ace-window를 사용할 수 있습니다 S-w. 거기에서 문서에 나열된 많은 작업을 수행 할 수 있습니다 .

ace-window를 호출하여 시작한 다음 액션을 삭제 또는 교체 등으로 전환 할 수도 있습니다. 기본적으로 바인딩은 다음과 같습니다.

x-창 삭제

m-스왑 (이동) 창

c-창을 수직 또는 수평으로 공정하게 분할

v-창을 수직으로 분할

b-창을 가로로 분할

n-이전 창 선택

...

그래서 그것은 S-w m


Spacemacs 사용자의 경우, ace-swap-window바인딩됩니다 SPC w M. 이 기능은 기본적으로 사용할 수 있습니다.
Claudio

0

다음 코드 조각은 버퍼 전환을 수행 할 수 있습니다.

(defun ab/switch-buffer-each-other (arg)
  "switch current buffer with other window buffer 
   right-2-left and up-2-down"
  (interactive "p")
  (cond
   ((windmove-find-other-window 'right) (buf-move-right))
   ((windmove-find-other-window 'left) (buf-move-left))
   ((windmove-find-other-window 'up) (buf-move-up))
   ((windmove-find-other-window 'down) (buf-move-down)))
(message "switch buffer done"))

-1

나는 원하는 위치에서 파일 # 2를 열도록 노력할 것입니다. 즉, cx 3을 누른 후 두 번째 파일로 이동하기 전에 cx o로 커서를 이동합니다.

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