¿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 ollegar 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 ollegar 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-windowEs un reemplazo directo para other-window. A diferencia de este último, nunca tiene que llamar ace-windowdos 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-windowpuede hacer más (eliminar o intercambiar ventanas, etc.), vea README .
ace-windowy luego vi switch-windowque parece hacer más o menos lo mismo, excepto que las letras son más pronunciadas. Parece divertido que tengamos ambos paquetes.
switch-windowhasta que me ace-windowpresenté 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-windowa 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 opara other-windowes 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 windowa una secuencia de teclas (mucho más fácil): lo tengo vinculado C-;(y mi Caps-Lockse intercambia con Ctrllo 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 helmy icicles(es decir, no soy "anti-paquetes" ni nada); Solo creo que una solución simple funciona mejor aquí.
M-opara other-window. Algunos modos ya tienen M-ode unión, en particular diff-mode, ggtag-modey ibuffer-mode. Debe desenlazarlo manualmente en cada mapa de modo. unbind-keyproporcionado por bind-key.eles muy útil.
M-otambién, y han M-Oobligado a ace-windowpara 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-numbercon 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 ocon un prefijo opcional para omitir esa cantidad de ventanas. Por ejemplo: C-u 1 C-x oirá a la siguiente ventana en el orden (es decir, lo que obtendría con simple C-x o), C-u 2 C-x opasa dos ventanas, C-u 3 C-x opasa tres ventanas, y así sucesivamente.
Un extracto de la other-windowcadena 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-upy winmove-downfunciones a M-left, M-right, M-upy M-downlas 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 opermite seleccionar ventanas por nombre (o en bicicleta).
Sin prefijo arg, C-x oes el mismo de siempre, a other-windowmenos que el marco tenga solo una ventana, en cuyo caso lo es other-frame.
Con un prefijo arg, C-x oes 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-chordy ace-window, ambos están disponibles en melpa.
ace-windowestá 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-chordpermite enlazar combinaciones de teclas muy accesibles. El enlace de ejemplo de xoes 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-windowes 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-wselecciona la primera ventana en orden cíclico, 3 C-w C-welige 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 windmovemá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-windowsobre todos los demás?