¿Cómo cambio entre ventanas rápidamente?
A menudo tengo varias ventanas abiertas y necesito cambiar entre ellas. En este momento, solía C-x o
llegar al que quiero. ¿Hay un flujo de trabajo más eficiente disponible para esto?
¿Cómo cambio entre ventanas rápidamente?
A menudo tengo varias ventanas abiertas y necesito cambiar entre ellas. En este momento, solía C-x o
llegar al que quiero. ¿Hay un flujo de trabajo más eficiente disponible para esto?
Respuestas:
Obviamente prefiero ace-window para esto. Puede cambiar entre ventanas y marcos visibles. Está en MELPA, puedes instalarlo rápidamente. Lo único que queda por hacer es atarlo:
(global-set-key (kbd "C-x o") 'ace-window)
O tal vez use un acorde de tecla más corto, ya que cambiar ventanas es una tarea común:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
Es un reemplazo directo para other-window
. A diferencia de este último, nunca tiene que llamar ace-window
dos o más veces para seleccionar una ventana: selecciona la ventana que desea en una llamada (posiblemente en varios marcos).
Además de cambiar ventanas, ace-window
puede hacer más (eliminar o intercambiar ventanas, etc.), vea README .
ace-window
y luego vi switch-window
que parece hacer más o menos lo mismo, excepto que las letras son más pronunciadas. Parece divertido que tengamos ambos paquetes.
switch-window
hasta que me ace-window
presenté a MELPA.
ace-window
, tiene más personalización que otros paquetes, supongo. Aún así, uno podría ser de ayuda en el futuro es un enlace clave para una función que sería similar a la acción de intercambio inteligente, pero se come esa ventana, lo que da como resultado una ventana más grande en el punto y una ventana elegida de menor tamaño (el comido ventana hacia arriba). La relación debe determinarse en este caso como puede ser la mitad, un cuarto o un tercio.
Una forma es usar windmove
. Con sus combinaciones de teclas predeterminadas, permite cambiar a la ventana junto a la actualmente activa.
Está construido en Emacs, por lo que no es necesario instalar nada; simplemente actívelo con la siguiente configuración mínima en su archivo init:
(windmove-default-keybindings)
A continuación, puede cambiar a ventanas vecinas utilizando las siguientes teclas (donde la flecha se utiliza de forma intuitiva define la dirección en que se mueve): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Si prefiere usar otro modificador en lugar de shift, puede proporcionarlo como argumento para windmove-default-keybindings
. Por ejemplo:
(windmove-default-keybindings 'meta)
o
(windmove-default-keybindings 'control)
Más información en Emacs Wiki .
(windmove-default-keybindings 'meta)
como se sugiere en EmacsWiki.
Shift-arrow
) , pero cuando tienes un monitor grande con muchas divisiones, ese movimiento rápidamente se vuelve difícil de manejar. Sería más interesante enumerar de alguna manera ventanas / divisiones. Me gusta ace-window
, pero con menos pulsaciones de teclas y un algoritmo obvio para averiguar de inmediato el número que desea.
Puede vincularse other-window
a una secuencia de teclas más fácil de escribir.
Por ejemplo, he C-.
unido a other-window
, y C-,
obligado a ir a la ventana anterior.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Esto es especialmente útil para mover múltiples ventanas; una vez que mantienes presionado Control, solo tienes que presionar un solo botón para pasar a la siguiente ventana. Esto es mucho más fácil que tres pulsaciones de teclas por movimiento.
C-x o
para other-window
es uno de los pocos competidores sólidos por el título de "peor atajo predeterminado de emacs". Mi solución (similar a zck) fue volver a vincular other window
a una secuencia de teclas (mucho más fácil): lo tengo vinculado C-;
(y mi Caps-Lock
se intercambia con Ctrl
lo que todo lo que se necesita es un toque rápido de los meñiques). Por cierto, soy totalmente dependiente de ciertas características de helm
y icicles
(es decir, no soy "anti-paquetes" ni nada); Solo creo que una solución simple funciona mejor aquí.
M-o
para other-window
. Algunos modos ya tienen M-o
de unión, en particular diff-mode
, ggtag-mode
y ibuffer-mode
. Debe desenlazarlo manualmente en cada mapa de modo. unbind-key
proporcionado por bind-key.el
es muy útil.
M-o
también, y han M-O
obligado a ace-window
para cuando necesito la energía adicional.
numeración de ventanas.
Asigno la tecla de acceso rápido ", 1", ", 2", ", 3" para cambiar la ventana específica (tenga en cuenta que uso el modo malvado)
además, muestro el número de ventana en la línea de modo en color ROSADO, subrayado.
Es una pista visual que nunca puedes ignorar,
Esa es la forma más rápida de cambiar de ventana.
consulte https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el y https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el para mi configuración.
Sylvain Benner adoptó mi idea en los spacemacs, pero las combinaciones de teclas son diferentes . Entonces, si usa spacemacs, obtiene la solución más rápida de la caja.
window-number
con M-<num>
para cambiar rápidamente las ventanas en blanco y negro. Concepto similar a este
Sin usar complementos adicionales, puede continuar usándolo C-x o
con un prefijo opcional para omitir esa cantidad de ventanas. Por ejemplo: C-u 1 C-x o
irá a la siguiente ventana en el orden (es decir, lo que obtendría con simple C-x o
), C-u 2 C-x o
pasa dos ventanas, C-u 3 C-x o
pasa tres ventanas, y así sucesivamente.
Un extracto de la other-window
cadena de documentación (la función llamada por C-x o
:
COUNT especifica el número de ventanas a omitir, comenzando con la ventana seleccionada, antes de realizar la selección. Si COUNT es positivo, omita COUNT ventanas hacia adelante. Si COUNT es negativo, omita -COUNT ventanas hacia atrás. COUNT zero significa que no omita ninguna ventana, por lo tanto, seleccione la ventana seleccionada. En una llamada interactiva, COUNT es el argumento de prefijo numérico. Regreso nulo.
Algunas personas pueden recordar el editor Brief (curiosamente producido por una compañía llamada Underware).
Tenía una buena forma de cambiar entre ventanas visibles. La flecha M movería el cursor a la ventana directamente en línea con la dirección de la tecla de flecha.
Por lo tanto, Me asignan los winmove-left
, winmove-right
, winmove-up
y winmove-down
funciones a M-left
, M-right
, M-up
y M-down
las teclas de la siguiente manera en mi archivo .emacs -
(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
Ahora puedo moverme con facilidad entre ventanas, independientemente de lo desordenada que tenga la configuración ... Y puede estar bastante abarrotada con el tamaño de las pantallas hoy en día ...
(windmove-default-keybindings 'meta)
!
Si usa Icicles, entonces le C-x o
permite seleccionar ventanas por nombre (o en bicicleta).
Sin prefijo arg, C-x o
es el mismo de siempre, a other-window
menos que el marco tenga solo una ventana, en cuyo caso lo es other-frame
.
Con un prefijo arg, C-x o
es un comando múltiple que le permite navegar entre ventanas o marcos por nombre (o en bicicleta). Navegar entre ventanas usa comandos múltiples icicle-select-window
; navegando entre usos de marcos icicle-select-frame
.
La navegación que se usa depende del prefijo arg:
Argumento de prefijo cero (p C-0
. Ej. ): Si el marco seleccionado tiene varias ventanas, esto es
icicle-select-window
, con ventanas en el mismo marco que los candidatos. De lo contrario (marco de ventana única), esto es icicle-select-frame
.
C-u
: Si el marco seleccionado tiene múltiples ventanas, entonces esta es
icicle-select-window
, con ventanas de todos los marcos visibles como candidatos. De lo contrario, esto es icicle-select-frame
.
C-u C-u
: icicle-select-window
, con ventanas de todos los marcos como candidatos (incluidos los marcos iconificados u ocultos).
Como siempre en Icicles , puede combinar (a) completar , escribir texto para reducir el conjunto de candidatos coincidentes (nombres de ventana o marco, en este caso), con (b) ciclismo (entre candidatos coincidentes).
Considere usar un acorde de tecla para saltar rápidamente entre ventanas. Lo encuentro mucho más rápido que alcanzar una tecla modificadora (y menos esfuerzo en mis manos también).
Mi elección de paquete para usar es ace-window
, que le permite navegar por múltiples ventanas más fácil que solo other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Obviamente para usar esto necesitas key-chord
y ace-window
, ambos están disponibles en melpa.
ace-window
está haciendo el trabajo como en la respuesta de @ abo-abo. Me parece que, en este contexto, la combinación de teclas específica para usar tendría más sentido como un comentario que como una respuesta. Solo mis dos centavos.
key-chord
permite enlazar combinaciones de teclas muy accesibles. El enlace de ejemplo de xo
es más rápido que C-x o
(profundidad de uno frente a dos). Esta respuesta podría reformularse para enfatizar que la respuesta es ortogonal a las otras respuestas sobre la selección de funciones (y ace-window
es solo una de las muchas opciones que podrían vincularse de la manera descrita). ¡Mantenga esta respuesta como distinta!
Algunas buenas respuestas aquí, también soy fanático de WinMove, pero lo asocio a C- porque org-mode usa M- para manipular encabezados
(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)
Donde se pone realmente bueno es si lo combinas con Hydra . Siguiendo los ejemplos en su wiki , creé mi propio monstruo:
(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)
Esto me permite cambiar ventanas, redimensionarlas, mover buffers de una ventana a otra, alternar buffers, eliminar buffers e incluso deshacer configuraciones de ventanas a través del modo ganador, y también integra el timón. Para salir de la hidra, simplemente presione la flecha o alguna otra tecla que no esté en la hidra. Puede encontrar las funciones de "movimiento de hidra" en los ejemplos de hidra. Lo mejor de la hidra es que no tengo que recordar todas esas combinaciones de teclas y es "modesta", así que una vez que esté en la hidra, todo estará disponible como una sola tecla. prensa.
(windmove-default-keybindings 'control)
.
Si lo usa evil-mode
, puede usar un prefijo numérico con C-w C-w
( evil-window-next
) para elegir la ventana que desee. Entonces: 1 C-w C-w
selecciona la primera ventana en orden cíclico, 3 C-w C-w
elige la tercera ventana en orden cíclico, y así sucesivamente.
Ace Jump le permite navegar su puntero a todas las palabras en una pantalla, independientemente de en qué ventana o marco se encuentren, por lo que no es tan diferente de usar Ace Window o Switch Window.
Una ventaja podría ser que al saltar ventanas también puede colocar el puntero con cierta precisión.
Todavía lo encuentro un poco engorroso o distractor, y encuentro que estoy usando windmove
más, porque es muy simple, pero aún así uso Ace Jump cuando he estado leyendo en otra ventana o marco y quiero moverme a un lugar allí.
Como de costumbre, hay cientos de formas diferentes de lograr esto. Mi forma preferida es usar NumberedWindows . Luego configuro la siguiente combinación de teclas usando Super y las teclas 1-9.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Entro en un poco más de detalle sobre este tema exacto con una publicación reciente que puedes leer en Afternoon Coder .
También puede optar por usar switch-window como un reemplazo visual paraC-x o
switch-window
sobre todos los demás?