2008-09-18 8 views

Respuesta

80

Eso sería C-- C-x o

En otras palabras, C-x o con un argumento de -1. Puede especificar cuántas ventanas mover insertando un argumento numérico entre C-u y el comando, como en C-u 2 C-x o. (C-- es un acceso directo para C-u - 1)

95

También puede ser que desee intentar usar windmove que le permite navegar a la ventana de su elección basada en la geometría. Tengo lo siguiente en mi archivo .emacs para cambiar ventanas usando C-x tecla de flecha.

(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) 
+0

¡Gran idea - apenas la amo! –

+0

coool ~~ usted tiene mi voto. Soy nuevo en emacs (pero lo amo ... genio). Por cierto, ¿qué significa el 'kbd'? – lkahtz

+0

Por cierto, eso es similar a [ratpoison] (http://www.nongnu.org/ratpoison/) los comandos para [pasar a otros "marcos"] (http://www.nongnu.org/ratpoison/doc/ Default-Key-Bindings.html # Default% 20Key% 20Bindings): 'Ct Up',' Ct Down', etc. –

4

base sobre la idea de @Nate pero ligeramente modificado para dar soporte al revés ciclo entre ventanas

;; 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) 
12

si se trabaja con múltiples ventanas (emacs> 3) mucho y tendrá que guardar algunas pulsaciones de teclado añadir esto a su archivo de inicio y usted va a estar mejor:

(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) 

Ahora solo ciclo rápidamente a través de las ventanas con Mo

+1

Esta es exactamente la solución que necesitaba. Todo lo que quería era que el comando de cambio de ventana fuera una sola pulsación de tecla repetitiva. ¡Gracias! Tuve que cambiar other-window-or-frame a other-window para que funcione, FYI. Estoy en Emacs 24.2.1. – Geoff

+0

Creo que estas son muy buenas fijaciones (especialmente cuando tienes más de 2 ventanas), gracias. Como también dije, cambie a 'other-window' para que funcione. – dolzenko

27

personalmente prefiero utilizar window-number.el

Para seleccionar una ventana diferente, utilice Ctrl - x, Ctrl - jn

Dónde n es el número de la ventana, la línea de mode de cada ventana muestra su número, como se muestra en la captura de pantalla.

sólo tiene que descargar window-number.el, colocarlo en sus emacs load-path y utilizar lo siguiente en su .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) 

Hay otro modo similar llamado switch-window.el que le da grandes números en las ventanas. .. (presionando el número cambia la ventana y revierte la pantalla.)

http://tapoueh.org/images/emacs-switch-window.png

+1

Agradable, pero sugeriría que no se vincule algo a 'C-x C-j', ya que ese es el enlace predeterminado para' dired-jump' si '(requiere 'dired-x)'. (Consulte 'Mx customize-group RET dired-keys RET' si desea sobrescribirlo.) – phils

+1

Después de publicar esto, decidí darle una oportunidad a' switch-window.el', en su lugar usa 'Cx o', y cuando hay solo dos ventanas activas, solo selecciona la otra ventana. Creo que es más prudente volver a enlazar 'C-x o' para hacer el truco' window-number', tienes razón sobre 'dired-jump'. Personalmente hago menos cambio de ventana y uso 'C-x b', pero tener el mejorado' C-x o' es bastante agradable. – ocodo

+0

wow increíble tema de Emacs en la primera captura de pantalla. ¿Cómo puedo obtenerlo? – semente

1

Ya existe un paquete que le permite cambiar de ventana usando M-. check this website.Agregue esto a su archivo de inicio:

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

sólo para añadir a @Nate, y @aspirin @ respuesta de Troydm Me parece que este es un complemento muy útil si decide unirse a los comandos de windmove a cualquier combinación de teclas que elija :

(setq windmove-wrap-around t) 

con la configuración por defecto obtendrá un error cuando se llega a tratar de mover a una ventana que no existe, que se convierte en un poco molesto después de un tiempo. Sin embargo, cuando se establece windmove-wrap-around, intentar mover la parte inferior del marco, por ejemplo, en su lugar seleccionará la ventana más alta en el marco. Este puede ser un comportamiento más intuitivo para ti.

11

Hay algunas respuestas muy buenas y completas aquí, pero para responder a la pregunta de una manera minimalista:

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

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

No sé desde cuándo, pero emacs tiene ahora '' previous-window'' incorporado. – Arne

3

M-n y M-p tiene más sentido para mí, ya que son análogos a C-n (próximo -line) y C-p (anterior línea):

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

(inspirado por a this y that)

+0

Probado en Emacs 24. – Tshepang

+0

I He votado arriba y usé esta configuración. El problema es que 'M-n' y' M-p' ya se usan en terminales (gdb, python, ielm, etc.), por lo que tendrás que volver a cambiar a otro método para salir del buffer de la terminal. – mihai

+0

¿Para qué se usan en esos entornos? – Tshepang

2

En referencia a la respuesta de Nate, que sustituyó a la arrow keys utilizar el tradicional p para ir up, n para ir down, f para ir right y b para ir left. También reemplacé el Ctrl con la clave Super ya que C-p, C-n, C-f and C-b son las teclas de movimiento predeterminadas. Esta combinación con M le permite saltar caracteres y líneas en lugar de pasar solo uno por uno después de cada pulsación de tecla. Por lo tanto, la clave Super fue la mejor opción para mantenerla como un enlace fácil. ¡Además, ahora ya no tienes que quitar la mano de la fila de inicio!

(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) 

Espero que ayude!

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 y altk ciclo voluntad a través de sus Visibles buffers. Hacia adelante y hacia atrás, para ser exactos.

+0

M-k es un atajo bastante útil. alguna otra alternativa? –

Cuestiones relacionadas