2008-09-18 10 views

Répondre

80

Ce serait C-- C-x o

En d'autres termes, C-x o avec un argument de -1. Vous pouvez spécifier le nombre de fenêtres à déplacer en insérant un argument numérique entre C-u et la commande, comme dans C-u 2 C-x. (C-- est un raccourci pour C-u - 1)

95

Vous pouvez également essayer d'utiliser windmove qui vous permet de naviguer vers la fenêtre de votre choix en fonction de la géométrie. J'ai ce qui suit dans mon fichier .emacs pour changer les fenêtres en utilisant C-x flèche-clé.

(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

Bonne idée - adorez-le! –

+0

coool ~~ vous avez mon vote. Je suis nouveau à Emacs (mais je l'aime ... génie). BTW, quel est le «kbd» pour? – lkahtz

+0

BTW, c'est similaire aux commandes de [ratpoison] (http://www.nongnu.org/ratpoison/) pour [passer à d'autres "frames"] (http://www.nongnu.org/ratpoison/doc/ Default-Key-Bindings.html # Default% 20Key% 20Bindings): 'Ct Up',' Ct Down', etc. –

4

base sur idée de @Nate mais légèrement modifiée pour soutenir le cyclisme en arrière entre les fenêtres

;; 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 vous travaillez avec plusieurs fenêtres emacs (> 3) beaucoup et vous voulez économiser quelques frappes ajouter à votre fichier init et vous serez mieux:

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

maintenant, il suffit parcourir rapidement à travers les fenêtres avec Mo

+1

C'est exactement la solution dont j'avais besoin. Tout ce que je voulais, c'était que la commande de changement de fenêtre soit une seule frappe répétée. Merci! J'ai dû changer other-window-or-frame à other-window pour le faire fonctionner, FYI. Je suis sur Emacs 24.2.1. – Geoff

+0

Je pense que ce sont de très bonnes liaisons (surtout quand vous avez 2+ fenêtres), merci. Comme dit aussi chapeau à changer à 'other-window' pour le faire fonctionner. – dolzenko

27

Personnellement, je préfère utiliser window-number.el

Pour sélectionner une autre fenêtre, utilisez Ctrl - x, Ctrl - jn

n est le nombre de fenêtre, la modeline de chaque fenêtre montre son numéro, comme le montre la capture d'écran.

Il suffit de télécharger window-number.el, placez-le dans vos emacs load-path et utiliser les éléments suivants dans votre .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) 

Il y a un autre mode similaire appelé switch-window.el qui vous donne de grands nombres dans les fenêtres. .. (le fait d'appuyer sur le numéro change la fenêtre et rétablit l'affichage.)

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

+1

Bien, mais je suggère de ne pas lier quelque chose à 'C-x C-j', car c'est la liaison par défaut pour' dired-jump' si vous '(require 'dired-x)'. (Voir 'Mx personnaliser-groupe RET dired-keys RET' si vous voulez surcharger cela.) – phils

+1

Après avoir posté ceci, j'ai décidé d'utiliser' switch-window.el', il utilise 'Cx o' à la place, et quand il y a seulement deux fenêtres actives, il sélectionne simplement l'autre fenêtre. Je pense qu'il est plus sage de relier 'C-x o' pour faire le truc' window-number', vous avez raison sur 'dired-jump'. Personnellement, je fais moins de changement de fenêtre et j'utilise 'C-x b' moi-même, mais avoir le' C-x o' amélioré est assez agréable. – ocodo

+0

wow incroyable thème Emacs dans la première capture d'écran. comment puis-je l'avoir? – semente

1

Il existe déjà un package qui vous permet de changer de fenêtre en utilisant M-. check this website.Ajoutez ceci à votre fichier init:

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

Juste pour ajouter à @Nate, @aspirin et @ la réponse de Troydm Je trouve cela un ajout très utile si vous décidez de lier les windmove commandes à ne importe quelle combinaison de touches que vous choisissez :

(setq windmove-wrap-around t) 

Avec la configuration par défaut, vous obtiendrez une erreur quand vous arrivez à tenter de passer à une fenêtre qui n'existe pas qui devient assez ennuyeux après un certain temps. Cependant, lorsque windmove-wrap-around est défini, tenter de quitter le bas du cadre, par exemple, sélectionnera à la place la fenêtre la plus haute du cadre. Cela peut être un comportement plus intuitif pour vous.

11

Il y a quelques très bons et des réponses complètes ici, mais pour répondre à la question de façon minimaliste:

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

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

Je ne sais pas depuis quand, mais emacs a maintenant '' previous-window'' intégré. – Arne

3

M-n et M-p fait me le plus de sens, car ils sont analogues à C-n (suivant -ligne) et C-p (ligne précédente):

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

(inspiré pour this et that)

+0

Testé sur Emacs 24. – Tshepang

+0

I 'ai upvoted et utilisé cette config. Le problème est que 'M-n' et' M-p' sont déjà utilisés dans les terminaux (gdb, python, ielm, etc.) donc vous devrez revenir à une autre méthode pour sauter du tampon du terminal. – mihai

+0

Dans quel cas sont-ils utilisés dans ces environnements? – Tshepang

2

En ce qui concerne la réponse de Nate, j'ai remplacé le arrow keys d'utiliser la p traditionnelle pour aller up, n pour aller down, f pour aller right et b pour aller left. J'ai également remplacé le Ctrl avec la clé Super comme C-p, C-n, C-f and C-b sont les touches de mouvement par défaut. Cette combinaison avec M vous permet de sauter des caractères et des lignes au lieu de passer un par un après chaque frappe. Ainsi, la clé Super a senti le meilleur choix pour garder la touche facile. Aussi, maintenant vous n'avez plus besoin de retirer votre main de la ligne d'attache!

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

Espérons que ça aide!

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 et altk cycle permet de faire défiler vos tampons de Visibles. En avant et en arrière, pour être exact.

+0

M-k est un raccourci utile. d'autres alternatives? –

Questions connexes