webentwicklung-frage-antwort-db.com.de

Emacs, zum vorherigen Fenster wechseln

In Emacs C-x o Bringt mich zum nächsten Fenster.

Welches Tastaturmakro bringt mich zum vorherigen Fenster in Emacs?

91

Das wäre es C-- C-x o

Mit anderen Worten, C-x o mit einem Argument von -1. Sie können angeben, wie viele Fenster verschoben werden sollen, indem Sie ein numerisches Argument dazwischen einfügen C-u und der Befehl, wie in C-u 2 C-x o. (C-- ist eine Abkürzung für C-u - 1)

84
JB.

Vielleicht möchten Sie auch Windmove ausprobieren, um auf der Grundlage der Geometrie zu einem Fenster Ihrer Wahl zu navigieren. Ich habe folgendes in meiner .emacs-Datei, um Fenster mit der C-x-Pfeiltaste zu ändern.

(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

Persönlich bevorzuge ich window-number.el

Verwenden Sie, um ein anderes Fenster auszuwählen Ctrl-xCtrl-j  n

Wobei n die Nummer des Fensters ist, zeigt die Modeline jedes Fensters seine Nummer, wie im Screenshot gezeigt.

Lade einfach window-number.el herunter, lege es in deinen Emacs-Ladepfad und verwende das Folgende in deinem .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)

Es gibt einen ähnlichen Modus namens switch-window.el , der große Zahlen in den Fenstern anzeigt ... (Durch Drücken der Zahl wird das Fenster umgeschaltet und die Anzeige zurückgesetzt.)

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

29
ocodo

Wenn Sie häufig mit mehreren emacs-Fenstern (> 3) arbeiten und einige Tastatureingaben speichern möchten, fügen Sie dies Ihrer init-Datei hinzu und Sie sind besser dran:

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

Fahren Sie nun mit M-o schnell durch die Fenster

12
octi

Es gibt einige sehr gute und vollständige Antworten, aber um die Frage minimalistisch zu beantworten:

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

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

M-n und M-p sind für mich am sinnvollsten, da sie analog zu C-n (nächste Zeile) und C-p (vorherige Zeile) sind:

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

(inspiriert von this und that )

4
Tshepang

Um @Nate, @aspirin und @ Troydm's Antwort hinzuzufügen, finde ich dies eine sehr hilfreiche Ergänzung, wenn Sie die Windmove-Befehle an eine beliebige Tastenkombination binden möchten:

(setq windmove-wrap-around t)

Mit der Standardkonfiguration erhalten Sie eine Fehlermeldung, wenn Sie versuchen, zu einem Fenster zu wechseln, das nicht vorhanden ist und das nach einiger Zeit nervig wird. Wenn jedoch Windmove-Wrap-around eingestellt ist, wird beim Versuch, sich beispielsweise vom unteren Rand des Rahmens zu bewegen, stattdessen das oberste Fenster im Rahmen ausgewählt. Dies kann für Sie ein intuitiveres Verhalten sein.

4
Hal

Basierend auf der Idee von @Nate, jedoch leicht modifiziert, um das Rückwärtsfahren zwischen Fenstern zu unterstützen

;; 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 und altk Durchläuft die sichtbaren Puffer. Vorwärts und rückwärts, um genau zu sein.

2
sjas

In Bezug auf Nates Antwort ersetzte ich das arrow keys um das traditionelle p zum up, n zum down, f zum right und b für left. Ich habe auch den Ctrl durch den Super Schlüssel ersetzt als C-p, C-n, C-f and C-b sind die Standard-Bewegungstasten. Durch diese Kombination mit M können Sie Zeichen und Zeilen überspringen, anstatt nach jedem Tastendruck einzeln durchzugehen. Daher fühlte sich Super key als die beste Wahl an, um eine einfache Schlüsselbindung zu gewährleisten. Außerdem müssen Sie jetzt nicht mehr die Hand von der Startreihe nehmen!

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

Ich hoffe es hilft!

2

Es gibt bereits ein Paket, mit dem Sie Fenster mit M- wechseln können. Besuche diese Website . Fügen Sie dies Ihrer Init-Datei hinzu:

(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