Wie wechsle ich schnell zwischen Fenstern?
Ich habe oft mehrere Fenster geöffnet und muss zwischen ihnen wechseln. Im Moment C-x o
komme ich zu dem, den ich will. Gibt es dafür einen effizienteren Workflow?
Wie wechsle ich schnell zwischen Fenstern?
Ich habe oft mehrere Fenster geöffnet und muss zwischen ihnen wechseln. Im Moment C-x o
komme ich zu dem, den ich will. Gibt es dafür einen effizienteren Workflow?
Antworten:
Ich bevorzuge offensichtlich ein Ass-Fenster dafür. Sie können zwischen sichtbaren Fenstern und Rahmen wechseln. Es ist in MELPA, Sie können es schnell installieren. Sie müssen es nur noch binden:
(global-set-key (kbd "C-x o") 'ace-window)
Oder verwenden Sie einen kürzeren Tastenakkord, da das Wechseln des Fensters häufig vorkommt:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
Es ist ein Ersatz für other-window
. Im Gegensatz zu letzterem müssen Sie ace-window
zum Auswählen eines Fensters nie zweimal oder öfter aufrufen : Sie wählen ein Fenster aus, das Sie in einem Aufruf (möglicherweise über mehrere Frames hinweg) aufrufen möchten.
Sie ace-window
können nicht nur Fenster wechseln, sondern auch mehr (Fenster löschen oder tauschen usw.) . Weitere Informationen finden Sie in der README-Datei .
ace-window
und dann gesehen, switch-window
was ungefähr dasselbe zu tun scheint, außer dass die Buchstaben ausgeprägter sind. Scheint lustig, wir haben beide Pakete.
switch-window
bis ich mich bei ace-window
MELPA anmeldete.
ace-window
, es hat mehr Anpassungsmöglichkeiten als andere Pakete, denke ich. Eine mögliche Hilfe für die Zukunft ist die Schlüsselbindung für eine Funktion, die der Smart - Swap - Aktion ähnelt, jedoch dieses Fenster verschlingt, was dazu führt, dass ein größeres Fenster an einem Punkt und ein kleineres ausgewähltes Fenster (das gegessene Fenster) vorhanden sind Fenster auf). Das Verhältnis sollte in diesem Fall als eine Hälfte, ein Viertel oder ein Drittel bestimmt werden.
Ein Weg ist zu benutzen windmove
. Mit den Standard-Tastenkombinationen können Sie in das Fenster neben dem derzeit aktiven Fenster wechseln.
Es ist in Emacs integriert, sodass Sie nichts installieren müssen. aktiviere es einfach mit dem folgenden minimalen Setup in deiner Init-Datei:
(windmove-default-keybindings)
Sie können dann zu den benachbarten Fenstern wechseln die folgenden Tasten (wo der Pfeil intuitiv definiert die Richtung verwendet , in dem Sie sich bewegen): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Wenn Sie stattdessen lieber einen anderen Modifikator verwenden möchten shift, können Sie ihn als Argument für angeben windmove-default-keybindings
. Zum Beispiel:
(windmove-default-keybindings 'meta)
oder
(windmove-default-keybindings 'control)
Weitere Informationen im Emacs Wiki .
(windmove-default-keybindings 'meta)
wie in EmacsWiki vorgeschlagen.
Shift-arrow
) , aber wenn Sie einen großen Monitor mit vielen Spalten haben, wird eine solche Bewegung schnell unhandlich. Es wäre interessanter, Fenster / Teilungen irgendwie aufzuzählen. Wie ace-window
, aber mit weniger Tastendrücken und einem offensichtlichen Algorithmus, um die gewünschte Zahl sofort herauszufinden.
Sie können other-window
eine einfachere Tastenfolge festlegen.
Zum Beispiel habe ich C-.
gebunden other-window
und C-,
gebunden, um zum vorherigen Fenster zu gehen.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Dies ist besonders nützlich, um mehrere Fenster zu verschieben. Sobald Sie die Strg-Taste gedrückt halten, müssen Sie nur eine einzige Taste drücken, um zum nächsten Fenster zu gelangen. Dies ist viel einfacher als drei Tastendrücke pro Zug.
C-x o
für other-window
ist einer der wenigen soliden Anwärter auf den Titel "Worst Default Emacs Shortcut". Meine Lösung (ähnlich wie zck) bestand darin other window
, eine (wesentlich) einfachere Tastenfolge wiederherzustellen - an die ich mich gebunden habe C-;
(und meine Caps-Lock
ist so getauscht, Ctrl
dass es nur ein kurzes Antippen der kleinen Finger dauert). Übrigens bin ich total abhängig von bestimmten Funktionen von helm
und icicles
(dh ich bin nicht "Anti-Pakete" oder so); Ich denke nur, dass eine einfache Lösung hier am besten funktioniert.
M-o
für other-window
. Einige Modi haben bereits M-o
verbindlich, insbesondere diff-mode
, ggtag-mode
und ibuffer-mode
. Sie müssen es in jeder Moduszuordnung manuell entbinden. unbind-key
zur Verfügung gestellt von bind-key.el
ist sehr nützlich.
M-o
auch, und habe M-O
gebunden, ace-window
wenn ich die zusätzliche Kraft brauche.
Fensternummerierung.el!
Ich weise den Hotkey ", 1", ", 2", ", 3" zu, um ein bestimmtes Fenster zu wechseln (bitte beachten Sie, dass ich den Böse-Modus verwende)
Außerdem zeige ich die Fensternummer in der Moduszeile in PINK-Farbe unterstrichen an.
Es ist ein visueller Hinweis, den Sie niemals ignorieren können.
Das ist der schnellste Weg , um das Fenster zu wechseln.
Überprüfen Sie https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el und https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el für mein Setup.
Sylvain Benner hat meine Idee in Spacemacs übernommen, aber die Tastenkombinationen sind unterschiedlich . Wenn Sie also Spacemacs verwenden, erhalten Sie die schnellste Lösung.
window-number
mit, M-<num>
um schnell s / w Fenster zu wechseln. Ein ähnliches Konzept wie dieses
Ohne zusätzliche Add-Ons können Sie weiterhin C-x o
ein optionales Präfix verwenden, um so viele Fenster zu überspringen. ZB: C-u 1 C-x o
Geht zum nächsten Fenster in der Reihenfolge (dh was Sie mit plain erhalten würden C-x o
), C-u 2 C-x o
geht zwei Fenster weiter, C-u 3 C-x o
geht drei Fenster weiter und so weiter.
Ein Auszug aus dem other-window
Docstring (die Funktion, die aufgerufen wird von C-x o
:
COUNT gibt die Anzahl der Fenster an, die übersprungen werden sollen, beginnend mit dem ausgewählten Fenster, bevor die Auswahl getroffen wird. Wenn COUNT positiv ist, überspringen Sie COUNT Fenster vorwärts. Wenn COUNT negativ ist, überspringen Sie -COUNT Fenster rückwärts. COUNT Zero bedeutet, dass kein Fenster übersprungen wird. Wählen Sie daher das ausgewählte Fenster aus. In einem interaktiven Aufruf ist COUNT das numerische Präfixargument. Zurück nil.
Einige Leute erinnern sich vielleicht an den Editor Brief (lustig genug von einer Firma namens Underware produziert).
Es hatte eine gute Möglichkeit, zwischen sichtbaren Fenstern zu wechseln. M-Pfeil würde den Cursor direkt in der Richtung der Pfeiltaste in das Fenster bewegen.
Also, ich abgebildet , die winmove-left
, winmove-right
, winmove-up
und winmove-down
Funktionen M-left
, M-right
, M-up
und M-down
Tasten wie in meiner .emacs - Datei folgt -
(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
Jetzt kann ich mühelos zwischen den Fenstern wechseln, unabhängig davon, wie überladen die Konfiguration ist ... Und es kann heutzutage mit der Größe der Displays ziemlich überladen werden ...
(windmove-default-keybindings 'meta)
!
Wenn Sie Icicles dann C-x o
können Sie auswählen , Fenster durch Namen (oder Radfahren).
Ohne Präfix arg C-x o
ist wie gewohnt, es other-window
sei denn, der Frame hat nur ein Fenster. In diesem Fall ist es other-frame
.
Mit einem Präfix arg, C-x o
ist ein Multibefehl , mit dem Sie nach Namen (oder durch Radfahren) zwischen Fenstern oder Frames navigieren können. Zum Navigieren zwischen Fenstern werden mehrere Befehle verwendet icicle-select-window
. Navigation zwischen Frames verwendet icicle-select-frame
.
Welche Navigation verwendet wird, hängt vom Präfix arg ab:
Null prefix arg (z C-0
): Wenn der ausgewählte Rahmen mehrere Fenster hat, dann ist dies
icicle-select-window
mit Fenstern in dem gleichen Rahmen als Kandidaten. Ansonsten (Einzelfensterrahmen) ist dies icicle-select-frame
.
C-u
: Wenn der ausgewählte Frame mehrere Fenster hat, sind dies
icicle-select-window
Fenster aus allen sichtbaren Frames als Kandidaten. Ansonsten ist das so icicle-select-frame
.
C-u C-u
: icicle-select-window
, mit Fenstern aus allen Frames als Kandidaten (einschließlich symbolisierter oder ausgeblendeter Frames).
Wie immer in Icicles können Sie (a) Vervollständigung kombinieren , indem Sie Text eingeben, um den Satz übereinstimmender Kandidaten (in diesem Fall Fenster- oder Frame-Namen) einzugrenzen , und (b) zwischen übereinstimmenden Kandidaten wechseln.
Verwenden Sie einen Tastenakkord, um schnell zwischen den Fenstern zu wechseln. Ich finde es viel schneller als nach einer Modifikatortaste zu greifen (und auch meine Hände weniger zu belasten).
Ich wähle ein Paket aus ace-window
, mit dem Sie einfacher als nur durch mehrere Fenster navigieren können other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Um dies nutzen zu können, benötigen Sie natürlich key-chord
und ace-window
, beide sind in melpa verfügbar.
ace-window
die Arbeit so ist, wie in der Antwort von @abo-abo. Es fällt mir auf, dass in diesem Zusammenhang die spezielle Tastenkombination eher als Kommentar als als Antwort sinnvoll wäre. Nur meine zwei Cent.
key-chord
sehr leicht zugängliche Tastenkombinationen binden. Die Beispielbindung von xo
ist schneller als C-x o
(Tiefe von eins gegen zwei). Diese Antwort könnte umformuliert werden, um zu betonen, dass die Antwort orthogonal zu den anderen Antworten zur Funktionsauswahl ist (und ace-window
nur eine von vielen Möglichkeiten ist, die auf die beschriebene Weise eingeschränkt werden könnten). Behalte diese Antwort als eindeutig!
Einige gute Antworten hier, ich bin auch ein Fan von WinMove, aber ich binde es an C-, weil der Organisationsmodus M- zum Bearbeiten von Überschriften verwendet
(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)
Wirklich gut wird es, wenn Sie es mit Hydra kombinieren . Nach den Beispielen in ihrem Wiki habe ich mein eigenes Monster erstellt:
(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)
Auf diese Weise kann ich die Fenster ändern, ihre Größe ändern, Puffer von Fenster zu Fenster verschieben, Puffer wechseln, Puffer löschen und sogar Fensterkonfigurationen über den Winner-Modus rückgängig machen. Zum Verlassen der Hydra drücken Sie einfach den Pfeil oder eine andere Taste, die sich nicht in der Hydra befindet. Die "Hydra-Move" -Funktionen finden Sie in den Hydra-Beispielen. Das Tolle an Hydra ist, dass ich mich nicht an all diese Tastenkombinationen und ihre "Modifikation" erinnern muss. Sobald Sie in der Hydra sind, ist alles als ein einziger Schlüssel verfügbar Drücken Sie.
(windmove-default-keybindings 'control)
.
Wenn Sie verwenden evil-mode
, können Sie einfach ein numerisches Präfix mit C-w C-w
( evil-window-next
) verwenden, um das gewünschte Fenster auszuwählen. Also: 1 C-w C-w
wählt das erste Fenster in zyklischer Reihenfolge aus, 3 C-w C-w
wählt das dritte Fenster in zyklischer Reihenfolge aus und so weiter.
Mit Ace Jump können Sie mit Ihrem Mauszeiger zu allen Wörtern auf einem Bildschirm navigieren, unabhängig davon, in welchem Fenster oder Rahmen sie sich befinden. Dies unterscheidet sich also nicht von der Verwendung von Ace Window oder Switch Window.
Ein Vorteil könnte sein, dass Sie beim Springen von Fenstern auch Ihren Mauszeiger mit einiger Präzision platzieren können.
Ich finde es immer noch etwas umständlich oder ablenkend und benutze windmove
mehr, weil es sehr einfach ist, aber benutze immer noch Ace Jump, wenn ich in einem anderen Fenster oder Frame gelesen habe und mich an eine Stelle dort bewegen möchte.
Wie üblich gibt es hundert verschiedene Möglichkeiten, dies zu erreichen. Mein bevorzugter Weg ist die Verwendung von NumberedWindows . Ich stelle dann die folgende Tastenkombination mit Super und den Tasten 1-9 ein.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Ich gehe auf dieses genaue Thema mit einem kürzlich erschienenen Beitrag von mir ein, den Sie auf Afternoon Coder lesen können .
Sie können sich auch dafür entscheiden, switch-window als visuellen Ersatz für zu verwendenC-x o
switch-window
über alle anderen zu verwenden?