답변:
나는 분명히 이것을 위해 에이스 윈도우 를 선호 합니다. 보이는 창과 프레임 사이를 전환 할 수 있습니다. MELPA에 있으며 빠르게 설치할 수 있습니다. 남은 것은 바인딩하는 것입니다.
(global-set-key (kbd "C-x o") 'ace-window)
또는 창 전환은 일반적인 작업이므로 더 짧은 키 코드를 사용할 수도 있습니다.
(global-set-key (kbd "M-p") 'ace-window)
ace-window
의 대체품입니다 other-window
. 후자와는 달리 ace-window
창을 선택하기 위해 두 번 이상 호출 할 필요가 없습니다. 한 번의 호출에서 원하는 창을 선택합니다 (여러 프레임에 걸쳐 가능).
창 전환 외에도 ace-window
더 많은 작업을 수행 할 수 있습니다 (창 삭제 또는 교체 등), README를 참조하십시오 .
ace-window
것을 보았습니다 switch-window
. 우리 둘 다 패키지를 가지고있는 것 같습니다.
switch-window
제출할 때까지는 알지 ace-window
못했습니다.
ace-window
다른 패키지보다 사용자 정의가 더 많습니다. 앞으로도 여전히 도움이 될 수있는 것은 스마트 스왑 작업과 유사한 방식으로 기능을 키 바인딩하는 것입니다. 그러나 해당 창을 먹으면 특정 시점에 더 큰 창이 있고 선택한 크기가 더 작아집니다 (먹은 음식) 창). 이 경우, 비율은 1/2, 1/4 또는 1/3이 될 수있는 것으로 결정되어야한다.
한 가지 방법은을 사용하는 것 windmove
입니다. 기본 키 바인딩을 사용하면 현재 활성화 된 키 옆에있는 창으로 전환 할 수 있습니다.
Emacs에 내장되어 있으므로 따로 설치할 필요가 없습니다. init 파일에서 다음과 같은 최소 설정으로 활성화하십시오.
(windmove-default-keybindings)
그런 다음 (직관적으로 사용되는 화살표 당신이 이동하는 방향을 정의) 다음 키를 사용하여 이웃 창으로 전환 할 수 있습니다 : S-<left>
, S-<right>
, S-<up>
, S-<down>
.
대신 다른 수정자를 사용 shift하려면을에 인수로 제공 할 수 있습니다 windmove-default-keybindings
. 예를 들면 다음과 같습니다.
(windmove-default-keybindings 'meta)
또는
(windmove-default-keybindings 'control)
Emacs Wiki 에서 더 많은 정보 .
(windmove-default-keybindings 'meta)
EmacsWiki에서 제안한 것처럼 함수가 수정 자 키를 인수로 받아 들인다는 것을 언급하기 위해 답을 업데이트 할 가치가 있습니다.
Shift-arrow
있지만 분할이 많은 대형 모니터가 있으면 그러한 움직임이 빨리 다루기 어려워집니다. 어떻게 든 창문 / 분할을 열거하는 것이 더 흥미로울 것입니다. 마찬가지로 ace-window
, 미만 키 프레스 및 명백한 알고리즘 즉시 당신이 원하는 번호를 알아낼 수 있습니다.
other-window
입력하기 쉬운 키 시퀀스에 바인딩 할 수 있습니다 .
예를 들어, 나는 한 C-.
바인딩 other-window
및 C-,
이전 창으로 이동 수밖에.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
이것은 여러 창을 이동할 때 특히 유용합니다. Control을 누른 상태에서 하나의 버튼 만 누르면 다음 창으로 이동합니다. 한 번에 세 번 누르는 것보다 훨씬 쉽습니다.
C-x o
에 대한은 other-window
"최악의 기본 이맥스 바로 가기"의 제목에 대한 몇 가지 고체 경쟁자 중 하나입니다. 내 솔루션 (zck 유사) 바인딩하는 것이었다 other window
A (방법)에 쉽게 키 시퀀스를 - 나는 바인딩이 C-;
(내은 Caps-Lock
과 교환되어 Ctrl
있으므로 걸리는 모두가 새끼 손가락의 빠른 탭입니다). BTW, 나는 특정 기능에 전적으로 의존 해요 helm
및 icicles
(즉, 아니에요 "반 패키지"또는 아무것도); 간단한 해결책이 여기에서 가장 잘 작동한다고 생각합니다.
M-o
합니다 other-window
. 일부 모드는 이미 M-o
바인딩, 특히 diff-mode
, ggtag-mode
하고 ibuffer-mode
. 각 모드 맵에서 수동으로 바인딩을 해제해야합니다. unbind-key
에 의해 제공되는 bind-key.el
것은 매우 유용합니다.
M-o
하고 , 추가 힘이 필요할 때에 M-O
묶여있다 ace-window
.
window-numbering.el!
특정 창을 전환하기 위해 핫키 ", 1", ", 2", ", 3"을 할당합니다 (악한 모드를 사용함에 유의하십시오)
또한 모드 줄에 창 번호를 PINK 색상으로 밑줄로 표시합니다.
무시할 수없는 시각적 힌트입니다.
그건 빠른 방법 창을 전환 할 수 있습니다.
https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el 및 https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline을 확인 하십시오. .el 내 설정입니다.
Sylvain Benner는 스페이스 맥에서 내 아이디어를 채택했지만 키 바인딩은 다릅니다 . 따라서 스페이스 맥을 사용하면 가장 빠른 솔루션을 즉시 얻을 수 있습니다.
window-number
사용 M-<num>
하여 흑백 창을 빠르게 전환합니다. 이것과 유사한 개념
추가 애드온을 사용하지 않아도 C-x o
선택적 접두사를 계속 사용 하여 많은 창을 건너 뛸 수 있습니다. 예 : C-u 1 C-x o
순서대로 다음 창으로 이동합니다 (즉, 일반으로 얻을 수있는 것 C-x o
). C-u 2 C-x o
두 개의 창으로 넘어 C-u 3 C-x o
가고 세 개의 창으로 넘어갑니다.
other-window
docstring 에서 발췌 (함수 C-x o
:
COUNT는 선택하기 전에 선택한 창부터 시작하여 건너 뛸 창 수를 지정합니다. COUNT가 양수이면 앞으로 COUNT 개의 창을 건너 뜁니다. COUNT가 음수이면 -COUNT 개의 창을 뒤로 건너 뜁니다. COUNT 0은 창을 건너 뛰지 않음을 의미하므로 선택한 창을 선택하십시오. 대화식 호출에서 COUNT는 숫자 접두사 인수입니다. nil을 반환합니다.
어떤 사람들은 편집자 브리프 (Underware라는 회사가 충분히 생산 한)를 기억할 것입니다.
보이는 창 사이를 전환하는 깔끔한 방법이있었습니다. M- 화살표는 화살표 키의 방향에 따라 커서를 창으로 직접 이동시킵니다.
그래서, 매핑 winmove-left
, winmove-right
, winmove-up
과 winmove-down
에 함수 M-left
, M-right
, M-up
및 M-down
내 이맥스 파일의 키로는 다음을 -
(global-set-key [M-left] 'windmove-left) ; move to left window
(global-set-key [M-right] 'windmove-right) ; move to right window
(global-set-key [M-up] 'windmove-up) ; move to upper window
(global-set-key [M-down] 'windmove-down) ; move to lower window
이제 구성이 어수선한 지에 관계없이 창 사이를 쉽게 이동할 수 있습니다. 요즘에는 디스플레이 크기에 따라 상당히 어수선해질 수 있습니다 ...
(windmove-default-keybindings 'meta)
!
당신이 사용하는 경우 차가워 요 다음 C-x o
수 있습니다 당신은에 의해 창을 선택 이름 (또는 자전거로)을.
어떤 접두사 인수로, C-x o
평소와 같이 동일 other-window
프레임이 인 경우에 하나의 창을 가지고 있지 않는 other-frame
.
접두사 arg 를 사용하면 이름 또는 사이클별로 창이나 프레임을 탐색 할 수 C-x o
있는 다중 명령 이 있습니다. 창을 탐색하려면 다중 명령을 사용합니다 icicle-select-window
. 프레임 간 탐색은을 사용합니다 icicle-select-frame
.
사용되는 탐색은 접두사 arg에 따라 다릅니다.
접두사 제로 인수 (예 :) C-0
: 선택한 프레임에 여러 개의
icicle-select-window
창이있는 경우 후보 와 같은 프레임에 창이 있습니다. 그렇지 않으면 (단일 창 프레임), 이것은입니다 icicle-select-frame
.
C-u
: 선택한 프레임에 여러 개의 창이있는 경우
icicle-select-window
모든 보이는 프레임의 창을 후보로 사용하는 창입니다 . 그렇지 않으면 이것은입니다 icicle-select-frame
.
C-u C-u
: icicle-select-window
, 모든 프레임의 윈도우를 후보 (아이콘 화되거나 숨겨진 프레임 포함)로 사용합니다.
항상 Icicles 에서와 같이 (a) 완성 , 텍스트를 입력하여 일치하는 후보 세트 (이 경우 창 또는 프레임 이름)를 좁히고 (b) 사이클링 (매칭 후보 중)으로 결합 할 수 있습니다.
창 사이를 빠르게 이동하려면 키 코드 를 사용하십시오 . 나는 수정 키에 도달하는 것보다 훨씬 빠릅니다 (그리고 내 손의 긴장도 적습니다).
사용할 패키지를 선택 ace-window
하면 여러 창을 쉽게 탐색 할 수 있습니다 other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
분명히 당신이 필요 로하는를 사용 key-chord
하고 ace-window
, 둘 다 melpa에서 사용할 수 있습니다.
ace-window
@ abo-abo의 대답 에서처럼 작업을하고 있기 때문에 질문을 제기했습니다 . 이 맥락에서 사용할 특정 키 바인딩은 대답이 아닌 주석으로 이해하는 것이 더 좋습니다. 내 두 센트.
key-chord
접근성이 뛰어난 키 조합을 바인딩 할 수 있습니다. 바인딩의 예 xo
는 C-x o
(1 대 2의 깊이) 보다 빠릅니다 . 이 답변은 기능 선택에 대한 다른 답변과 직교한다는 것을 강조하기 위해 다시 쓰여질 수 있습니다 (그리고 ace-window
설명 된 방식으로 묶을 수있는 많은 선택 중 하나 일뿐입니다). 이 답변을 명확하게 유지하십시오!
여기에 좋은 대답이 있습니다. WinMove의 팬이기도하지만 조직 모드가 M을 사용하여 제목을 조작하기 때문에 C에 바인딩합니다.
(define-key global-map (kbd "C-<up>") 'windmove-up)
(define-key global-map (kbd "C-<down>") 'windmove-down)
(define-key global-map (kbd "C-<left>") 'windmove-left)
(define-key global-map (kbd "C-<right>") 'windmove-right)
그것이 정말로 좋은 곳은 Hydra 와 결합하면입니다 . Wiki 의 예제에 따라 내 괴물을 만들었습니다.
(defhydra hydra-windows ()
"C-arrow = switch, S-arrow = size, M-arrow = move"
("C-<left>" windmove-left nil)
("C-<right>" windmove-right nil)
("C-<up>" windmove-up nil)
("C-<down>" windmove-down nil)
("S-<left>" hydra-move-splitter-left nil)
("S-<right>" hydra-move-splitter-right nil)
("S-<up>" hydra-move-splitter-up nil)
("S-<down>" hydra-move-splitter-down nil)
("M-<left>" buf-move-left nil)
("M-<right>" buf-move-right nil)
("M-<up>" buf-move-up nil)
("M-<down>" buf-move-down nil)
("p" previous-buffer "prev-buf")
("n" next-buffer "next-buf")
("1" delete-other-windows "1")
("d" delete-window "del")
("k" kill-buffer "kill")
("s" save-buffer "save")
("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
("r" winner-redo "redo")
("b" helm-mini "helm-mini" :exit t)
("f" helm-find-files "helm-find" :exit t)
("|" (lambda () (interactive) (split-window-right) (windmove-right)))
("_" (lambda () (interactive) (split-window-below) (windmove-down)))
("q" nil "cancel")
)
(global-set-key (kbd "M-#") 'hydra-windows/body)
이를 통해 창을 변경하고, 크기를 조정하고, 창에서 창으로 버퍼를 이동하고, 버퍼를 순환하고, 버퍼를 종료하고, 승자 모드를 통해 창 구성을 취소 할 수 있으며, 키도 통합합니다. 히드라를 종료하려면 화살표 나 히드라에없는 다른 키를 누르십시오. hydra 예제 에서 "hydra-move"함수를 찾을 수 있습니다 . hydra 의 가장 큰 장점은 모든 키 바인딩과 "modern"을 기억할 필요가 없기 때문에 일단 hydra에 있으면 모든 것이 단일 키로 제공됩니다. 프레스.
(windmove-default-keybindings 'control)
입니다.
평소와 같이이 작업을 수행 할 수있는 다양한 방법이 있습니다. 내가 선호하는 방법은 NumberedWindows 입니다. 그런 다음 Super와 키 1-9를 사용하여 다음 키 바인딩을 설정합니다.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
오후 코더에서 읽을 수있는 최근 게시물을 사용 하여이 정확한 주제에 대해 좀 더 자세히 설명합니다 .