web-dev-qa-db-fra.com

Emacs, passer à la fenêtre précédente

À Emacs, C-x o m'emmène à la fenêtre suivante.

Quelle macro clavier me conduit à la fenêtre précédente dans Emacs?

91

Ça 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 le commandement, comme dans C-u 2 C-x o. (C-- est un raccourci pour C-u - 1)

84
JB.

Vous pouvez également essayer d’utiliser Windmove, qui vous permet d’accéder à la fenêtre de votre choix en fonction de la géométrie. J'ai le suivant dans mon fichier .emacs pour changer de fenêtre en utilisant C-x arrow-key.

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

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

Pour sélectionner une autre fenêtre, utilisez Ctrl-xCtrl-j  n

n est le numéro de la fenêtre. Le modèle de chaque fenêtre indique son numéro, comme indiqué sur la capture d'écran.

Il suffit de télécharger window-number.el , de le placer dans votre chemin de chargement emacs et d’utiliser ce qui suit 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 existe un autre mode similaire appelé switch-window.el qui vous donne de gros chiffres dans les fenêtres ... (appuyer sur le numéro fait basculer la fenêtre et rétablit l'affichage.)

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

29
ocodo

Si vous travaillez souvent avec plusieurs fenêtres emacs (> 3) et que vous souhaitez enregistrer quelques frappes au clavier, ajoutez ceci à votre fichier init et vous serez mieux loti:

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

Il suffit maintenant de parcourir rapidement les fenêtres avec M-o

12
octi

Il existe quelques réponses très bonnes et complètes ici, mais pour répondre à la question de manière minimaliste:

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

 (define-key global-map (kbd "C-x p") 'prev-window)
11
bnzmnzhnz

M-n et M-p me semblent les plus judicieux, car ils sont analogues à C-n (next-line) et C-p (previous-line):

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

(inspiré par to this and that )

4
Tshepang

Pour ajouter à la réponse de @Nate, @aspirin et @ Troydm, je trouve cet ajout très utile si vous décidez de lier les commandes windmove à la combinaison de touches de votre choix:

(setq windmove-wrap-around t)

Avec la configuration par défaut, vous obtiendrez une erreur lorsque vous tenterez de passer à une fenêtre inexistante qui devient un peu gênante après un certain temps. Cependant, lorsque l'option windmove-wrap-around est définie, le fait de tenter de sortir du bas du cadre, par exemple, sélectionne la fenêtre la plus haute dans le cadre. Cela peut être un comportement plus intuitif pour vous.

4
Hal

Base sur l'idée de @Nate, mais légèrement modifiée pour prendre en charge le cycle arrière

;; 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)
4
Troydm
(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 fera défiler vos tampons visibles. Avant et arrière, pour être exact.

2
sjas

En référence à la réponse de Nate, j'ai remplacé le arrow keys par le traditionnel p pour up, n pour down, f pour right et b pour left. J'ai également remplacé la Ctrl par la clé Super en tant que C-p, C-n, C-f and C-b sont les clés de déplacement par défaut. Cette combinaison avec M vous permet de sauter des caractères et des lignes au lieu de les parcourir un par un après chaque frappe. Ainsi, la clé Super est apparue comme le meilleur choix pour rester une liaison de clé facile. De plus, vous n’êtes plus obligé de retirer votre main du rang à la maison!

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

J'espère que ça aide!

2
Indradhanush Gupta

Il existe déjà un package qui vous permet de changer de fenêtre à l’aide de M-. consultez ce site . Ajoutez ceci à votre fichier init:

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
1
aspirin
(global-set-key (kbd "C-x a") 'ace-swap-window)  
(global-set-key (kbd "C-x q") 'ace-select-window)

download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it 

(package-initialize)                                                                                                                                                                     

(require 'package)                                                                                                                                                                       
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))                                                                                                                

(package-initialize) 

then "m-x list-packages"
0
user9618991