Emacs, 이전 창으로 전환


93

Emacs C-x o에서 다음 창으로 이동합니다.

Emacs의 이전 창으로 이동하는 키보드 매크로는 무엇입니까?

답변:


88

그건 C-- C-x o

즉, C-x o인수가 -1입니다. 에서 C-u와 같이와 명령 사이에 숫자 인수를 삽입하여 이동할 창 수를 지정할 수 있습니다 C-u 2 C-x o. ( C--는의 바로 가기입니다. C-u - 1)


그리고를 사용 C-x z하여 마지막 명령을 반복하여 창을 빠르게 전환 할 수 있습니다.
이반 황

105

지오메트리를 기반으로 선택한 창으로 이동할 수있는 windmove를 사용해 볼 수도 있습니다. Cx 화살표 키를 사용하여 창을 변경하려면 .emacs 파일에 다음이 있습니다.

(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)

11
호출 (windmove-default-keybindings)하면 이러한 함수를 SHIFT + up / down / left / right에 C-x바인딩하는데, 이는 바인딩 보다 더 편리하다고 생각합니다 ( previous-buffernext-buffer.lkahtz에 대한 유용한 기본 바인딩 과 충돌합니다.이 (kbd)함수를 사용하면 문자열 표기법으로 키를 지정할 수 있습니다. 바인딩 을 사용 C-h k하거나 C-h c설명 할 때 Emacs에서도 사용되는 더 읽기 쉬운 구문
phils

4
화살표 키 사용을 승인하지 않습니다. 그러나 어쨌든 나는 도움이된다고 찬성했다. :
Bjorn

2
@phils SHIFT + <keys>는 Emacs 23 (shift-selection-mode)에서 기본적으로 활성화 된 시프트 선택을 방해합니다.
legends2k

2
legends2k : 사실; 인수를 전달 windmove-default-keybindings하여 화살표 키와 함께 사용할 다른 수정자를 지정할 수도 있습니다 . 이 기능은 시프트 선택 모드를 사용하는 사람들에게 여전히 편리 할 수 ​​있습니다.
phils jul.

1
@phils 동의합니다. 메타 는 좋은 대안 인 것 같습니다. Emacs Wiki에서 볼 수 있습니다.
legends2k

30

개인적으로 사용하는 것을 선호합니다 window-number.el

다른 창을 선택하려면 Ctrl- x, Ctrl- j n을 사용하십시오.

여기서 N은 캡쳐 화면에 나타낸 바와 같이, 윈도우의 수, 각 프로그램 윈도우 그것의 수의 modeline 줄이다.

window-number.el을 다운로드하고 emacs로드 경로에 배치하고 다음을 사용하십시오..emacs

 (autoload 'window-number-mode "window-number"
   "A global minor mode that enables selection of windows according to
 numbers with the C-x C-j prefix.  Another mode,
 `window-number-meta-mode' enables the use of the M- prefix."
   t)

switch-window.el창에서 큰 숫자를 제공하는 비슷한 모드 가 있습니다 ... (숫자를 누르면 창을 전환하고 디스플레이를 되돌립니다.)


(출처 : tapoueh.org )


2
니스,하지만 난 뭔가를 바인딩하지 좋을 것 C-x C-j즉 바인딩 기본의로, dired-jump당신의 경우가 (require 'dired-x). (참조 M-x customize-group RET dired-keys RET당신이를 재정의합니다.)
필리스

1
이것을 게시 한 후 나는 대신 switch-window.el사용 하기로 결정하고 C-x o두 개의 창만 활성화되면 다른 창을 선택합니다. 트릭 C-x o을 수행 하기 위해 리 바인딩 하는 것이 가장 현명하다고 생각합니다 .. 개인적으로 나는 창 전환을 덜하고 나 자신을 사용 하지만 향상된 기능을 갖는 것은 매우 즐겁습니다. window-numberdired-jumpC-x bC-x o
ocodo

첫 번째 스크린 샷에 놀라운 Emacs 테마가 있습니다. 어떻게 얻을 수 있습니까?
semente

내 이맥스 관련 페이지 @semente jasonm23.github.com/EmacsFodder/Emacs/2012/06/29/...은
ocodo

1
@petrux emacsfodder.github.io/blog/two-new-emacs24-themes 나는 이것이 아마도 두 가지 테마 중 하나라고 생각합니다. -btw. 멋진 모드 라인을 보려면 gist.github.com/jasonm23/8554119
ocodo

13

여러 개의 emacs 창 (> 3)을 많이 사용하고 몇 가지 키 입력을 저장하고 싶다면 이것을 init 파일에 추가하면 더 나을 것입니다.

(defun frame-bck()
  (interactive)
  (other-window-or-frame -1)
)
(define-key (current-global-map) (kbd "M-o") 'other-window-or-frame)
(define-key (current-global-map) (kbd "M-O") 'frame-bck)

이제 Mo로 창문을 빠르게 순환하십시오.


1
이것이 제가 필요한 솔루션입니다. 내가 원했던 것은 창 전환 명령이 단일 반복 키 입력이되는 것이 었습니다. 감사! 다른 창이나 프레임을 다른 창으로 변경해야 제대로 작동합니다. 저는 Emacs 24.2.1을 사용하고 있습니다.
Geoff

나는 이것이 매우 좋은 바인딩이라고 생각합니다 (특히 2 개 이상의 창이있는 경우), 감사합니다. 말했듯 other-window이 작동 하도록 변경하는 모자도 있습니다.
dolzenko 2014 년

11

여기에는 매우 훌륭하고 완전한 답변이 있지만 최소한의 방식으로 질문에 대답하려면 다음과 같이하십시오.

 (defun prev-window ()
   (interactive)
   (other-window -1))

 (define-key global-map (kbd "C-x p") 'prev-window)

2
나는 이후가되면 모르겠지만, 이맥스는 이제 한 previous-window내장.
아르네

@Arne 그것은 호출 가능한 함수가 M-x아니므로 다른 목적을 제공해야합니다.
Ivan Huang

4

@Nate의 아이디어를 기반으로하지만 창 사이의 역방향 순환을 지원하도록 약간 수정되었습니다.

;; Windows Cycling
(defun windmove-up-cycle()
  (interactive)
  (condition-case nil (windmove-up)
    (error (condition-case nil (windmove-down)
         (error (condition-case nil (windmove-right) (error (condition-case nil (windmove-left) (error (windmove-up))))))))))

(defun windmove-down-cycle()
  (interactive)
  (condition-case nil (windmove-down)
    (error (condition-case nil (windmove-up)
         (error (condition-case nil (windmove-left) (error (condition-case nil (windmove-right) (error (windmove-down))))))))))

(defun windmove-right-cycle()
  (interactive)
  (condition-case nil (windmove-right)
    (error (condition-case nil (windmove-left)
         (error (condition-case nil (windmove-up) (error (condition-case nil (windmove-down) (error (windmove-right))))))))))

(defun windmove-left-cycle()
  (interactive)
  (condition-case nil (windmove-left)
    (error (condition-case nil (windmove-right)
         (error (condition-case nil (windmove-down) (error (condition-case nil (windmove-up) (error (windmove-left))))))))))

(global-set-key (kbd "C-x <up>") 'windmove-up-cycle)
(global-set-key (kbd "C-x <down>") 'windmove-down-cycle)
(global-set-key (kbd "C-x <right>") 'windmove-right-cycle)
(global-set-key (kbd "C-x <left>") 'windmove-left-cycle)

4

@Nate, @aspirin 및 @Troydm의 답변에 추가하기 위해 windmove 명령을 선택한 키 조합에 바인딩하기로 결정한 경우 매우 유용한 추가 기능이 있습니다.

(setq windmove-wrap-around t)

기본 구성을 사용하면 존재하지 않는 창으로 이동하려고 할 때 오류가 발생하여 잠시 후 짜증이납니다. 그러나 windmove-wrap-around가 설정된 경우, 예를 들어 프레임 하단에서 벗어나려고하면 대신 프레임의 맨 위 창을 선택합니다. 이것은 당신에게 더 직관적 인 행동 일 수 있습니다.


4

M-n그리고 M-p그들이 유사하기 때문에, 나에게 가장 의미가 있습니다 C-n( 다음 라인 ) 및 C-p( 이전 라인 ) :

(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)

(에 영감 )


이 구성을 찬성하고 사용했습니다. 문제가 있다는 것입니다 M-n그리고 M-p당신은 터미널 버퍼 밖으로 뛰어 다시 다른 방법으로 전환해야하므로 이미 단말기 (GDB, 파이썬, ielm 등)에 사용됩니다.
mihai

이러한 환경에서 어떤 용도로 사용됩니까?
tshepang

지금까지 본 것 중 최고입니다. 다른 것들에 어긋나지 않고 매력적으로 작동합니다! 감사!
aurelien

2

네이트의 대답을 참조, 나는이 (가) 교체 arrow keys전통적인를 사용하는 p것을 위해 up, n가는을 위해 down, f예정 위해 rightb진행을 위해 left. 나는 또한 기본 이동 키 Ctrl와 같이 Super키로 대체했습니다 C-p, C-n, C-f and C-b. 이 조합을 M사용하면 각 키 입력 후 하나씩 이동하는 대신 문자와 줄을 건너 뛸 수 있습니다. 따라서 Super키는 쉬운 키 바인딩을 유지하는 최선의 선택이라고 느꼈습니다. 또한 이제 더 이상 홈 로우에서 손을 떼지 않아도됩니다!

(global-set-key (kbd "s-p") `windmove-up)
(global-set-key (kbd "s-n") `windmove-down)
(global-set-key (kbd "s-f") `windmove-right)
(global-set-key (kbd "s-b") `windmove-left)

도움이 되었기를 바랍니다.


2
(global-unset-key (kbd "M-j"))
(global-unset-key (kbd "M-k"))
(global-set-key (kbd "M-j") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "M-k") (lambda () (interactive) (other-window -1)))

altj그리고 altk당신의 보이는 것과 버퍼대로 순환됩니다. 정확히 앞뒤로.


Mk는 유용한 지름길입니다. 다른 대안이 있습니까?
A_P

1

M-를 사용하여 창을 전환 할 수있는 패키지가 이미 있습니다. 이 웹 사이트를 확인하십시오 . 다음을 초기화 파일에 추가하십시오.

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt

0
(global-set-key (kbd "C-x a") 'ace-swap-window)  
(global-set-key (kbd "C-x q") 'ace-select-window)

download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it 

(package-initialize)                                                                                                                                                                     

(require 'package)                                                                                                                                                                       
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))                                                                                                                

(package-initialize) 

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